Commit 2fa2e2892ab03f7bbbe84aa6e294ff99803e76ba

Authored by pina
2 parents cb7bbff7 b9dd9495

Merge branch 'master' of http://service.routetopa.eu:7480/WebCompDev/COMPONENTS

Showing 1592 changed files with 56359 additions and 5043 deletions

Too many changes.

To preserve performance only 100 of 1592 files are displayed.

bower_components/google-apis/.bower.json 100755 → 100644
1 1 {
2 2 "name": "google-apis",
3   - "version": "1.1.0",
  3 + "version": "1.1.2",
4 4 "description": "Web components to load Google API libraries",
5   - "homepage": "https://googlewebcomponents.github.io/google-apis",
  5 + "homepage": "https://elements.polymer-project.org/elements/google-apis?active=google-js-api",
6 6 "main": "google-apis.html",
7 7 "authors": [
8 8 "Scott Miles <sjmiles@google.com>",
... ... @@ -27,13 +27,13 @@
27 27 "devDependencies": {
28 28 "iron-component-page": "PolymerElements/iron-component-page#^1.0.0"
29 29 },
30   - "_release": "1.1.0",
  30 + "_release": "1.1.2",
31 31 "_resolution": {
32 32 "type": "version",
33   - "tag": "1.1.0",
34   - "commit": "7fa2ff1da3d6a2bd5891b7441d89fd8ffbf0d83d"
  33 + "tag": "1.1.2",
  34 + "commit": "5d0d4e8eb3d67d1e21be9f2209e25fc98381718a"
35 35 },
36 36 "_source": "git://github.com/GoogleWebComponents/google-apis.git",
37   - "_target": "^1.1.0",
  37 + "_target": "^1.1.1",
38 38 "_originalSource": "GoogleWebComponents/google-apis"
39 39 }
40 40 \ No newline at end of file
... ...
bower_components/google-apis/LICENSE 100755 → 100644
bower_components/google-apis/README.md 100755 → 100644
bower_components/google-apis/bower.json 100755 → 100644
1 1 {
2 2 "name": "google-apis",
3   - "version": "1.1.0",
  3 + "version": "1.1.2",
4 4 "description": "Web components to load Google API libraries",
5   - "homepage": "https://googlewebcomponents.github.io/google-apis",
  5 + "homepage": "https://elements.polymer-project.org/elements/google-apis?active=google-js-api",
6 6 "main": "google-apis.html",
7 7 "authors": [
8 8 "Scott Miles <sjmiles@google.com>",
... ...
bower_components/google-apis/demo/index.html 100755 → 100644
bower_components/google-apis/google-apis.html 100755 → 100644
bower_components/google-apis/google-client-loader.html 100755 → 100644
... ... @@ -77,13 +77,11 @@ For loading `gapi.client` libraries
77 77 * You can find the full list of APIs on the
78 78 * <a href="https://developers.google.com/apis-explorer"> Google APIs
79 79 * Explorer</a>.
80   - * @required
81 80 */
82 81 name: String,
83 82  
84 83 /**
85 84 * Version of the API to load, e.g. 'v1'.
86   - * @required
87 85 */
88 86 version: String,
89 87  
... ...
bower_components/google-apis/google-js-api.html 100755 → 100644
bower_components/google-apis/google-legacy-loader.html 100755 → 100644
bower_components/google-apis/google-maps-api.html 100755 → 100644
... ... @@ -26,7 +26,7 @@ Dynamically loads the Google Maps JavaScript API, firing the `api-load` event wh
26 26  
27 27 Any number of components can use `<google-maps-api>` elements, and the library will only be loaded once.
28 28  
29   -@blurb Element wrapper around Google Maps API.
  29 +@summary Element wrapper around Google Maps API.
30 30  
31 31 */
32 32 Polymer({
... ... @@ -63,15 +63,6 @@ Any number of components can use `&lt;google-maps-api&gt;` elements, and the library w
63 63 },
64 64  
65 65 /**
66   - * The libraries to load with this map. For more information
67   - * see https://developers.google.com/maps/documentation/javascript/libraries.
68   - */
69   - libraries: {
70   - type: String,
71   - value: ''
72   - },
73   -
74   - /**
75 66 * Version of the Maps API to use.
76 67 */
77 68 version: {
... ... @@ -114,16 +105,15 @@ Any number of components can use `&lt;google-maps-api&gt;` elements, and the library w
114 105 /** @private */
115 106 libraryUrl: {
116 107 type: String,
117   - computed: '_computeUrl(mapsUrl, version, libraries, apiKey, clientId, language, signedIn)'
  108 + computed: '_computeUrl(mapsUrl, version, apiKey, clientId, language, signedIn)'
118 109 }
119 110 },
120 111  
121   - _computeUrl: function(mapsUrl, version, libraries, apiKey, clientId, language, signedIn) {
  112 + _computeUrl: function(mapsUrl, version, apiKey, clientId, language, signedIn) {
122 113 var url = mapsUrl + '&v=' + version;
123 114  
124   - if (libraries) {
125   - url += "&libraries=" + libraries;
126   - }
  115 + // Always load all Maps API libraries.
  116 + url += '&libraries=drawing,geometry,places,visualization';
127 117  
128 118 if (apiKey && !clientId) {
129 119 url += '&key=' + apiKey;
... ...
bower_components/google-apis/google-plusone-api.html 100755 → 100644
bower_components/google-apis/google-realtime-api.html 100755 → 100644
bower_components/google-apis/google-youtube-api.html 100755 → 100644
bower_components/google-apis/index.html 100755 → 100644
bower_components/google-map/.bower.json 100755 → 100644
1 1 {
2 2 "name": "google-map",
3   - "version": "1.1.2",
  3 + "version": "1.1.4",
4 4 "description": "Google Maps web components",
5   - "homepage": "https://googlewebcomponents.github.io/google-map",
  5 + "homepage": "https://elements.polymer-project.org/elements/google-map",
6 6 "main": [
7 7 "google-map.html",
8 8 "google-map-search.html",
... ... @@ -28,19 +28,20 @@
28 28 "maps"
29 29 ],
30 30 "dependencies": {
31   - "polymer": "Polymer/polymer#^1.1.0",
32   - "google-apis": "GoogleWebComponents/google-apis#^1.1.0",
33   - "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0"
  31 + "polymer": "Polymer/polymer#^1.1.4",
  32 + "google-apis": "GoogleWebComponents/google-apis#^1.1.1",
  33 + "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
  34 + "iron-selector": "PolymerElements/iron-selector#^1.0.5"
34 35 },
35 36 "devDependencies": {
36 37 "web-component-tester": "*",
37 38 "iron-component-page": "PolymerElements/iron-component-page#^1.0.2"
38 39 },
39   - "_release": "1.1.2",
  40 + "_release": "1.1.4",
40 41 "_resolution": {
41 42 "type": "version",
42   - "tag": "1.1.2",
43   - "commit": "3567129ffac7df683346b5c9d8ad0c32e9213adb"
  43 + "tag": "1.1.4",
  44 + "commit": "571392000956d93dddd9e2f6d3eb9593a588f5f0"
44 45 },
45 46 "_source": "git://github.com/GoogleWebComponents/google-map.git",
46 47 "_target": "^1.0.0",
... ...
bower_components/google-map/LICENSE 100755 → 100644
bower_components/google-map/README.md 100755 → 100644
bower_components/google-map/bower.json 100755 → 100644
1 1 {
2 2 "name": "google-map",
3   - "version": "1.1.2",
  3 + "version": "1.1.4",
4 4 "description": "Google Maps web components",
5   - "homepage": "https://googlewebcomponents.github.io/google-map",
  5 + "homepage": "https://elements.polymer-project.org/elements/google-map",
6 6 "main": [
7 7 "google-map.html",
8 8 "google-map-search.html",
... ... @@ -28,9 +28,10 @@
28 28 "maps"
29 29 ],
30 30 "dependencies": {
31   - "polymer": "Polymer/polymer#^1.1.0",
32   - "google-apis": "GoogleWebComponents/google-apis#^1.1.0",
33   - "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0"
  31 + "polymer": "Polymer/polymer#^1.1.4",
  32 + "google-apis": "GoogleWebComponents/google-apis#^1.1.1",
  33 + "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
  34 + "iron-selector": "PolymerElements/iron-selector#^1.0.5"
34 35 },
35 36 "devDependencies": {
36 37 "web-component-tester": "*",
... ...
bower_components/google-map/demo/index.html 100755 → 100644
... ... @@ -4,9 +4,10 @@
4 4 <head>
5 5 <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
6 6 <title>Google Map demo</title>
7   - <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
  7 + <script src="../../webcomponentsjs/webcomponents-lite.min.js"></script>
8 8 <link rel="import" href="../google-map.html">
9 9 <link rel="import" href="../google-map-marker.html">
  10 + <link rel="import" href="../google-map-poly.html">
10 11 <link rel="import" href="../google-map-directions.html">
11 12 <style>
12 13 body {
... ... @@ -22,14 +23,17 @@
22 23 </head>
23 24 <body fullbleed>
24 25  
25   -<!-- Note: places library needs to be loaded because we're using google-map-directions
26   - which also loads the maps lib with the places library. -->
27 26 <google-map latitude="37.779" longitude="-122.3892" min-zoom="9" max-zoom="11"
28   - language="en" libraries="places">
  27 + language="en">
29 28 <google-map-marker latitude="37.779" longitude="-122.3892"
30 29 title="Go Giants!" draggable="true">
31 30 <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/4/49/San_Francisco_Giants_Cap_Insignia.svg/200px-San_Francisco_Giants_Cap_Insignia.svg.png" />
32 31 </google-map-marker>
  32 + <google-map-poly closed fill-color="red" fill-opacity=".25" stroke-weight="1">
  33 + <google-map-point latitude="37.779" longitude="-122.3892"></google-map-point>
  34 + <google-map-point latitude="37.804" longitude="-122.2711"></google-map-point>
  35 + <google-map-point latitude="37.386" longitude="-122.0837"></google-map-point>
  36 + </google-map-poly>
33 37 </google-map>
34 38  
35 39 <google-map-directions start-address="Oakland" end-address="Mountain View"
... ...
bower_components/google-map/demo/polys.html 0 → 100644
  1 +<!doctype html>
  2 +<!-- Copyright (c) 2015 Google Inc. All rights reserved. -->
  3 +<html>
  4 +<head>
  5 + <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
  6 + <title>Google Map Poly demo</title>
  7 + <script src="../../webcomponentsjs/webcomponents-lite.min.js"></script>
  8 + <link rel="import" href="../google-map.html">
  9 + <link rel="import" href="../google-map-poly.html">
  10 + <style>
  11 + body {
  12 + margin: 0;
  13 + height: 100vh;
  14 + }
  15 + #toggleEdit {
  16 + position: absolute;
  17 + top: 10px;
  18 + left: 120px;
  19 + }
  20 + </style>
  21 +</head>
  22 +<body fullbleed>
  23 +
  24 +<google-map latitude="37.779" longitude="-122.3892" min-zoom="9" max-zoom="11" language="en">
  25 + <google-map-poly closed fill-color="red" fill-opacity=".25" stroke-weight="1">
  26 + <google-map-point latitude="37.779" longitude="-122.3892"></google-map-point>
  27 + <google-map-point latitude="37.804" longitude="-122.2711"></google-map-point>
  28 + <google-map-point latitude="37.386" longitude="-122.0837"></google-map-point>
  29 + </google-map-poly>
  30 +</google-map>
  31 +
  32 +<button id="toggleEdit" onclick="toggleEdit()">Enable editing</button>
  33 +
  34 +<script>
  35 + var poly = document.querySelector('google-map-poly');
  36 + var button = document.querySelector('#toggleEdit');
  37 +
  38 + function toggleEdit() {
  39 + poly.editable = !poly.editable;
  40 + button.innerText = poly.editable ? 'Disable editing' : 'Enable editing';
  41 + }
  42 +</script>
  43 +</body>
  44 +</html>
... ...
bower_components/google-map/google-map-directions.html 100755 → 100644
... ... @@ -33,7 +33,6 @@ information on the API.
33 33 <template>
34 34 <google-maps-api
35 35 api-key="[[apiKey]]"
36   - libraries="[[libraries]]"
37 36 language="[[language]]"
38 37 on-api-load="_mapApiLoaded"></google-maps-api>
39 38 </template>
... ... @@ -48,8 +47,7 @@ information on the API.
48 47 Fired whenever the directions service returns a result.
49 48  
50 49 @event google-map-response
51   -@param {Object} detail
52   -@param {object} detail.response The directions service response.
  50 +@param {{response: Object}}} detail
53 51 */
54 52 properties: {
55 53 /**
... ... @@ -110,20 +108,6 @@ Fired whenever the directions service returns a result.
110 108 },
111 109  
112 110 /**
113   - * A comma separated list (e.g. "places,geometry") of libraries to load
114   - * with this map. Defaults to "places". For more information see
115   - * https://developers.google.com/maps/documentation/javascript/libraries.
116   - *
117   - * Note, this needs to be set to the same value as the one used on <google-map>.
118   - * If you're overriding that element's `libraries` property, this one also
119   - * needs to be set to the Maps API loads the library code.
120   - */
121   - libraries: {
122   - type: String,
123   - value: 'places'
124   - },
125   -
126   - /**
127 111 * The localized language to load the Maps API with. For more information
128 112 * see https://developers.google.com/maps/documentation/javascript/basics#Language
129 113 *
... ... @@ -136,6 +120,14 @@ Fired whenever the directions service returns a result.
136 120 },
137 121  
138 122 /**
  123 + * Options for the display of results
  124 + */
  125 + rendererOptions: {
  126 + type: Object,
  127 + value: function() { return {}; }
  128 + },
  129 +
  130 + /**
139 131 * The response from the directions service.
140 132 *
141 133 */
... ... @@ -163,7 +155,7 @@ Fired whenever the directions service returns a result.
163 155 _mapChanged: function() {
164 156 if (this.map && this.map instanceof google.maps.Map) {
165 157 if (!this.directionsRenderer) {
166   - this.directionsRenderer = new google.maps.DirectionsRenderer();
  158 + this.directionsRenderer = new google.maps.DirectionsRenderer(this.rendererOptions);
167 159 }
168 160 this.directionsRenderer.setMap(this.map);
169 161 this._responseChanged();
... ...
bower_components/google-map/google-map-marker.html 100755 → 100644
... ... @@ -115,6 +115,16 @@ child of `google-map`.
115 115 * @param {google.maps.MouseEvent} event The mouse event.
116 116 */
117 117  
  118 + /**
  119 + * Fired when an infowindow is opened.
  120 + * @event google-map-marker-open
  121 + */
  122 +
  123 + /**
  124 + * Fired when the close button of the infowindow is pressed.
  125 + * @event google-map-marker-close
  126 + */
  127 +
118 128 properties: {
119 129 /**
120 130 * A Google Maps marker object.
... ... @@ -202,6 +212,15 @@ child of `google-map`.
202 212 type: String,
203 213 value: null,
204 214 observer: '_animationChanged'
  215 + },
  216 +
  217 + /**
  218 + * Specifies whether the InfoWindow is open or not
  219 + */
  220 + open: {
  221 + type: Boolean,
  222 + value: false,
  223 + observer: '_openChanged'
205 224 }
206 225 },
207 226  
... ... @@ -310,20 +329,37 @@ child of `google-map`.
310 329 if (!this.info) {
311 330 // Create a new infowindow
312 331 this.info = new google.maps.InfoWindow();
313   - this.infoHandler_ = google.maps.event.addListener(this.marker, 'click', function() {
314   - this.info.open(this.map, this.marker);
  332 + this.openInfoHandler_ = google.maps.event.addListener(this.marker, 'click', function() {
  333 + this.open = true;
  334 + }.bind(this));
  335 +
  336 + this.closeInfoHandler_ = google.maps.event.addListener(this.info, 'closeclick', function() {
  337 + this.open = false;
315 338 }.bind(this));
316 339 }
317 340 this.info.setContent(content);
318 341 } else {
319 342 if (this.info) {
320 343 // Destroy the existing infowindow. It doesn't make sense to have an empty one.
321   - google.maps.event.removeListener(this.infoHandler_);
  344 + google.maps.event.removeListener(this.openInfoHandler_);
  345 + google.maps.event.removeListener(this.closeInfoHandler_);
322 346 this.info = null;
323 347 }
324 348 }
325 349 },
326 350  
  351 + _openChanged: function() {
  352 + if (this.info) {
  353 + if (this.open) {
  354 + this.info.open(this.map, this.marker);
  355 + this.fire('google-map-marker-open');
  356 + } else {
  357 + this.info.close();
  358 + this.fire('google-map-marker-close');
  359 + }
  360 + }
  361 + },
  362 +
327 363 _mapReady: function() {
328 364 this._listeners = {};
329 365 this.marker = new google.maps.Marker({
... ... @@ -343,6 +379,7 @@ child of `google-map`.
343 379 this._clickEventsChanged();
344 380 this._contentChanged();
345 381 this._mouseEventsChanged();
  382 + this._openChanged();
346 383 setupDragHandler_.bind(this)();
347 384 },
348 385  
... ...
bower_components/google-map/google-map-point.html 0 → 100644
  1 +<!-- Copyright (c) 2015 Google Inc. All rights reserved. -->
  2 +
  3 +<link rel="import" href="../polymer/polymer.html">
  4 +<link rel="import" href="../google-apis/google-maps-api.html">
  5 +
  6 +<!--
  7 +The `google-map-point` element represents a point on a map. It's used as a child of other
  8 +google-map-* elements.
  9 +
  10 +<b>Example</b>—points defining a semi-translucent blue triangle:
  11 +
  12 + <google-map latitude="37.77493" longitude="-122.41942">
  13 + <google-map-poly closed fill-color="blue" fill-opacity=".5">
  14 + <google-map-point latitude="36.77493" longitude="-121.41942"></google-map-point>
  15 + <google-map-point latitude="38.77493" longitude="-122.41942"></google-map-point>
  16 + <google-map-point latitude="36.77493" longitude="-123.41942"></google-map-point>
  17 + </google-map-poly>
  18 + </google-map>
  19 +-->
  20 +<script>
  21 + Polymer({
  22 + is: 'google-map-point',
  23 +
  24 + hostAttributes: {hidden: true},
  25 +
  26 + properties: {
  27 + /**
  28 + * The point's longitude coordinate.
  29 + */
  30 + longitude: {
  31 + type: Number,
  32 + value: null
  33 + },
  34 +
  35 + /**
  36 + * The point's latitude coordinate.
  37 + */
  38 + latitude: {
  39 + type: Number,
  40 + value: null
  41 + }
  42 + },
  43 +
  44 + /**
  45 + * Returns the point as a Google Maps LatLng object.
  46 + *
  47 + * @return {google.maps.LatLnt} The LatLng object.
  48 + */
  49 + getPosition: function() {
  50 + return new google.maps.LatLng(this.latitude, this.longitude);
  51 + }
  52 + });
  53 +</script>
... ...
bower_components/google-map/google-map-poly.html 0 → 100644
  1 +<!-- Copyright (c) 2015 Google Inc. All rights reserved. -->
  2 +
  3 +<link rel="import" href="../polymer/polymer.html">
  4 +<link rel="import" href="../google-apis/google-maps-api.html">
  5 +<link rel="import" href="google-map-point.html">
  6 +
  7 +<!--
  8 +The `google-map-poly` element represents a series of connected line segments (aka a polyline) which
  9 +may also be closed to form a polygon (provided there are at least three points). It is used as a
  10 +child of `google-map` and will contain at least two `google-map-point` child elements.
  11 +
  12 +<b>Example</b>—a simple line:
  13 +
  14 + <google-map latitude="37.77493" longitude="-122.41942">
  15 + <google-map-poly>
  16 + <google-map-point latitude="37.77493" longitude="-122.41942"></google-map-point>
  17 + <google-map-point latitude="38.77493" longitude="-123.41942"></google-map-point>
  18 + </google-map-poly>
  19 + </google-map>
  20 +
  21 +<b>Example</b>—a semi-translucent blue triangle:
  22 +
  23 + <google-map latitude="37.77493" longitude="-122.41942">
  24 + <google-map-poly closed fill-color="blue" fill-opacity=".5">
  25 + <google-map-point latitude="36.77493" longitude="-121.41942"></google-map-point>
  26 + <google-map-point latitude="38.77493" longitude="-122.41942"></google-map-point>
  27 + <google-map-point latitude="36.77493" longitude="-123.41942"></google-map-point>
  28 + </google-map-poly>
  29 + </google-map>
  30 +-->
  31 +
  32 +<dom-module id="google-map-poly">
  33 + <style>
  34 + :host {
  35 + display: none;
  36 + }
  37 + </style>
  38 + <template>
  39 + <content id="points" select="google-map-point"></content>
  40 + </template>
  41 +</polymer-element>
  42 +
  43 +<script>
  44 + Polymer({
  45 + is: 'google-map-poly',
  46 +
  47 + /**
  48 + * Fired when the `path` property is built based on child `google-map-point` elements, either
  49 + * initially or when they are changed.
  50 + * @event google-map-poly-path-built
  51 + * @param {MVCArray.<LatLng>} path The poly path.
  52 + */
  53 + /**
  54 + * Fired when the user finishes adding vertices to the poly. The host component can use the
  55 + * provided path to rebuild its list of points.
  56 + * @event google-map-poly-path-updated
  57 + * @param {MVCArray.<LatLng>} path The poly path.
  58 + */
  59 + /**
  60 + * Fired when the DOM `click` event is fired on the poly. Requires the clickEvents attribute to
  61 + * be true.
  62 + * @event google-map-poly-click
  63 + * @param {google.maps.PolyMouseEvent} event The poly event.
  64 + */
  65 + /**
  66 + * Fired when the DOM `dblclick` event is fired on the poly. Requires the clickEvents attribute
  67 + * to be true.
  68 + * @event google-map-poly-dblclick
  69 + * @param {google.maps.PolyMouseEvent} event The poly event.
  70 + */
  71 + /**
  72 + * Fired repeatedly while the user drags the poly. Requires the dragEvents attribute to be true.
  73 + * @event google-map-poly-drag
  74 + * @param {google.maps.MouseEvent} event The mouse event.
  75 + */
  76 + /**
  77 + * Fired when the user stops dragging the poly. Requires the dragEvents attribute to be true.
  78 + * @event google-map-poly-dragend
  79 + * @param {google.maps.MouseEvent} event The mouse event.
  80 + */
  81 + /**
  82 + * Fired when the user starts dragging the poly. Requires the dragEvents attribute to be true.
  83 + * @event google-map-poly-dragstart
  84 + * @param {google.maps.MouseEvent} event The mouse event.
  85 + */
  86 + /**
  87 + * Fired when the DOM `mousedown` event is fired on the poly. Requires the mouseEvents attribute
  88 + * to be true.
  89 + * @event google-map-poly-mousedown
  90 + * @param {google.maps.PolyMouseEvent} event The poly event.
  91 + */
  92 + /**
  93 + * Fired when the DOM `mousemove` event is fired on the poly. Requires the mouseEvents attribute
  94 + * to be true.
  95 + * @event google-map-poly-mousemove
  96 + * @param {google.maps.PolyMouseEvent} event The poly event.
  97 + */
  98 + /**
  99 + * Fired on poly mouseout. Requires the mouseEvents attribute to be true.
  100 + * @event google-map-poly-mouseout
  101 + * @param {google.maps.PolyMouseEvent} event The poly event.
  102 + */
  103 + /**
  104 + * Fired on poly mouseover. Requires the mouseEvents attribute to be true.
  105 + * @event google-map-poly-mouseover
  106 + * @param {google.maps.PolyMouseEvent} event The poly event.
  107 + */
  108 + /**
  109 + * Fired when the DOM `mouseup` event is fired on the poly. Requires the mouseEvents attribute
  110 + * to be true.
  111 + * @event google-map-poly-mouseup
  112 + * @param {google.maps.PolyMouseEvent} event The poly event.
  113 + */
  114 + /**
  115 + * Fired when the poly is right-clicked on. Requires the clickEvents attribute to be true.
  116 + * @event google-map-poly-rightclick
  117 + * @param {google.maps.PolyMouseEvent} event The poly event.
  118 + */
  119 + properties: {
  120 + /**
  121 + * A Google Maps polyline or polygon object (depending on value of "closed" attribute).
  122 + * @type google.maps.Polyline|google.maps.Polygon
  123 + */
  124 + poly: {
  125 + type: Object,
  126 + readOnly: true
  127 + },
  128 +
  129 + /**
  130 + * An array of the Google Maps LatLng objects that define the poly shape.
  131 + * @type MVCArray.<LatLng>
  132 + */
  133 + path: {
  134 + type: Object,
  135 + readOnly: true
  136 + },
  137 +
  138 + /**
  139 + * The Google map object.
  140 + * @type google.maps.Map
  141 + */
  142 + map: {
  143 + type: Object,
  144 + observer: '_mapChanged'
  145 + },
  146 +
  147 + /**
  148 + * When true, the poly will generate mouse events.
  149 + */
  150 + clickable: {
  151 + type: Boolean,
  152 + value: false,
  153 + observer: '_clickableChanged'
  154 + },
  155 +
  156 + /**
  157 + * When true, the google-map-poly-*click events will be automatically registered.
  158 + */
  159 + clickEvents: {
  160 + type: Boolean,
  161 + value: false,
  162 + observer: '_clickEventsChanged'
  163 + },
  164 +
  165 + /**
  166 + * When true, the path will be closed by connecting the last point to the first one and
  167 + * treating the poly as a polygon.
  168 + */
  169 + closed: {
  170 + type: Boolean,
  171 + value: false,
  172 + observer: '_closedChanged'
  173 + },
  174 +
  175 + /**
  176 + * When true, the poly may be dragged to a new position.
  177 + */
  178 + draggable: {
  179 + type: Boolean,
  180 + value: false,
  181 + },
  182 +
  183 + /**
  184 + * When true, the google-map-poly-drag* events will be automatically registered.
  185 + */
  186 + dragEvents: {
  187 + type: Boolean,
  188 + value: false,
  189 + observer: '_dragEventsChanged'
  190 + },
  191 +
  192 + /**
  193 + * When true, the poly's vertices may be individually moved or new ones added.
  194 + */
  195 + editable: {
  196 + type: Boolean,
  197 + value: false,
  198 + observer: '_editableChanged'
  199 + },
  200 +
  201 + /**
  202 + * When true, indicates that the user has begun editing the poly path (adding vertices).
  203 + */
  204 + editing: {
  205 + type: Boolean,
  206 + value: false,
  207 + notify: true,
  208 + readOnly: true
  209 + },
  210 +
  211 + /**
  212 + * If the path is closed, the polygon fill color. All CSS3 colors are supported except for
  213 + * extended named colors.
  214 + */
  215 + fillColor: {
  216 + type: String,
  217 + value: '',
  218 + observer: '_fillColorChanged'
  219 + },
  220 +
  221 + /**
  222 + * If the path is closed, the polygon fill opacity (between 0.0 and 1.0).
  223 + */
  224 + fillOpacity: {
  225 + type: Number,
  226 + value: 0,
  227 + observer: '_fillOpacityChanged'
  228 + },
  229 +
  230 + /**
  231 + * When true, the poly's edges are interpreted as geodesic and will follow the curvature of
  232 + * the Earth. When not set, the poly's edges are rendered as straight lines in screen space.
  233 + * Note that the poly of a geodesic poly may appear to change when dragged, as the dimensions
  234 + * are maintained relative to the surface of the earth.
  235 + */
  236 + geodesic: {
  237 + type: Boolean,
  238 + value: false,
  239 + observer: '_geodesicChanged'
  240 + },
  241 +
  242 + /**
  243 + * If the path is not closed, the icons to be rendered along the polyline.
  244 + */
  245 + icons: {
  246 + type: Array,
  247 + value: null,
  248 + observer: '_iconsChanged'
  249 + },
  250 +
  251 + /**
  252 + * When true, the google-map-poly-mouse* events will be automatically registered.
  253 + */
  254 + mouseEvents: {
  255 + type: Boolean,
  256 + value: false,
  257 + observer: '_mouseEventsChanged'
  258 + },
  259 +
  260 + /**
  261 + * The color to draw the poly's stroke with. All CSS3 colors are supported except for extended
  262 + * named colors.
  263 + */
  264 + strokeColor: {
  265 + type: String,
  266 + value: 'black',
  267 + observer: '_strokeColorChanged'
  268 + },
  269 +
  270 + /**
  271 + * The stroke opacity (between 0.0 and 1.0).
  272 + */
  273 + strokeOpacity: {
  274 + type: Number,
  275 + value: 1,
  276 + observer: '_strokeOpacityChanged'
  277 + },
  278 +
  279 + /**
  280 + * The stroke position (center, inside, or outside).
  281 + */
  282 + strokePosition: {
  283 + type: String,
  284 + value: 'center',
  285 + observer: '_strokePositionChanged'
  286 + },
  287 +
  288 + /**
  289 + * The stroke width in pixels.
  290 + */
  291 + strokeWeight: {
  292 + type: Number,
  293 + value: 3,
  294 + observer: '_strokeWeightChanged'
  295 + },
  296 +
  297 + /**
  298 + * The Z-index relative to other objects on the map.
  299 + */
  300 + zIndex: {
  301 + type: Number,
  302 + value: 0,
  303 + observer: '_zIndexChanged'
  304 + }
  305 + },
  306 +
  307 + // Lifecycle event handlers.
  308 +
  309 + detached: function() {
  310 + this.poly.setMap(null);
  311 + if (this._pointsObserver) {
  312 + this._pointsObserver.disconnect();
  313 + this._pointsObserver = null;
  314 + }
  315 + for (var name in this._listeners) {
  316 + this._clearListener(name);
  317 + }
  318 + },
  319 +
  320 + attached: function() {
  321 + // If element is added back to DOM, put it back on the map.
  322 + this.poly && this.poly.setMap(this.map);
  323 + },
  324 +
  325 + // Attribute/property change watchers.
  326 +
  327 + attributeChanged: function(attrName, oldVal, newVal) {
  328 + if (!this.poly) {
  329 + return;
  330 + }
  331 +
  332 + // Cannot use *Changed watchers for native properties.
  333 + switch (attrName) {
  334 + case 'hidden':
  335 + this.poly.setVisible(!this.hidden);
  336 + break;
  337 + case 'draggable':
  338 + this.poly.setDraggable(this.draggable);
  339 + break;
  340 + }
  341 + },
  342 +
  343 + _clickableChanged: function() {
  344 + this.poly && this.poly.set('clickable', this.clickable);
  345 + },
  346 +
  347 + _clickEventsChanged: function() {
  348 + if (this.poly) {
  349 + if (this.clickEvents) {
  350 + this._forwardEvent('click');
  351 + this._forwardEvent('dblclick');
  352 + this._forwardEvent('rightclick');
  353 + } else {
  354 + this._clearListener('click');
  355 + this._clearListener('dblclick');
  356 + this._clearListener('rightclick');
  357 + }
  358 + }
  359 + },
  360 +
  361 + _closedChanged: function() {
  362 + this._mapChanged();
  363 + },
  364 +
  365 + _dragEventsChanged: function() {
  366 + if (this.poly) {
  367 + if (this.clickEvents) {
  368 + this._forwardEvent('drag');
  369 + this._forwardEvent('dragend');
  370 + this._forwardEvent('dragstart');
  371 + } else {
  372 + this._clearListener('drag');
  373 + this._clearListener('dragend');
  374 + this._clearListener('dragstart');
  375 + }
  376 + }
  377 + },
  378 +
  379 + _editableChanged: function() {
  380 + this.poly && this.poly.setEditable(this.editable);
  381 + },
  382 +
  383 + _fillColorChanged: function() {
  384 + this.poly && this.poly.set('fillColor', this.fillColor);
  385 + },
  386 +
  387 + _fillOpacityChanged: function() {
  388 + this.poly && this.poly.set('fillOpacity', this.fillOpacity);
  389 + },
  390 +
  391 + _geodesicChanged: function() {
  392 + this.poly && this.poly.set('geodesic', this.geodesic);
  393 + },
  394 +
  395 + _iconsChanged: function() {
  396 + this.poly && this.poly.set('icons', this.icons);
  397 + },
  398 +
  399 + _mapChanged: function() {
  400 + // Poly will be rebuilt, so disconnect existing one from old map and listeners.
  401 + if (this.poly) {
  402 + this.poly.setMap(null);
  403 + google.maps.event.clearInstanceListeners(this.poly);
  404 + }
  405 +
  406 + if (this.map && this.map instanceof google.maps.Map) {
  407 + this._createPoly();
  408 + }
  409 + },
  410 +
  411 + _mouseEventsChanged: function() {
  412 + if (this.poly) {
  413 + if (this.mouseEvents) {
  414 + this._forwardEvent('mousedown');
  415 + this._forwardEvent('mousemove');
  416 + this._forwardEvent('mouseout');
  417 + this._forwardEvent('mouseover');
  418 + this._forwardEvent('mouseup');
  419 + } else {
  420 + this._clearListener('mousedown');
  421 + this._clearListener('mousemove');
  422 + this._clearListener('mouseout');
  423 + this._clearListener('mouseover');
  424 + this._clearListener('mouseup');
  425 + }
  426 + }
  427 + },
  428 +
  429 + _strokeColorChanged: function() {
  430 + this.poly && this.poly.set('strokeColor', this.strokeColor);
  431 + },
  432 +
  433 + _strokeOpacityChanged: function() {
  434 + this.poly && this.poly.set('strokeOpacity', this.strokeOpacity);
  435 + },
  436 +
  437 + _strokePositionChanged: function() {
  438 + this.poly && this.poly.set('strokePosition', this._convertStrokePosition());
  439 + },
  440 +
  441 + _strokeWeightChanged: function() {
  442 + this.poly && this.poly.set('strokeWeight', this.strokeWeight);
  443 + },
  444 +
  445 + _zIndexChanged: function() {
  446 + this.poly && this.poly.set('zIndex', this.zIndex);
  447 + },
  448 +
  449 + // Helper logic.
  450 +
  451 + _buildPathFromPoints: function() {
  452 + this._points = Array.prototype.slice.call(Polymer.dom(this.$.points).getDistributedNodes());
  453 +
  454 + // Build path from current points (ignoring vertex insertions while doing so).
  455 + this._building = true;
  456 + this.path.clear();
  457 + for (var i = 0, point; point = this._points[i]; ++i) {
  458 + this.path.push(point.getPosition());
  459 + }
  460 + this._building = false;
  461 +
  462 + this.fire('google-map-poly-path-built', this.path);
  463 +
  464 + // Watch for future updates.
  465 + if (this._pointsObserver) {
  466 + return;
  467 + }
  468 + this._pointsObserver = new MutationObserver(this._buildPathFromPoints.bind(this));
  469 + this._pointsObserver.observe(this, {
  470 + childList: true
  471 + });
  472 + },
  473 +
  474 + _clearListener: function(name) {
  475 + if (this._listeners[name]) {
  476 + google.maps.event.removeListener(this._listeners[name]);
  477 + this._listeners[name] = null;
  478 + }
  479 + },
  480 +
  481 + _convertStrokePosition: function() {
  482 + return google.maps.StrokePosition && this.strokePosition ?
  483 + google.maps.StrokePosition[this.strokePosition.toUpperCase()] : 0;
  484 + },
  485 +
  486 + _createPoly: function() {
  487 + // Build poly's path and register mutation listeners on first creation.
  488 + if (!this.path) {
  489 + this._setPath(new google.maps.MVCArray());
  490 + google.maps.event.addListener(this.path, 'insert_at', this._startEditing.bind(this));
  491 + google.maps.event.addListener(this.path, 'set_at', this._updatePoint.bind(this));
  492 + this._buildPathFromPoints();
  493 + }
  494 +
  495 + var options = {
  496 + clickable: this.clickable || this.draggable, // draggable must be clickable to work.
  497 + draggable: this.draggable,
  498 + editable: this.editable,
  499 + geodesic: this.geodesic,
  500 + map: this.map,
  501 + path: this.path,
  502 + strokeColor: this.strokeColor,
  503 + strokeOpacity: this.strokeOpacity,
  504 + strokePosition: this._convertStrokePosition(),
  505 + strokeWeight: this.strokeWeight,
  506 + visible: !this.hidden,
  507 + zIndex: this.zIndex
  508 + };
  509 +
  510 + if (this.closed) {
  511 + options.fillColor = this.fillColor;
  512 + options.fillOpacity = this.fillOpacity;
  513 + this._setPoly(new google.maps.Polygon(options));
  514 + } else {
  515 + options.icons = this.icons;
  516 + this._setPoly(new google.maps.Polyline(options));
  517 + }
  518 +
  519 + this._listeners = {};
  520 + },
  521 +
  522 + _forwardEvent: function(name) {
  523 + this._listeners[name] = google.maps.event.addListener(this.poly, name, function(event) {
  524 + this.fire('google-map-poly-' + name, event);
  525 + }.bind(this));
  526 + },
  527 +
  528 + _startEditing: function(index) {
  529 + if (this._building) {
  530 + // Ignore changes while building path.
  531 + return;
  532 + }
  533 +
  534 + // Signal start of editing when first vertex inserted, end when map clicked.
  535 + if (!this.editing) {
  536 + this._setEditing(true);
  537 + // The poly path and google-map-point elements lose sync once the user starts adding points,
  538 + // so invalidate the _points array.
  539 + this._points = null;
  540 + google.maps.event.addListenerOnce(this.map, 'click', function() {
  541 + this._setEditing(false);
  542 + this.fire('google-map-poly-path-updated', this.path);
  543 + }.bind(this));
  544 + }
  545 + },
  546 +
  547 + _updatePoint: function(index, vertex) {
  548 + // Ignore changes if path is out of sync with google-map-point elements.
  549 + if (!this._points) {
  550 + return;
  551 + }
  552 +
  553 + // Update existing point so bound properties are updated. too.
  554 + this._points[index].latitude = vertex.lat();
  555 + this._points[index].longitude = vertex.lng();
  556 + }
  557 + });
  558 +</script>
... ...
bower_components/google-map/google-map-search.html 100755 → 100644
... ... @@ -11,8 +11,8 @@ information on the API.
11 11 #### Example:
12 12  
13 13 <template is="dom-bind">
14   - <google-map-search map="[[map]]" libraries="places" query="Pizza"
15   - results="{{results}}"></google-map-search>
  14 + <google-map-search map="[[map]]" query="Pizza" results="{{results}}">
  15 + </google-map-search>
16 16 <google-map map="{{map}}" latitude="37.779"
17 17 longitude="-122.3892">
18 18 <template is="dom-repeat" items="{{results}}" as="marker">
... ... @@ -132,17 +132,14 @@ information on the API.
132 132 * Fired when the details of a place are returned.
133 133 *
134 134 * @event google-map-search-place-detail
135   - * @param {google.maps.MarkerPlace} detail The place details.
  135 + * @param {google.maps.MarkerPlace} detail The place details.
136 136 */
137 137  
138 138 /**
139 139 * Fired when the search element returns a result.
140 140 *
141 141 * @event google-map-search-results
142   - * @param {Array} detail An array of search results
143   - * @param {number} detail.latitude Latitude of the result.
144   - * @param {number} detail.longitude Longitude of the result.
145   - * @param {bool} detail.show Whether to show the result on the map.
  142 + * @param {Array<{latitude: number, longitude: number}>} detail An array of search results
146 143 */
147 144  
148 145 /**
... ...
bower_components/google-map/google-map.html 100755 → 100644
... ... @@ -3,6 +3,7 @@
3 3 <link rel="import" href="../polymer/polymer.html">
4 4 <link rel="import" href="../google-apis/google-maps-api.html">
5 5 <link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html">
  6 +<link rel="import" href="../iron-selector/iron-selector.html">
6 7 <link rel="import" href="google-map-marker.html">
7 8 <!--
8 9 The `google-map` element renders a Google Map.
... ... @@ -38,7 +39,7 @@ The `google-map` element renders a Google Map.
38 39  
39 40 <b>Example</b> - with Google directions, using data-binding inside another Polymer element
40 41  
41   - <google-map map="{{map}}" libraries="places"></google-map>
  42 + <google-map map="{{map}}"></google-map>
42 43 <google-map-directions map="{{map}}"
43 44 start-address="San Francisco" end-address="Mountain View">
44 45 </google-map-directions>
... ... @@ -69,15 +70,16 @@ The `google-map` element renders a Google Map.
69 70 api-key="[[apiKey]]"
70 71 client-id="[[clientId]]"
71 72 version="[[version]]"
72   - libraries="[[libraries]]"
73 73 signed-in="[[signedIn]]"
74 74 language="[[language]]"
75 75 on-api-load="_mapApiLoaded"></google-maps-api>
76 76  
77 77 <div id="map"></div>
78 78  
79   - <content id="markers" select="google-map-marker"></content>
80   -
  79 + <iron-selector id="selector" multi="[[!singleInfoWindow]]" selected-attribute="open" activate-event="google-map-marker-open" on-google-map-marker-close="_deselectMarker">
  80 + <content id="markers" select="google-map-marker"></content>
  81 + </iron-selector>
  82 + <content id="objects" select="*"></content>
81 83 </template>
82 84 </dom-module>
83 85  
... ... @@ -170,16 +172,6 @@ The `google-map` element renders a Google Map.
170 172 },
171 173  
172 174 /**
173   - * A comma separated list (e.g. "places,geometry") of libraries to load
174   - * with this map. Defaults to "". For more information see
175   - * https://developers.google.com/maps/documentation/javascript/libraries.
176   - */
177   - libraries: {
178   - type: String,
179   - value: ''
180   - },
181   -
182   - /**
183 175 * A longitude to center the map on.
184 176 */
185 177 longitude: {
... ... @@ -351,8 +343,24 @@ The `google-map` element renders a Google Map.
351 343 type: Array,
352 344 value: function() { return []; },
353 345 readOnly: true
354   - }
  346 + },
  347 +
  348 + /**
  349 + * The non-marker objects on the map.
  350 + */
  351 + objects: {
  352 + type: Array,
  353 + value: function() { return []; },
  354 + readOnly: true
  355 + },
355 356  
  357 + /**
  358 + * If set, all other info windows on markers are closed when opening a new one.
  359 + */
  360 + singleInfoWindow: {
  361 + type: Boolean,
  362 + value: false
  363 + }
356 364 },
357 365  
358 366 behaviors: [
... ... @@ -376,6 +384,10 @@ The `google-map` element renders a Google Map.
376 384 this._mutationObserver.disconnect();
377 385 this._mutationObserver = null;
378 386 }
  387 + if (this._objectsMutationObserver) {
  388 + this._objectsMutationObserver.disconnect();
  389 + this._objectsMutationObserver = null;
  390 + }
379 391 },
380 392  
381 393 _initGMap: function() {
... ... @@ -394,6 +406,7 @@ The `google-map` element renders a Google Map.
394 406 this._updateCenter();
395 407 this._loadKml();
396 408 this._updateMarkers();
  409 + this._updateObjects();
397 410 this._addMapListeners();
398 411 this.fire('google-map-ready');
399 412 },
... ... @@ -426,14 +439,22 @@ The `google-map` element renders a Google Map.
426 439 return mapOptions;
427 440 },
428 441  
429   - // watch for future updates
  442 + _attachChildrenToMap: function(children) {
  443 + if (this.map) {
  444 + for (var i = 0, child; child = children[i]; ++i) {
  445 + child.map = this.map;
  446 + }
  447 + }
  448 + },
  449 +
  450 + // watch for future updates to marker objects
430 451 _observeMarkers: function() {
431 452 // Watch for future updates.
432 453 if (this._mutationObserver) {
433 454 return;
434 455 }
435   - this._mutationObserver = new MutationObserver( this._updateMarkers.bind(this));
436   - this._mutationObserver.observe(this, {
  456 + this._mutationObserver = new MutationObserver(this._updateMarkers.bind(this));
  457 + this._mutationObserver.observe(this.$.selector, {
437 458 childList: true
438 459 });
439 460 },
... ... @@ -461,16 +482,44 @@ The `google-map` element renders a Google Map.
461 482 this.markers = this._setMarkers(newMarkers);
462 483  
463 484 // Set the map on each marker and zoom viewport to ensure they're in view.
464   - if (this.markers.length && this.map) {
465   - for (var i = 0, m; m = this.markers[i]; ++i) {
466   - m.map = this.map;
467   - }
468   - }
  485 + this._attachChildrenToMap(this.markers);
469 486 if (this.fitToMarkers) {
470 487 this._fitToMarkersChanged();
471 488 }
472 489 },
473 490  
  491 + // watch for future updates to non-marker objects
  492 + _observeObjects: function() {
  493 + if (this._objectsMutationObserver) {
  494 + return;
  495 + }
  496 + this._objectsMutationObserver = new MutationObserver(this._updateObjects.bind(this));
  497 + this._objectsMutationObserver.observe(this, {
  498 + childList: true
  499 + });
  500 + },
  501 +
  502 + _updateObjects: function() {
  503 + var newObjects = Array.prototype.slice.call(
  504 + Polymer.dom(this.$.objects).getDistributedNodes());
  505 +
  506 + // Do not recompute if objects have not been added or removed.
  507 + if (newObjects.length === this.objects.length) {
  508 + var added = newObjects.filter(function(o) {
  509 + return this.objects.indexOf(o) === -1;
  510 + }.bind(this));
  511 + if (added.length === 0) {
  512 + // Set up observer first time around.
  513 + this._observeObjects();
  514 + return;
  515 + }
  516 + }
  517 +
  518 + this._observeObjects();
  519 + this._setObjects(newObjects);
  520 + this._attachChildrenToMap(this.objects);
  521 + },
  522 +
474 523 /**
475 524 * Clears all markers from the map.
476 525 *
... ... @@ -647,7 +696,7 @@ The `google-map` element renders a Google Map.
647 696 _fitToMarkersChanged: function() {
648 697 // TODO(ericbidelman): respect user's zoom level.
649 698  
650   - if (this.map && this.fitToMarkers) {
  699 + if (this.map && this.fitToMarkers && this.markers.length > 0) {
651 700 var latLngBounds = new google.maps.LatLngBounds();
652 701 for (var i = 0, m; m = this.markers[i]; ++i) {
653 702 latLngBounds.extend(
... ... @@ -673,7 +722,7 @@ The `google-map` element renders a Google Map.
673 722 google.maps.event.addListener(this.map, 'zoom_changed', function() {
674 723 this.zoom = this.map.getZoom();
675 724 }.bind(this));
676   -
  725 +
677 726 google.maps.event.addListener(this.map, 'maptypeid_changed', function() {
678 727 this.mapType = this.map.getMapTypeId();
679 728 }.bind(this));
... ... @@ -694,7 +743,19 @@ The `google-map` element renders a Google Map.
694 743 this._listeners[name] = google.maps.event.addListener(this.map, name, function(event) {
695 744 this.fire('google-map-' + name, event);
696 745 }.bind(this));
697   - }
  746 + },
  747 +
  748 + _deselectMarker: function(e, detail) {
  749 + // If singleInfoWindow is set, update iron-selector's selected attribute to be null.
  750 + // Else remove the marker from iron-selector's selected array.
  751 + var markerIndex = this.$.selector.indexOf(e.target);
  752 +
  753 + if (this.singleInfoWindow) {
  754 + this.$.selector.selected = null;
  755 + } else if (this.$.selector.selectedValues) {
  756 + this.$.selector.selectedValues = this.$.selector.selectedValues.filter(function(i) {return i !== markerIndex});
  757 + }
  758 + }
698 759  
699 760 });
700 761  
... ...
bower_components/google-map/index.html 100755 → 100644
bower_components/google-map/metadata.html 100755 → 100644
bower_components/hydrolysis/.bower.json 100755 → 100644
... ... @@ -19,13 +19,13 @@
19 19 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
20 20 "web-component-tester": "*"
21 21 },
22   - "version": "1.19.1",
  22 + "version": "1.19.3",
23 23 "homepage": "https://github.com/Polymer/hydrolysis",
24   - "_release": "1.19.1",
  24 + "_release": "1.19.3",
25 25 "_resolution": {
26 26 "type": "version",
27   - "tag": "v1.19.1",
28   - "commit": "e0121d748fdf5ae3f0a36252f1659f9d0ccecb68"
  27 + "tag": "v1.19.3",
  28 + "commit": "a91f380f3418d2c6aa36c559c33b45ded13413cd"
29 29 },
30 30 "_source": "git://github.com/Polymer/hydrolysis.git",
31 31 "_target": "^1.11",
... ...
bower_components/hydrolysis/.editorconfig 100755 → 100644
bower_components/hydrolysis/.gitattributes 100755 → 100644
bower_components/hydrolysis/.travis.yml 0 → 100644
  1 +language: node_js
  2 +node_js:
  3 + - "0.10"
  4 + - "0.12"
  5 + - "4"
  6 +sudo: false
  7 +before_script:
  8 + - npm install -g mocha
  9 + - npm install -g jshint
  10 +script:
  11 + - jshint index.js lib/
  12 + - mocha test/test.js
... ...
bower_components/hydrolysis/API.md 100755 → 100644
bower_components/hydrolysis/LICENSE 100755 → 100644
bower_components/hydrolysis/README.md 100755 → 100644
  1 +[![NPM version](http://img.shields.io/npm/v/hydrolysis.svg)](https://npmjs.org/package/hydrolysis)
  2 +[![Build Status](https://travis-ci.org/Polymer/hydrolysis.svg?branch=master)](https://travis-ci.org/Polymer/hydrolysis)
1 3 # hydrolysis
2 4  
3 5 Static analysis utilities for polymer.
... ...
bower_components/hydrolysis/bower.json 100755 → 100644
... ... @@ -19,5 +19,5 @@
19 19 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
20 20 "web-component-tester": "*"
21 21 },
22   - "version": "1.19.1"
  22 + "version": "1.19.3"
23 23 }
... ...
bower_components/hydrolysis/hydrolysis-analyzer.html 100755 → 100644
bower_components/hydrolysis/hydrolysis.html 100755 → 100644
bower_components/hydrolysis/hydrolysis.js 100755 → 100644
... ... @@ -165,7 +165,7 @@ var Analyzer = function Analyzer(attachAST,
165 165 */
166 166 this.parsedScripts = {};
167 167  
168   -
  168 +
169 169  
170 170 /**
171 171 * A map, keyed by path, of document content.
... ... @@ -366,7 +366,7 @@ Analyzer.prototype._processScript = function _processScript(script, href) {
366 366 line += err.lineNumber;
367 367 col += err.column;
368 368 var message = "Error parsing script in " + href + " at " + line + ":" + col;
369   - message += "\n" + err.description;
  369 + message += "\n" + err.stack;
370 370 return Promise.reject(new Error(message));
371 371 }
372 372 if (parsedJs.elements) {
... ... @@ -733,7 +733,7 @@ Analyzer.prototype.clean = function clean() {
733 733 module.exports = Analyzer;
734 734  
735 735 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
736   -//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hbmFseXplci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG4vLyBqc2hpbnQgLVcwNzlcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2UgfHwgcmVxdWlyZSgnZXM2LXByb21pc2UnKS5Qcm9taXNlO1xuLy8ganNoaW50ICtXMDc5XG5cbnZhciBkb201ID0gcmVxdWlyZSgnZG9tNScpO1xudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpO1xuXG52YXIgZG9jcyA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2RvY3MnKTtcbnZhciBGaWxlTG9hZGVyID0gcmVxdWlyZSgnLi9sb2FkZXIvZmlsZS1sb2FkZXInKTtcbnZhciBpbXBvcnRQYXJzZSA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2ltcG9ydC1wYXJzZScpO1xudmFyIGpzUGFyc2UgPSByZXF1aXJlKCcuL2FzdC11dGlscy9qcy1wYXJzZScpO1xudmFyIE5vb3BSZXNvbHZlciA9IHJlcXVpcmUoJy4vbG9hZGVyL25vb3AtcmVzb2x2ZXInKTtcblxuZnVuY3Rpb24gcmVkdWNlTWV0YWRhdGEobTEsIG0yKSB7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6ICBtMS5lbGVtZW50cy5jb25jYXQobTIuZWxlbWVudHMpLFxuICAgIGZlYXR1cmVzOiAgbTEuZmVhdHVyZXMuY29uY2F0KG0yLmZlYXR1cmVzKSxcbiAgICBiZWhhdmlvcnM6IG0xLmJlaGF2aW9ycy5jb25jYXQobTIuYmVoYXZpb3JzKSxcbiAgfTtcbn1cblxudmFyIEVNUFRZX01FVEFEQVRBID0ge2VsZW1lbnRzOiBbXSwgZmVhdHVyZXM6IFtdLCBiZWhhdmlvcnM6IFtdfTtcblxuLyoqXG4gKiBQYXJzZTUncyByZXByZXNlbnRhdGlvbiBvZiBhIHBhcnNlZCBodG1sIGRvY3VtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb2N1bWVudEFTVFxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIGVzcHJlZSdzIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyc2VkIGh0bWwgZG9jdW1lbnRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEpTQVNUXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogUGFja2FnZSBvZiBhIHBhcnNlZCBKUyBzY3JpcHRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlZEpTXG4gKiBAcHJvcGVydHkge0pTQVNUfSBhc3QgVGhlIHNjcmlwdCdzIEFTVFxuICogQHByb3BlcnR5IHtEb2N1bWVudEFTVH0gc2NyaXB0RWxlbWVudCBJZiBpbmxpbmUsIHRoZSBzY3JpcHQncyBjb250YWluaW5nIHRhZy5cbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgc2luZ2xlIHBvbHltZXIgZWxlbWVudFxuICogQHR5cGVkZWYge09iamVjdH0gRWxlbWVudERlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgUG9seW1lciBmZWF0dXJlLlxuICogQHR5cGVkZWYge09iamVjdH0gRmVhdHVyZURlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgUG9seW1lciBiZWhhdmlvciBtaXhpbi5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEJlaGF2aW9yRGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYWxsIGZlYXR1cmVzIGFuZCBlbGVtZW50cyBkZWZpbmVkIGluIG9uZSBkb2N1bWVudFxuICogQHR5cGVkZWYge09iamVjdH0gRG9jdW1lbnREZXNjcmlwdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtBcnJheTxFbGVtZW50RGVzY3JpcHRvcj59IGVsZW1lbnRzIFRoZSBlbGVtZW50cyBmcm9tIHRoZSBkb2N1bWVudFxuICogQHByb3BlcnR5IHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59ICBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgZnJvbSB0aGUgZG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fSAgYmVoYXZpb3JzIFRoZSBiZWhhdmlvcnMgZnJvbSB0aGUgZG9jdW1lbnRcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBvZiBhbiBlbnRpcmUgSFRNTCBkb2N1bWVudCwgaW4gcHJvbWlzZXMuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBbmFseXplZERvY3VtZW50XG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGhyZWYgVGhlIHVybCBvZiB0aGUgZG9jdW1lbnQuXG4gKiBAcHJvcGVydHkge1Byb21pc2U8UGFyc2VkSW1wb3J0Pn0gIGh0bWxMb2FkZWQgVGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiBvZlxuICogICAgIHRoZSBkb2MuIFVzZSB0aGUgYGFzdGAgcHJvcGVydHkgdG8gZ2V0IHRoZSBmdWxsIGBwYXJzZTVgIGFzdFxuICpcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxBcnJheTxzdHJpbmc+Pn0gZGVwc0xvYWRlZCBSZXNvbHZlcyB0byB0aGUgbGlzdCBvZiB0aGlzXG4gKiAgICAgRG9jdW1lbnQncyB0cmFuc2l0aXZlIGltcG9ydCBkZXBlbmRlbmNpZXNcbiAqXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IGRlcEhyZWZzIFRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzIG9mIHRoZSBkb2N1bWVudC5cbiAqXG4gKiBAcHJvcGVydHkge1Byb21pc2U8RG9jdW1lbnREZXNjcmlwdG9yPn0gbWV0YWRhdGFMb2FkZWQgUmVzb2x2ZXMgdG8gdGhlIGxpc3Qgb2ZcbiAqICAgICB0aGlzIERvY3VtZW50J3MgaW1wb3J0IGRlcGVuZGVuY2llc1xuICovXG5cbi8qKlxuICogQSBkYXRhYmFzZSBvZiBQb2x5bWVyIG1ldGFkYXRhIGRlZmluZWQgaW4gSFRNTFxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQG1lbWJlck9mIGh5ZHJvbHlzaXNcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGF0dGFjaEFTVCAgSWYgdHJ1ZSwgYXR0YWNoIGEgcGFyc2U1IGNvbXBsaWFudCBBU1RcbiAqIEBwYXJhbSAge0ZpbGVMb2FkZXI9fSBsb2FkZXIgQW4gb3B0aW9uYWwgYEZpbGVMb2FkZXJgIHVzZWQgdG8gbG9hZCBleHRlcm5hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNcbiAqL1xudmFyIEFuYWx5emVyID0gZnVuY3Rpb24gQW5hbHl6ZXIoYXR0YWNoQVNULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyKSB7XG4gIHRoaXMubG9hZGVyID0gbG9hZGVyO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIHRoZSBgQW5hbHl6ZXJgIGhhcyBtZXRhZGF0YSBmb3IuXG4gICAqIEBtZW1iZXIge0FycmF5LjxFbGVtZW50RGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmVsZW1lbnRzID0gW107XG5cbiAgLyoqXG4gICAqIEEgdmlldyBpbnRvIGBlbGVtZW50c2AsIGtleWVkIGJ5IHRhZyBuYW1lLlxuICAgKiBAbWVtYmVyIHtPYmplY3QuPHN0cmluZyxFbGVtZW50RGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lID0ge307XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBBUEkgZmVhdHVyZXMgYWRkZWQgdG8gYFBvbHltZXIuQmFzZWAgZW5jb3VudGVyZWQgYnkgdGhlXG4gICAqIGFuYWx5emVyLlxuICAgKiBAbWVtYmVyIHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmZlYXR1cmVzID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBiZWhhdmlvcnMgY29sbGVjdGVkIGJ5IHRoZSBhbmFseXNpcyBwYXNzLlxuICAgKlxuICAgKiBAbWVtYmVyIHtBcnJheTxCZWhhdmlvckRlc2NyaXB0b3I+fVxuICAgKi9cbiAgdGhpcy5iZWhhdmlvcnMgPSBbXTtcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9ycyBjb2xsZWN0ZWQgYnkgdGhlIGFuYWx5c2lzIHBhc3MgYnkgbmFtZS5cbiAgICpcbiAgICogQG1lbWJlciB7T2JqZWN0PHN0cmluZyxCZWhhdmlvckRlc2NyaXB0b3I+fVxuICAgKi9cbiAgdGhpcy5iZWhhdmlvcnNCeU5hbWUgPSB7fTtcblxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IGFic29sdXRlIHBhdGgsIG9mIERvY3VtZW50IG1ldGFkYXRhLlxuICAgKiBAbWVtYmVyIHtPYmplY3Q8c3RyaW5nLEFuYWx5emVkRG9jdW1lbnQ+fVxuICAgKi9cbiAgdGhpcy5odG1sID0ge307XG5cbiAgLyoqXG4gICAqIEEgbWFwLCBrZXllZCBieSBwYXRoLCBvZiBIVE1MIGRvY3VtZW50IEFTVHMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLnBhcnNlZERvY3VtZW50cyA9IHt9O1xuXG4gIC8qKlxuICAgKiBBIG1hcCwga2V5ZWQgYnkgcGF0aCwgb2YgSlMgc2NyaXB0IEFTVHMuXG4gICAqXG4gICAqIElmIHRoZSBwYXRoIGlzIGFuIEhUTUwgZmlsZSB3aXRoIG11bHRpcGxlIHNjcmlwdHMsIHRoZSBlbnRyeSB3aWxsIGJlIGFuIGFycmF5IG9mIHNjcmlwdHMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLEFycmF5PFBhcnNlZEpTPj59XG4gICAqL1xuICB0aGlzLnBhcnNlZFNjcmlwdHMgPSB7fTtcblxuICBcblxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IHBhdGgsIG9mIGRvY3VtZW50IGNvbnRlbnQuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLl9jb250ZW50ID0ge307XG59O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBBbmFseXplci5hbmFsenllYFxuICogQHR5cGVkZWYge09iamVjdH0gTG9hZE9wdGlvbnNcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vQW5ub3RhdGlvbnMgV2hldGhlciBgYW5ub3RhdGUoKWAgc2hvdWxkIGJlIHNraXBwZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNsZWFuIFdoZXRoZXIgdGhlIGdlbmVyYXRlZCBkZXNjcmlwdG9ycyBzaG91bGQgYmUgY2xlYW5lZFxuICogICAgIG9mIHJlZHVuZGFudCBkYXRhLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbihzdHJpbmcpOiBib29sZWFufSBmaWx0ZXIgQSBwcmVkaWNhdGUgZnVuY3Rpb24gdGhhdFxuICogICAgIGluZGljYXRlcyB3aGljaCBmaWxlcyBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgbG9hZGVyLiBCeSBkZWZhdWx0IGFsbFxuICogICAgIGZpbGVzIG5vdCBsb2NhdGVkIHVuZGVyIHRoZSBkaXJuYW1lIG9mIGBocmVmYCB3aWxsIGJlIGlnbm9yZWQuXG4gKi9cblxuLyoqXG4gKiBTaG9ydGhhbmQgZm9yIHRyYW5zaXRpdmVseSBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nIGFsbCBpbXBvcnRzIGJlZ2lubmluZyBhdFxuICogYGhyZWZgLlxuICpcbiAqIEluIG9yZGVyIHRvIHByb3Blcmx5IGZpbHRlciBwYXRocywgYGhyZWZgIF9tdXN0XyBiZSBhbiBhYnNvbHV0ZSBVUkkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgVGhlIHJvb3QgaW1wb3J0IHRvIGJlZ2luIGxvYWRpbmcgZnJvbS5cbiAqIEBwYXJhbSB7TG9hZE9wdGlvbnM9fSBvcHRpb25zIEFueSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHJldHVybiB7UHJvbWlzZTxBbmFseXplcj59IEEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIGBocmVmYCBhbmQgaXRzXG4gKiAgICAgZGVwZW5kZW5jaWVzIGhhdmUgYmVlbiBsb2FkZWQgYW5kIGFuYWx5emVkLlxuICovXG5BbmFseXplci5hbmFseXplID0gZnVuY3Rpb24gYW5hbHl6ZShocmVmLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyIHx8IF9kZWZhdWx0RmlsdGVyKGhyZWYpO1xuXG4gIHZhciBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlcigpO1xuICB2YXIgUHJpbWFyeVJlc29sdmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXIvZnMtcmVzb2x2ZXInKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlci94aHItcmVzb2x2ZXInKTtcbiAgbG9hZGVyLmFkZFJlc29sdmVyKG5ldyBQcmltYXJ5UmVzb2x2ZXIob3B0aW9ucykpO1xuICBsb2FkZXIuYWRkUmVzb2x2ZXIobmV3IE5vb3BSZXNvbHZlcih7dGVzdDogb3B0aW9ucy5maWx0ZXJ9KSk7XG5cbiAgdmFyIGFuYWx5emVyID0gbmV3IHRoaXMobnVsbCwgbG9hZGVyKTtcbiAgcmV0dXJuIGFuYWx5emVyLm1ldGFkYXRhVHJlZShocmVmKS50aGVuKGZ1bmN0aW9uKHJvb3QpIHtcbiAgICBpZiAoIW9wdGlvbnMubm9Bbm5vdGF0aW9ucykge1xuICAgICAgYW5hbHl6ZXIuYW5ub3RhdGUoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2xlYW4pIHtcbiAgICAgIGFuYWx5emVyLmNsZWFuKCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYW5hbHl6ZXIpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihzdHJpbmcpOiBib29sZWFufVxuICovXG5mdW5jdGlvbiBfZGVmYXVsdEZpbHRlcihocmVmKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGxhc3QgYC9gIG9yIGBcXGAuXG4gIHZhciBiYXNlID0gaHJlZi5tYXRjaCgvXiguKj8pW15cXC9cXFxcXSokLylbMV07XG4gIHJldHVybiBmdW5jdGlvbih1cmkpIHtcbiAgICByZXR1cm4gdXJpLmluZGV4T2YoYmFzZSkgIT09IDA7XG4gIH07XG59XG5cbkFuYWx5emVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gbG9hZChocmVmKSB7XG4gIHJldHVybiB0aGlzLmxvYWRlci5yZXF1ZXN0KGhyZWYpLnRoZW4oZnVuY3Rpb24oY29udGVudCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRbaHJlZl0gPSBjb250ZW50O1xuICAgICAgICByZXNvbHZlKHRoaXMuX3BhcnNlSFRNTChjb250ZW50LCBocmVmKSk7XG4gICAgICB9LmJpbmQodGhpcyksIDApO1xuICAgIH0uYmluZCh0aGlzKSkuY2F0Y2goZnVuY3Rpb24oZXJyKXtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwcm9jZXNzaW5nIGRvY3VtZW50IGF0IFwiICsgaHJlZik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYEFuYWx5emVkRG9jdW1lbnRgIHJlcHJlc2VudGluZyB0aGUgcHJvdmlkZWQgZG9jdW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGh0bWxJbXBvcnQgUmF3IHRleHQgb2YgYW4gSFRNTCBkb2N1bWVudFxuICogQHBhcmFtICB7c3RyaW5nfSBocmVmICAgICAgIFRoZSBkb2N1bWVudCdzIFVSTC5cbiAqIEByZXR1cm4ge0FuYWx5emVkRG9jdW1lbnR9ICAgICAgIEFuICBgQW5hbHl6ZWREb2N1bWVudGBcbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLl9wYXJzZUhUTUwgPSBmdW5jdGlvbiBfcGFyc2VIVE1MKGh0bWxJbXBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYpIHtcbiAgaWYgKGhyZWYgaW4gdGhpcy5odG1sKSB7XG4gICAgcmV0dXJuIHRoaXMuaHRtbFtocmVmXTtcbiAgfVxuICB2YXIgZGVwc0xvYWRlZCA9IFtdO1xuICB2YXIgZGVwSHJlZnMgPSBbXTtcbiAgdmFyIG1ldGFkYXRhTG9hZGVkID0gUHJvbWlzZS5yZXNvbHZlKEVNUFRZX01FVEFEQVRBKTtcbiAgdmFyIHBhcnNlZDtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBpbXBvcnRQYXJzZShodG1sSW1wb3J0LCBocmVmKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyEnKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgdmFyIGh0bWxMb2FkZWQgPSBQcm9taXNlLnJlc29sdmUocGFyc2VkKTtcbiAgaWYgKHBhcnNlZC5zY3JpcHQpIHtcbiAgICBtZXRhZGF0YUxvYWRlZCA9IHRoaXMuX3Byb2Nlc3NTY3JpcHRzKHBhcnNlZC5zY3JpcHQsIGhyZWYpO1xuICB9XG4gIHZhciBjb21tZW50VGV4dCA9IHBhcnNlZC5jb21tZW50Lm1hcChmdW5jdGlvbihjb21tZW50KXtcbiAgICByZXR1cm4gZG9tNS5nZXRUZXh0Q29udGVudChjb21tZW50KTtcbiAgfSk7XG4gIHZhciBwc2V1ZG9FbGVtZW50cyA9IGRvY3MucGFyc2VQc2V1ZG9FbGVtZW50cyhjb21tZW50VGV4dCk7XG4gIHBzZXVkb0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCl7XG4gICAgZWxlbWVudC5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIHRoaXMuZWxlbWVudHNCeVRhZ05hbWVbZWxlbWVudC5pc10gPSBlbGVtZW50O1xuICB9LmJpbmQodGhpcykpO1xuICBtZXRhZGF0YUxvYWRlZCA9IG1ldGFkYXRhTG9hZGVkLnRoZW4oZnVuY3Rpb24obWV0YWRhdGEpe1xuICAgIHZhciBtZXRhZGF0YUVudHJ5ID0ge1xuICAgICAgZWxlbWVudHM6IHBzZXVkb0VsZW1lbnRzLFxuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgYmVoYXZpb3JzOiBbXVxuICAgIH07XG4gICAgcmV0dXJuIFttZXRhZGF0YSwgbWV0YWRhdGFFbnRyeV0ucmVkdWNlKHJlZHVjZU1ldGFkYXRhKTtcbiAgfSk7XG4gIGRlcHNMb2FkZWQucHVzaChtZXRhZGF0YUxvYWRlZCk7XG5cblxuICBpZiAodGhpcy5sb2FkZXIpIHtcbiAgICB2YXIgYmFzZVVyaSA9IGhyZWY7XG4gICAgaWYgKHBhcnNlZC5iYXNlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPbmx5IG9uZSBiYXNlIHRhZyBwZXIgZG9jdW1lbnQhXCIpO1xuICAgICAgdGhyb3cgXCJNdWx0aXBsZSBiYXNlIHRhZ3MgaW4gXCIgKyBocmVmO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkLmJhc2UubGVuZ3RoID09IDEpIHtcbiAgICAgIHZhciBiYXNlSHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKHBhcnNlZC5iYXNlWzBdLCBcImhyZWZcIik7XG4gICAgICBpZiAoYmFzZUhyZWYpIHtcbiAgICAgICAgYmFzZUhyZWYgPSBiYXNlSHJlZiArIFwiL1wiO1xuICAgICAgICBiYXNlVXJpID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgYmFzZUhyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZWQuaW1wb3J0LmZvckVhY2goZnVuY3Rpb24obGluaykge1xuICAgICAgdmFyIGxpbmt1cmwgPSBkb201LmdldEF0dHJpYnV0ZShsaW5rLCAnaHJlZicpO1xuICAgICAgaWYgKGxpbmt1cmwpIHtcbiAgICAgICAgdmFyIHJlc29sdmVkVXJsID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgbGlua3VybCk7XG4gICAgICAgIGRlcEhyZWZzLnB1c2gocmVzb2x2ZWRVcmwpO1xuICAgICAgICBkZXBzTG9hZGVkLnB1c2godGhpcy5fZGVwZW5kZW5jaWVzTG9hZGVkRm9yKHJlc29sdmVkVXJsLCBocmVmKSk7XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICBwYXJzZWQuc3R5bGUuZm9yRWFjaChmdW5jdGlvbihzdHlsZUVsZW1lbnQpIHtcbiAgICAgIGlmIChwb2x5bWVyRXh0ZXJuYWxTdHlsZShzdHlsZUVsZW1lbnQpKSB7XG4gICAgICAgIHZhciBzdHlsZUhyZWYgPSBkb201LmdldEF0dHJpYnV0ZShzdHlsZUVsZW1lbnQsICdocmVmJyk7XG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgc3R5bGVIcmVmID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgc3R5bGVIcmVmKTtcbiAgICAgICAgICBkZXBzTG9hZGVkLnB1c2godGhpcy5sb2FkZXIucmVxdWVzdChzdHlsZUhyZWYpLnRoZW4oZnVuY3Rpb24oY29udGVudCl7XG4gICAgICAgICAgICB0aGlzLl9jb250ZW50W3N0eWxlSHJlZl0gPSBjb250ZW50O1xuICAgICAgICAgIH0uYmluZCh0aGlzKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgfVxuICBkZXBzTG9hZGVkID0gUHJvbWlzZS5hbGwoZGVwc0xvYWRlZClcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7cmV0dXJuIGRlcEhyZWZzO30pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHt0aHJvdyBlcnI7fSk7XG4gIHRoaXMucGFyc2VkRG9jdW1lbnRzW2hyZWZdID0gcGFyc2VkLmFzdDtcbiAgdGhpcy5odG1sW2hyZWZdID0ge1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIGh0bWxMb2FkZWQ6IGh0bWxMb2FkZWQsXG4gICAgICBtZXRhZGF0YUxvYWRlZDogbWV0YWRhdGFMb2FkZWQsXG4gICAgICBkZXBIcmVmczogZGVwSHJlZnMsXG4gICAgICBkZXBzTG9hZGVkOiBkZXBzTG9hZGVkXG4gIH07XG4gIHJldHVybiB0aGlzLmh0bWxbaHJlZl07XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX3Byb2Nlc3NTY3JpcHRzID0gZnVuY3Rpb24gX3Byb2Nlc3NTY3JpcHRzKHNjcmlwdHMsIGhyZWYpIHtcbiAgdmFyIHNjcmlwdFByb21pc2VzID0gW107XG4gIHNjcmlwdHMuZm9yRWFjaChmdW5jdGlvbihzY3JpcHQpIHtcbiAgICBzY3JpcHRQcm9taXNlcy5wdXNoKHRoaXMuX3Byb2Nlc3NTY3JpcHQoc2NyaXB0LCBocmVmKSk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChzY3JpcHRQcm9taXNlcykudGhlbihmdW5jdGlvbihtZXRhZGF0YUxpc3QpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0LnJlZHVjZShyZWR1Y2VNZXRhZGF0YSwgRU1QVFlfTUVUQURBVEEpO1xuICB9KTtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fcHJvY2Vzc1NjcmlwdCA9IGZ1bmN0aW9uIF9wcm9jZXNzU2NyaXB0KHNjcmlwdCwgaHJlZikge1xuICB2YXIgc3JjID0gZG9tNS5nZXRBdHRyaWJ1dGUoc2NyaXB0LCAnc3JjJyk7XG4gIHZhciBwYXJzZWRKcztcbiAgaWYgKCFzcmMpIHtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkSnMgPSBqc1BhcnNlKChzY3JpcHQuY2hpbGROb2Rlcy5sZW5ndGgpID8gc2NyaXB0LmNoaWxkTm9kZXNbMF0udmFsdWUgOiAnJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBGaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGxpbmUgbnVtYmVyIGZvciB0aGUgZXJyb3IuXG4gICAgICB2YXIgbGluZSA9IDA7XG4gICAgICB2YXIgY29sID0gMDtcbiAgICAgIGlmIChzY3JpcHQuX19vd25lckRvY3VtZW50ICYmIHNjcmlwdC5fX293bmVyRG9jdW1lbnQgPT0gaHJlZikge1xuICAgICAgICBsaW5lID0gc2NyaXB0Ll9fbG9jYXRpb25EZXRhaWwubGluZSAtIDE7XG4gICAgICAgIGNvbCA9IHNjcmlwdC5fX2xvY2F0aW9uRGV0YWlsLmxpbmUgLSAxO1xuICAgICAgfVxuICAgICAgbGluZSArPSBlcnIubGluZU51bWJlcjtcbiAgICAgIGNvbCArPSBlcnIuY29sdW1uO1xuICAgICAgdmFyIG1lc3NhZ2UgPSBcIkVycm9yIHBhcnNpbmcgc2NyaXB0IGluIFwiICsgaHJlZiArIFwiIGF0IFwiICsgbGluZSArIFwiOlwiICsgY29sO1xuICAgICAgbWVzc2FnZSArPSBcIlxcblwiICsgZXJyLmRlc2NyaXB0aW9uO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5lbGVtZW50cykge1xuICAgICAgcGFyc2VkSnMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2NyaXB0RWxlbWVudCA9IHNjcmlwdDtcbiAgICAgICAgZWxlbWVudC5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnQuaXMgaW4gdGhpcy5lbGVtZW50c0J5VGFnTmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSWdub3JpbmcgZHVwbGljYXRlIGVsZW1lbnQgZGVmaW5pdGlvbjogJyArIGVsZW1lbnQuaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWxlbWVudHNCeVRhZ05hbWVbZWxlbWVudC5pc10gPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkSnMuZmVhdHVyZXMpIHtcbiAgICAgIHBhcnNlZEpzLmZlYXR1cmVzLmZvckVhY2goZnVuY3Rpb24oZmVhdHVyZSl7XG4gICAgICAgIGZlYXR1cmUuY29udGVudEhyZWYgPSBocmVmO1xuICAgICAgICBmZWF0dXJlLnNjcmlwdEVsZW1lbnQgPSBzY3JpcHQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmVhdHVyZXMgPSB0aGlzLmZlYXR1cmVzLmNvbmNhdChwYXJzZWRKcy5mZWF0dXJlcyk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5iZWhhdmlvcnMpIHtcbiAgICAgIHBhcnNlZEpzLmJlaGF2aW9ycy5mb3JFYWNoKGZ1bmN0aW9uKGJlaGF2aW9yKXtcbiAgICAgICAgYmVoYXZpb3IuY29udGVudEhyZWYgPSBocmVmO1xuICAgICAgICB0aGlzLmJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvci5pc10gPSBiZWhhdmlvcjtcbiAgICAgICAgdGhpcy5iZWhhdmlvcnNCeU5hbWVbYmVoYXZpb3Iuc3ltYm9sXSA9IGJlaGF2aW9yO1xuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuYmVoYXZpb3JzID0gdGhpcy5iZWhhdmlvcnMuY29uY2F0KHBhcnNlZEpzLmJlaGF2aW9ycyk7XG4gICAgfVxuICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJzZWRTY3JpcHRzLCBocmVmKSkge1xuICAgICAgdGhpcy5wYXJzZWRTY3JpcHRzW2hyZWZdID0gW107XG4gICAgfVxuICAgIHZhciBzY3JpcHRFbGVtZW50O1xuICAgIGlmIChzY3JpcHQuX19vd25lckRvY3VtZW50ICYmIHNjcmlwdC5fX293bmVyRG9jdW1lbnQgPT0gaHJlZikge1xuICAgICAgc2NyaXB0RWxlbWVudCA9IHNjcmlwdDtcbiAgICB9XG4gICAgdGhpcy5wYXJzZWRTY3JpcHRzW2hyZWZdLnB1c2goe1xuICAgICAgYXN0OiBwYXJzZWRKcy5wYXJzZWRTY3JpcHQsXG4gICAgICBzY3JpcHRFbGVtZW50OiBzY3JpcHRFbGVtZW50XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcnNlZEpzO1xuICB9XG4gIGlmICh0aGlzLmxvYWRlcikge1xuICAgIHZhciByZXNvbHZlZFNyYyA9IHVybC5yZXNvbHZlKGhyZWYsIHNyYyk7XG4gICAgcmV0dXJuIHRoaXMubG9hZGVyLnJlcXVlc3QocmVzb2x2ZWRTcmMpLnRoZW4oZnVuY3Rpb24oY29udGVudCkge1xuICAgICAgdGhpcy5fY29udGVudFtyZXNvbHZlZFNyY10gPSBjb250ZW50O1xuICAgICAgdmFyIHJlc29sdmVkU2NyaXB0ID0gT2JqZWN0LmNyZWF0ZShzY3JpcHQpO1xuICAgICAgcmVzb2x2ZWRTY3JpcHQuY2hpbGROb2RlcyA9IFt7dmFsdWU6IGNvbnRlbnR9XTtcbiAgICAgIHJlc29sdmVkU2NyaXB0LmF0dHJzID0gcmVzb2x2ZWRTY3JpcHQuYXR0cnMuc2xpY2UoKTtcbiAgICAgIGRvbTUucmVtb3ZlQXR0cmlidXRlKHJlc29sdmVkU2NyaXB0LCAnc3JjJyk7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1NjcmlwdChyZXNvbHZlZFNjcmlwdCwgcmVzb2x2ZWRTcmMpO1xuICAgIH0uYmluZCh0aGlzKSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7dGhyb3cgZXJyO30pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRU1QVFlfTUVUQURBVEEpO1xuICB9XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX2RlcGVuZGVuY2llc0xvYWRlZEZvciA9IGZ1bmN0aW9uIF9kZXBlbmRlbmNpZXNMb2FkZWRGb3IoaHJlZiwgcm9vdCkge1xuICB2YXIgZm91bmQgPSB7fTtcbiAgaWYgKHJvb3QgIT09IHVuZGVmaW5lZCkge1xuICAgIGZvdW5kW3Jvb3RdID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fZ2V0RGVwZW5kZW5jaWVzKGhyZWYsIGZvdW5kKS50aGVuKGZ1bmN0aW9uKGRlcHMpIHtcbiAgICB2YXIgZGVwTWV0YWRhdGFMb2FkZWQgPSBbXTtcbiAgICB2YXIgZGVwUHJvbWlzZXMgPSBkZXBzLm1hcChmdW5jdGlvbihkZXBIcmVmKXtcbiAgICAgIHJldHVybiB0aGlzLmxvYWQoZGVwSHJlZikudGhlbihmdW5jdGlvbihodG1sTW9ub21lcikge1xuICAgICAgICByZXR1cm4gaHRtbE1vbm9tZXIubWV0YWRhdGFMb2FkZWQ7XG4gICAgICB9KTtcbiAgICB9LmJpbmQodGhpcykpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChkZXBQcm9taXNlcyk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIExpc3QgYWxsIHRoZSBodG1sIGRlcGVuZGVuY2llcyBmb3IgdGhlIGRvY3VtZW50IGF0IGBocmVmYC5cbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgICAgICAgaHJlZiAgICAgIFRoZSBocmVmIHRvIGdldCBkZXBlbmRlbmNpZXMgZm9yLlxuICogQHBhcmFtICB7T2JqZWN0LjxzdHJpbmcsYm9vbGVhbj49fSBmb3VuZCAgICAgQW4gb2JqZWN0IGtleWVkIGJ5IFVSTCBvZiB0aGVcbiAqICAgICBhbHJlYWR5IHJlc29sdmVkIGRlcGVuZGVuY2llcy5cbiAqIEBwYXJhbSAge2Jvb2xlYW49fSAgICAgICAgICAgICAgICB0cmFuc2l0aXZlIFdoZXRoZXIgdG8gbG9hZCB0cmFuc2l0aXZlXG4gKiAgICAgZGVwZW5kZW5jaWVzLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59ICBBIGxpc3Qgb2YgYWxsIHRoZSBodG1sIGRlcGVuZGVuY2llcy5cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLl9nZXREZXBlbmRlbmNpZXMgPSBmdW5jdGlvbiBfZ2V0RGVwZW5kZW5jaWVzKGhyZWYsIGZvdW5kLCB0cmFuc2l0aXZlKSB7XG4gIGlmIChmb3VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm91bmQgPSB7fTtcbiAgICBmb3VuZFtocmVmXSA9IHRydWU7XG4gIH1cbiAgaWYgKHRyYW5zaXRpdmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRyYW5zaXRpdmUgPSB0cnVlO1xuICB9XG4gIHZhciBkZXBzID0gW107XG4gIHJldHVybiB0aGlzLmxvYWQoaHJlZikudGhlbihmdW5jdGlvbihodG1sTW9ub21lcikge1xuICAgIHZhciB0cmFuc2l0aXZlRGVwcyA9IFtdO1xuICAgIGh0bWxNb25vbWVyLmRlcEhyZWZzLmZvckVhY2goZnVuY3Rpb24oZGVwSHJlZil7XG4gICAgICBpZiAoZm91bmRbZGVwSHJlZl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVwcy5wdXNoKGRlcEhyZWYpO1xuICAgICAgZm91bmRbZGVwSHJlZl0gPSB0cnVlO1xuICAgICAgaWYgKHRyYW5zaXRpdmUpIHtcbiAgICAgICAgdHJhbnNpdGl2ZURlcHMucHVzaCh0aGlzLl9nZXREZXBlbmRlbmNpZXMoZGVwSHJlZiwgZm91bmQpKTtcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbCh0cmFuc2l0aXZlRGVwcyk7XG4gIH0uYmluZCh0aGlzKSkudGhlbihmdW5jdGlvbih0cmFuc2l0aXZlRGVwcykge1xuICAgIHZhciBhbGxkZXBzID0gdHJhbnNpdGl2ZURlcHMucmVkdWNlKGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICB9LCBbXSkuY29uY2F0KGRlcHMpO1xuICAgIHJldHVybiBhbGxkZXBzO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIG1hdGNoZXNEb2N1bWVudEZvbGRlcihkZXNjcmlwdG9yLCBocmVmKSB7XG4gIGlmICghZGVzY3JpcHRvci5jb250ZW50SHJlZikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGVzY3JpcHRvckRvYyA9IHVybC5wYXJzZShkZXNjcmlwdG9yLmNvbnRlbnRIcmVmKTtcbiAgaWYgKCFkZXNjcmlwdG9yRG9jIHx8ICFkZXNjcmlwdG9yRG9jLnBhdGhuYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBzZWFyY2hEb2MgPSB1cmwucGFyc2UoaHJlZik7XG4gIGlmICghc2VhcmNoRG9jIHx8ICFzZWFyY2hEb2MucGF0aG5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHNlYXJjaFBhdGggPSBzZWFyY2hEb2MucGF0aG5hbWU7XG4gIHZhciBsYXN0U2xhc2ggPSBzZWFyY2hQYXRoLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgaWYgKGxhc3RTbGFzaCA+IDApIHtcbiAgICBzZWFyY2hQYXRoID0gc2VhcmNoUGF0aC5zbGljZSgwLCBsYXN0U2xhc2gpO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yRG9jLnBhdGhuYW1lLmluZGV4T2Yoc2VhcmNoUGF0aCkgPT09IDA7XG59XG5cbkFuYWx5emVyLnByb3RvdHlwZS5lbGVtZW50c0ZvckZvbGRlciA9IGZ1bmN0aW9uIGVsZW1lbnRzRm9yRm9sZGVyKGhyZWYpIHtcbiAgcmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpe1xuICAgIHJldHVybiBtYXRjaGVzRG9jdW1lbnRGb2xkZXIoZWxlbWVudCwgaHJlZik7XG4gIH0pO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLmJlaGF2aW9yc0ZvckZvbGRlciA9IGZ1bmN0aW9uIGJlaGF2aW9yc0ZvckZvbGRlcihocmVmKSB7XG4gIHJldHVybiB0aGlzLmJlaGF2aW9ycy5maWx0ZXIoZnVuY3Rpb24oYmVoYXZpb3Ipe1xuICAgIHJldHVybiBtYXRjaGVzRG9jdW1lbnRGb2xkZXIoYmVoYXZpb3IsIGhyZWYpO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIFBPSk8gcmVwcmVzZW50YXRpb24gb2YgdGhlIGltcG9ydFxuICogdHJlZSwgaW4gYSBmb3JtYXQgdGhhdCBtYWludGFpbnMgdGhlIG9yZGVyaW5nIG9mIHRoZSBIVE1MIGltcG9ydHMgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIHRoZSBpbXBvcnQgdG8gZ2V0IG1ldGFkYXRhIGZvci5cbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5tZXRhZGF0YVRyZWUgPSBmdW5jdGlvbiBtZXRhZGF0YVRyZWUoaHJlZikge1xuICByZXR1cm4gdGhpcy5sb2FkKGhyZWYpLnRoZW4oZnVuY3Rpb24obW9ub21lcil7XG4gICAgdmFyIGxvYWRlZEhyZWZzID0ge307XG4gICAgbG9hZGVkSHJlZnNbaHJlZl0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVRyZWUobW9ub21lciwgbG9hZGVkSHJlZnMpO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9tZXRhZGF0YVRyZWUgPSBmdW5jdGlvbiBfbWV0YWRhdGFUcmVlKGh0bWxNb25vbWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZEhyZWZzKSB7XG4gIGlmIChsb2FkZWRIcmVmcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbG9hZGVkSHJlZnMgPSB7fTtcbiAgfVxuICByZXR1cm4gaHRtbE1vbm9tZXIubWV0YWRhdGFMb2FkZWQudGhlbihmdW5jdGlvbihtZXRhZGF0YSkge1xuICAgIG1ldGFkYXRhID0ge1xuICAgICAgZWxlbWVudHM6IG1ldGFkYXRhLmVsZW1lbnRzLFxuICAgICAgZmVhdHVyZXM6IG1ldGFkYXRhLmZlYXR1cmVzLFxuICAgICAgaHJlZjogaHRtbE1vbm9tZXIuaHJlZlxuICAgIH07XG4gICAgcmV0dXJuIGh0bWxNb25vbWVyLmRlcHNMb2FkZWQudGhlbihmdW5jdGlvbihocmVmcykge1xuICAgICAgdmFyIGRlcE1ldGFkYXRhID0gW107XG4gICAgICBocmVmcy5mb3JFYWNoKGZ1bmN0aW9uKGhyZWYpIHtcbiAgICAgICAgdmFyIG1ldGFkYXRhUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgaWYgKGRlcE1ldGFkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBtZXRhZGF0YVByb21pc2UgPSBkZXBNZXRhZGF0YVtkZXBNZXRhZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBtZXRhZGF0YVByb21pc2UgPSBtZXRhZGF0YVByb21pc2UudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIWxvYWRlZEhyZWZzW2hyZWZdKSB7XG4gICAgICAgICAgICBsb2FkZWRIcmVmc1tocmVmXSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFUcmVlKHRoaXMuaHRtbFtocmVmXSwgbG9hZGVkSHJlZnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIGRlcE1ldGFkYXRhLnB1c2gobWV0YWRhdGFQcm9taXNlKTtcbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZGVwTWV0YWRhdGEpLnRoZW4oZnVuY3Rpb24oaW1wb3J0TWV0YWRhdGEpIHtcbiAgICAgICAgbWV0YWRhdGEuaW1wb3J0cyA9IGltcG9ydE1ldGFkYXRhO1xuICAgICAgICByZXR1cm4gaHRtbE1vbm9tZXIuaHRtbExvYWRlZC50aGVuKGZ1bmN0aW9uKHBhcnNlZEh0bWwpIHtcbiAgICAgICAgICBtZXRhZGF0YS5odG1sID0gcGFyc2VkSHRtbDtcbiAgICAgICAgICBpZiAobWV0YWRhdGEuZWxlbWVudHMpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLmVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgICBhdHRhY2hEb21Nb2R1bGUocGFyc2VkSHRtbCwgZWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5mdW5jdGlvbiBtYXRjaGluZ0ltcG9ydChpbXBvcnRFbGVtZW50KSB7XG4gIHZhciBtYXRjaGVzVGFnID0gZG9tNS5wcmVkaWNhdGVzLmhhc1RhZ05hbWUoaW1wb3J0RWxlbWVudC50YWdOYW1lKTtcbiAgdmFyIG1hdGNoZXNIcmVmID0gZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgnaHJlZicsIGRvbTUuZ2V0QXR0cmlidXRlKGltcG9ydEVsZW1lbnQsICdocmVmJykpO1xuICB2YXIgbWF0Y2hlc1JlbCA9IGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3JlbCcsIGRvbTUuZ2V0QXR0cmlidXRlKGltcG9ydEVsZW1lbnQsICdyZWwnKSk7XG4gIHJldHVybiBkb201LnByZWRpY2F0ZXMuQU5EKG1hdGNoZXNUYWcsIG1hdGNoZXNIcmVmLCBtYXRjaGVzUmVsKTtcbn1cblxuLy8gVE9ETyhham8pOiBSZWZhY3RvciBvdXQgb2YgdnVsY2FuaXplIGludG8gZG9tNS5cbnZhciBwb2x5bWVyRXh0ZXJuYWxTdHlsZSA9IGRvbTUucHJlZGljYXRlcy5BTkQoXG4gIGRvbTUucHJlZGljYXRlcy5oYXNUYWdOYW1lKCdsaW5rJyksXG4gIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3JlbCcsICdpbXBvcnQnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgndHlwZScsICdjc3MnKVxuKTtcblxudmFyIGV4dGVybmFsU2NyaXB0ID0gZG9tNS5wcmVkaWNhdGVzLkFORChcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc1RhZ05hbWUoJ3NjcmlwdCcpLFxuICBkb201LnByZWRpY2F0ZXMuaGFzQXR0cignc3JjJylcbik7XG5cbnZhciBpc0h0bWxJbXBvcnROb2RlID0gZG9tNS5wcmVkaWNhdGVzLkFORChcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc1RhZ05hbWUoJ2xpbmsnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgncmVsJywgJ2ltcG9ydCcpLFxuICBkb201LnByZWRpY2F0ZXMuTk9UKFxuICAgIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3R5cGUnLCAnY3NzJylcbiAgKVxuKTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9pbmxpbmVTdHlsZXMgPSBmdW5jdGlvbiBfaW5saW5lU3R5bGVzKGFzdCwgaHJlZikge1xuICB2YXIgY3NzTGlua3MgPSBkb201LnF1ZXJ5QWxsKGFzdCwgcG9seW1lckV4dGVybmFsU3R5bGUpO1xuICBjc3NMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmspIHtcbiAgICB2YXIgbGlua0hyZWYgPSBkb201LmdldEF0dHJpYnV0ZShsaW5rLCAnaHJlZicpO1xuICAgIHZhciB1cmkgPSB1cmwucmVzb2x2ZShocmVmLCBsaW5rSHJlZik7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9jb250ZW50W3VyaV07XG4gICAgdmFyIHN0eWxlID0gZG9tNS5jb25zdHJ1Y3RvcnMuZWxlbWVudCgnc3R5bGUnKTtcbiAgICBkb201LnNldFRleHRDb250ZW50KHN0eWxlLCAnXFxuJyArIGNvbnRlbnQgKyAnXFxuJyk7XG4gICAgZG9tNS5yZXBsYWNlKGxpbmssIHN0eWxlKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgcmV0dXJuIGNzc0xpbmtzLmxlbmd0aCA+IDA7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX2lubGluZVNjcmlwdHMgPSBmdW5jdGlvbiBfaW5saW5lU2NyaXB0cyhhc3QsIGhyZWYpIHtcbiAgdmFyIHNjcmlwdHMgPSBkb201LnF1ZXJ5QWxsKGFzdCwgZXh0ZXJuYWxTY3JpcHQpO1xuICBzY3JpcHRzLmZvckVhY2goZnVuY3Rpb24oc2NyaXB0KSB7XG4gICAgdmFyIHNjcmlwdEhyZWYgPSBkb201LmdldEF0dHJpYnV0ZShzY3JpcHQsICdzcmMnKTtcbiAgICB2YXIgdXJpID0gdXJsLnJlc29sdmUoaHJlZiwgc2NyaXB0SHJlZik7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9jb250ZW50W3VyaV07XG4gICAgdmFyIGlubGluZWQgPSBkb201LmNvbnN0cnVjdG9ycy5lbGVtZW50KCdzY3JpcHQnKTtcbiAgICBkb201LnNldFRleHRDb250ZW50KGlubGluZWQsICdcXG4nICsgY29udGVudCArICdcXG4nKTtcbiAgICBkb201LnJlcGxhY2Uoc2NyaXB0LCBpbmxpbmVkKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgcmV0dXJuIHNjcmlwdHMubGVuZ3RoID4gMDtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5faW5saW5lSW1wb3J0cyA9IGZ1bmN0aW9uIF9pbmxpbmVJbXBvcnRzKGFzdCwgaHJlZiwgbG9hZGVkKSB7XG4gIHZhciBpbXBvcnRzID0gZG9tNS5xdWVyeUFsbChhc3QsIGlzSHRtbEltcG9ydE5vZGUpO1xuICBpbXBvcnRzLmZvckVhY2goZnVuY3Rpb24oaHRtbEltcG9ydCkge1xuICAgIHZhciBpbXBvcnRIcmVmID0gZG9tNS5nZXRBdHRyaWJ1dGUoaHRtbEltcG9ydCwgJ2hyZWYnKTtcbiAgICB2YXIgdXJpID0gdXJsLnJlc29sdmUoaHJlZiwgaW1wb3J0SHJlZik7XG4gICAgaWYgKGxvYWRlZFt1cmldKSB7XG4gICAgICBkb201LnJlbW92ZShodG1sSW1wb3J0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLmdldExvYWRlZEFzdCh1cmksIGxvYWRlZCk7XG4gICAgZG9tNS5yZXBsYWNlKGh0bWxJbXBvcnQsIGNvbnRlbnQpO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gaW1wb3J0cy5sZW5ndGggPiAwO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gYSBmb3JtIG9mIHRoZSBBU1Qgd2l0aCBhbGwgbGlua3MgcmVwbGFjZWRcbiAqIHdpdGggdGhlIGRvY3VtZW50IHRoZXkgbGluayB0by4gLmNzcyBhbmQgLnNjcmlwdCBmaWxlcyBiZWNvbWUgJmx0O3N0eWxlJmd0OyBhbmRcbiAqICZsdDtzY3JpcHQmZ3Q7LCByZXNwZWN0aXZlbHkuXG4gKlxuICogVGhlIGVsZW1lbnRzIGluIHRoZSBsb2FkZWQgZG9jdW1lbnQgYXJlIHVubW9kaWZpZWQgZnJvbSB0aGVpciBvcmlnaW5hbFxuICogZG9jdW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIFRoZSBkb2N1bWVudCB0byBsb2FkLlxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZyxib29sZWFuPj19IGxvYWRlZCBBbiBvYmplY3Qga2V5ZWQgYnkgYWxyZWFkeSBsb2FkZWQgZG9jdW1lbnRzLlxuICogQHJldHVybiB7UHJvbWlzZS48RG9jdW1lbnRBU1Q+fVxuICovXG5BbmFseXplci5wcm90b3R5cGUuZ2V0TG9hZGVkQXN0ID0gZnVuY3Rpb24gZ2V0TG9hZGVkQXN0KGhyZWYsIGxvYWRlZCkge1xuICBpZiAoIWxvYWRlZCkge1xuICAgIGxvYWRlZCA9IHt9O1xuICB9XG4gIGxvYWRlZFtocmVmXSA9IHRydWU7XG4gIHZhciBwYXJzZWREb2N1bWVudCA9IHRoaXMucGFyc2VkRG9jdW1lbnRzW2hyZWZdO1xuICB2YXIgYW5hbHl6ZWREb2N1bWVudCA9IHRoaXMuaHRtbFtocmVmXTtcbiAgdmFyIGFzdENvcHkgPSBkb201LnBhcnNlKGRvbTUuc2VyaWFsaXplKHBhcnNlZERvY3VtZW50KSk7XG4gIC8vIFdoZW5ldmVyIHdlIGlubGluZSBzb21ldGhpbmcsIHJlc2V0IGlubGluZWQgdG8gdHJ1ZSB0byBrbm93IHRoYXQgYW5vYXRoZXJcbiAgLy8gaW5saW5pbmcgcGFzcyBpcyBuZWVkZWQ7XG4gIHRoaXMuX2lubGluZVN0eWxlcyhhc3RDb3B5LCBocmVmKTtcbiAgdGhpcy5faW5saW5lU2NyaXB0cyhhc3RDb3B5LCBocmVmKTtcbiAgdGhpcy5faW5saW5lSW1wb3J0cyhhc3RDb3B5LCBocmVmLCBsb2FkZWQpO1xuICByZXR1cm4gYXN0Q29weTtcbn07XG5cbi8qKlxuICogQ2FsbHMgYGRvbTUubm9kZVdhbGtBbGxgIG9uIGVhY2ggZG9jdW1lbnQgdGhhdCBgQW5heXpsZXJgIGhhcyBsYW9kZWQuXG4gKiBAcGFyYW0gIHtPYmplY3R9IHByZWRpY2F0ZSBBIGRvbTUgcHJlZGljYXRlLlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5BbmFseXplci5wcm90b3R5cGUubm9kZVdhbGtEb2N1bWVudHMgPSBmdW5jdGlvbiBub2RlV2Fsa0RvY3VtZW50cyhwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIgaHJlZiBpbiB0aGlzLnBhcnNlZERvY3VtZW50cykge1xuICAgIHZhciBtYXRjaCA9IGRvbTUubm9kZVdhbGsodGhpcy5wYXJzZWREb2N1bWVudHNbaHJlZl0sIHByZWRpY2F0ZSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBDYWxscyBgZG9tNS5ub2RlV2Fsa0FsbGAgb24gZWFjaCBkb2N1bWVudCB0aGF0IGBBbmF5emxlcmAgaGFzIGxhb2RlZC5cbiAqIEBwYXJhbSAge09iamVjdH0gcHJlZGljYXRlIEEgZG9tNSBwcmVkaWNhdGUuXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5ub2RlV2Fsa0FsbERvY3VtZW50cyA9IGZ1bmN0aW9uIG5vZGVXYWxrRG9jdW1lbnRzKHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICBmb3IgKHZhciBocmVmIGluIHRoaXMucGFyc2VkRG9jdW1lbnRzKSB7XG4gICAgdmFyIG5ld05vZGVzID0gZG9tNS5ub2RlV2Fsa0FsbCh0aGlzLnBhcnNlZERvY3VtZW50c1tocmVmXSwgcHJlZGljYXRlKTtcbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQobmV3Tm9kZXMpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqIEFubm90YXRlcyBhbGwgbG9hZGVkIG1ldGFkYXRhIHdpdGggaXRzIGRvY3VtZW50YXRpb24uICovXG5BbmFseXplci5wcm90b3R5cGUuYW5ub3RhdGUgPSBmdW5jdGlvbiBhbm5vdGF0ZSgpIHtcbiAgaWYgKHRoaXMuZmVhdHVyZXMubGVuZ3RoID4gMCkge1xuICAgIHZhciBmZWF0dXJlRWwgPSBkb2NzLmZlYXR1cmVFbGVtZW50KHRoaXMuZmVhdHVyZXMpO1xuICAgIHRoaXMuZWxlbWVudHMudW5zaGlmdChmZWF0dXJlRWwpO1xuICAgIHRoaXMuZWxlbWVudHNCeVRhZ05hbWVbZmVhdHVyZUVsLmlzXSA9IGZlYXR1cmVFbDtcbiAgfVxuICB2YXIgYmVoYXZpb3JzQnlOYW1lID0gdGhpcy5iZWhhdmlvcnNCeU5hbWU7XG4gIHZhciBlbGVtZW50SGVscGVyID0gZnVuY3Rpb24oZGVzY3JpcHRvcil7XG4gICAgZG9jcy5hbm5vdGF0ZUVsZW1lbnQoZGVzY3JpcHRvciwgYmVoYXZpb3JzQnlOYW1lKTtcbiAgfTtcbiAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGVsZW1lbnRIZWxwZXIpO1xuICB0aGlzLmJlaGF2aW9ycy5mb3JFYWNoKGVsZW1lbnRIZWxwZXIpOyAvLyBTYW1lIHNoYXBlLlxuICB0aGlzLmJlaGF2aW9ycy5mb3JFYWNoKGZ1bmN0aW9uKGJlaGF2aW9yKXtcbiAgICBpZiAoYmVoYXZpb3IuaXMgIT09IGJlaGF2aW9yLnN5bWJvbCAmJiBiZWhhdmlvci5zeW1ib2wpIHtcbiAgICAgIHRoaXMuYmVoYXZpb3JzQnlOYW1lW2JlaGF2aW9yLnN5bWJvbF0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xufTtcblxuZnVuY3Rpb24gYXR0YWNoRG9tTW9kdWxlKHBhcnNlZEltcG9ydCwgZWxlbWVudCkge1xuICB2YXIgZG9tTW9kdWxlcyA9IHBhcnNlZEltcG9ydFsnZG9tLW1vZHVsZSddO1xuICBmb3IgKHZhciBpID0gMCwgZG9tTW9kdWxlOyBpIDwgZG9tTW9kdWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGRvbU1vZHVsZSA9IGRvbU1vZHVsZXNbaV07XG4gICAgaWYgKGRvbTUuZ2V0QXR0cmlidXRlKGRvbU1vZHVsZSwgJ2lkJykgPT09IGVsZW1lbnQuaXMpIHtcbiAgICAgIGVsZW1lbnQuZG9tTW9kdWxlID0gZG9tTW9kdWxlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUmVtb3ZlcyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIHRoZSBjb2xsZWN0ZWQgZGVzY3JpcHRvcnMuICovXG5BbmFseXplci5wcm90b3R5cGUuY2xlYW4gPSBmdW5jdGlvbiBjbGVhbigpIHtcbiAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGRvY3MuY2xlYW5FbGVtZW50KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQW5hbHl6ZXI7XG4iXX0=
  736 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hbmFseXplci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG4vLyBqc2hpbnQgLVcwNzlcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2UgfHwgcmVxdWlyZSgnZXM2LXByb21pc2UnKS5Qcm9taXNlO1xuLy8ganNoaW50ICtXMDc5XG5cbnZhciBkb201ID0gcmVxdWlyZSgnZG9tNScpO1xudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpO1xuXG52YXIgZG9jcyA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2RvY3MnKTtcbnZhciBGaWxlTG9hZGVyID0gcmVxdWlyZSgnLi9sb2FkZXIvZmlsZS1sb2FkZXInKTtcbnZhciBpbXBvcnRQYXJzZSA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2ltcG9ydC1wYXJzZScpO1xudmFyIGpzUGFyc2UgPSByZXF1aXJlKCcuL2FzdC11dGlscy9qcy1wYXJzZScpO1xudmFyIE5vb3BSZXNvbHZlciA9IHJlcXVpcmUoJy4vbG9hZGVyL25vb3AtcmVzb2x2ZXInKTtcblxuZnVuY3Rpb24gcmVkdWNlTWV0YWRhdGEobTEsIG0yKSB7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6ICBtMS5lbGVtZW50cy5jb25jYXQobTIuZWxlbWVudHMpLFxuICAgIGZlYXR1cmVzOiAgbTEuZmVhdHVyZXMuY29uY2F0KG0yLmZlYXR1cmVzKSxcbiAgICBiZWhhdmlvcnM6IG0xLmJlaGF2aW9ycy5jb25jYXQobTIuYmVoYXZpb3JzKSxcbiAgfTtcbn1cblxudmFyIEVNUFRZX01FVEFEQVRBID0ge2VsZW1lbnRzOiBbXSwgZmVhdHVyZXM6IFtdLCBiZWhhdmlvcnM6IFtdfTtcblxuLyoqXG4gKiBQYXJzZTUncyByZXByZXNlbnRhdGlvbiBvZiBhIHBhcnNlZCBodG1sIGRvY3VtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb2N1bWVudEFTVFxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIGVzcHJlZSdzIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyc2VkIGh0bWwgZG9jdW1lbnRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEpTQVNUXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogUGFja2FnZSBvZiBhIHBhcnNlZCBKUyBzY3JpcHRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlZEpTXG4gKiBAcHJvcGVydHkge0pTQVNUfSBhc3QgVGhlIHNjcmlwdCdzIEFTVFxuICogQHByb3BlcnR5IHtEb2N1bWVudEFTVH0gc2NyaXB0RWxlbWVudCBJZiBpbmxpbmUsIHRoZSBzY3JpcHQncyBjb250YWluaW5nIHRhZy5cbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgc2luZ2xlIHBvbHltZXIgZWxlbWVudFxuICogQHR5cGVkZWYge09iamVjdH0gRWxlbWVudERlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgUG9seW1lciBmZWF0dXJlLlxuICogQHR5cGVkZWYge09iamVjdH0gRmVhdHVyZURlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBUaGUgbWV0YWRhdGEgZm9yIGEgUG9seW1lciBiZWhhdmlvciBtaXhpbi5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEJlaGF2aW9yRGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYWxsIGZlYXR1cmVzIGFuZCBlbGVtZW50cyBkZWZpbmVkIGluIG9uZSBkb2N1bWVudFxuICogQHR5cGVkZWYge09iamVjdH0gRG9jdW1lbnREZXNjcmlwdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtBcnJheTxFbGVtZW50RGVzY3JpcHRvcj59IGVsZW1lbnRzIFRoZSBlbGVtZW50cyBmcm9tIHRoZSBkb2N1bWVudFxuICogQHByb3BlcnR5IHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59ICBmZWF0dXJlcyBUaGUgZmVhdHVyZXMgZnJvbSB0aGUgZG9jdW1lbnRcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fSAgYmVoYXZpb3JzIFRoZSBiZWhhdmlvcnMgZnJvbSB0aGUgZG9jdW1lbnRcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBvZiBhbiBlbnRpcmUgSFRNTCBkb2N1bWVudCwgaW4gcHJvbWlzZXMuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBbmFseXplZERvY3VtZW50XG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGhyZWYgVGhlIHVybCBvZiB0aGUgZG9jdW1lbnQuXG4gKiBAcHJvcGVydHkge1Byb21pc2U8UGFyc2VkSW1wb3J0Pn0gIGh0bWxMb2FkZWQgVGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiBvZlxuICogICAgIHRoZSBkb2MuIFVzZSB0aGUgYGFzdGAgcHJvcGVydHkgdG8gZ2V0IHRoZSBmdWxsIGBwYXJzZTVgIGFzdFxuICpcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxBcnJheTxzdHJpbmc+Pn0gZGVwc0xvYWRlZCBSZXNvbHZlcyB0byB0aGUgbGlzdCBvZiB0aGlzXG4gKiAgICAgRG9jdW1lbnQncyB0cmFuc2l0aXZlIGltcG9ydCBkZXBlbmRlbmNpZXNcbiAqXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IGRlcEhyZWZzIFRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzIG9mIHRoZSBkb2N1bWVudC5cbiAqXG4gKiBAcHJvcGVydHkge1Byb21pc2U8RG9jdW1lbnREZXNjcmlwdG9yPn0gbWV0YWRhdGFMb2FkZWQgUmVzb2x2ZXMgdG8gdGhlIGxpc3Qgb2ZcbiAqICAgICB0aGlzIERvY3VtZW50J3MgaW1wb3J0IGRlcGVuZGVuY2llc1xuICovXG5cbi8qKlxuICogQSBkYXRhYmFzZSBvZiBQb2x5bWVyIG1ldGFkYXRhIGRlZmluZWQgaW4gSFRNTFxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQG1lbWJlck9mIGh5ZHJvbHlzaXNcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGF0dGFjaEFTVCAgSWYgdHJ1ZSwgYXR0YWNoIGEgcGFyc2U1IGNvbXBsaWFudCBBU1RcbiAqIEBwYXJhbSAge0ZpbGVMb2FkZXI9fSBsb2FkZXIgQW4gb3B0aW9uYWwgYEZpbGVMb2FkZXJgIHVzZWQgdG8gbG9hZCBleHRlcm5hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNcbiAqL1xudmFyIEFuYWx5emVyID0gZnVuY3Rpb24gQW5hbHl6ZXIoYXR0YWNoQVNULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyKSB7XG4gIHRoaXMubG9hZGVyID0gbG9hZGVyO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIHRoZSBgQW5hbHl6ZXJgIGhhcyBtZXRhZGF0YSBmb3IuXG4gICAqIEBtZW1iZXIge0FycmF5LjxFbGVtZW50RGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmVsZW1lbnRzID0gW107XG5cbiAgLyoqXG4gICAqIEEgdmlldyBpbnRvIGBlbGVtZW50c2AsIGtleWVkIGJ5IHRhZyBuYW1lLlxuICAgKiBAbWVtYmVyIHtPYmplY3QuPHN0cmluZyxFbGVtZW50RGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lID0ge307XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBBUEkgZmVhdHVyZXMgYWRkZWQgdG8gYFBvbHltZXIuQmFzZWAgZW5jb3VudGVyZWQgYnkgdGhlXG4gICAqIGFuYWx5emVyLlxuICAgKiBAbWVtYmVyIHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmZlYXR1cmVzID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBiZWhhdmlvcnMgY29sbGVjdGVkIGJ5IHRoZSBhbmFseXNpcyBwYXNzLlxuICAgKlxuICAgKiBAbWVtYmVyIHtBcnJheTxCZWhhdmlvckRlc2NyaXB0b3I+fVxuICAgKi9cbiAgdGhpcy5iZWhhdmlvcnMgPSBbXTtcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9ycyBjb2xsZWN0ZWQgYnkgdGhlIGFuYWx5c2lzIHBhc3MgYnkgbmFtZS5cbiAgICpcbiAgICogQG1lbWJlciB7T2JqZWN0PHN0cmluZyxCZWhhdmlvckRlc2NyaXB0b3I+fVxuICAgKi9cbiAgdGhpcy5iZWhhdmlvcnNCeU5hbWUgPSB7fTtcblxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IGFic29sdXRlIHBhdGgsIG9mIERvY3VtZW50IG1ldGFkYXRhLlxuICAgKiBAbWVtYmVyIHtPYmplY3Q8c3RyaW5nLEFuYWx5emVkRG9jdW1lbnQ+fVxuICAgKi9cbiAgdGhpcy5odG1sID0ge307XG5cbiAgLyoqXG4gICAqIEEgbWFwLCBrZXllZCBieSBwYXRoLCBvZiBIVE1MIGRvY3VtZW50IEFTVHMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLnBhcnNlZERvY3VtZW50cyA9IHt9O1xuXG4gIC8qKlxuICAgKiBBIG1hcCwga2V5ZWQgYnkgcGF0aCwgb2YgSlMgc2NyaXB0IEFTVHMuXG4gICAqXG4gICAqIElmIHRoZSBwYXRoIGlzIGFuIEhUTUwgZmlsZSB3aXRoIG11bHRpcGxlIHNjcmlwdHMsIHRoZSBlbnRyeSB3aWxsIGJlIGFuIGFycmF5IG9mIHNjcmlwdHMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLEFycmF5PFBhcnNlZEpTPj59XG4gICAqL1xuICB0aGlzLnBhcnNlZFNjcmlwdHMgPSB7fTtcblxuXG5cbiAgLyoqXG4gICAqIEEgbWFwLCBrZXllZCBieSBwYXRoLCBvZiBkb2N1bWVudCBjb250ZW50LlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdGhpcy5fY29udGVudCA9IHt9O1xufTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgQW5hbHl6ZXIuYW5hbHp5ZWBcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvYWRPcHRpb25zXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtib29sZWFufSBub0Fubm90YXRpb25zIFdoZXRoZXIgYGFubm90YXRlKClgIHNob3VsZCBiZSBza2lwcGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBjbGVhbiBXaGV0aGVyIHRoZSBnZW5lcmF0ZWQgZGVzY3JpcHRvcnMgc2hvdWxkIGJlIGNsZWFuZWRcbiAqICAgICBvZiByZWR1bmRhbnQgZGF0YS5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oc3RyaW5nKTogYm9vbGVhbn0gZmlsdGVyIEEgcHJlZGljYXRlIGZ1bmN0aW9uIHRoYXRcbiAqICAgICBpbmRpY2F0ZXMgd2hpY2ggZmlsZXMgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIGxvYWRlci4gQnkgZGVmYXVsdCBhbGxcbiAqICAgICBmaWxlcyBub3QgbG9jYXRlZCB1bmRlciB0aGUgZGlybmFtZSBvZiBgaHJlZmAgd2lsbCBiZSBpZ25vcmVkLlxuICovXG5cbi8qKlxuICogU2hvcnRoYW5kIGZvciB0cmFuc2l0aXZlbHkgbG9hZGluZyBhbmQgcHJvY2Vzc2luZyBhbGwgaW1wb3J0cyBiZWdpbm5pbmcgYXRcbiAqIGBocmVmYC5cbiAqXG4gKiBJbiBvcmRlciB0byBwcm9wZXJseSBmaWx0ZXIgcGF0aHMsIGBocmVmYCBfbXVzdF8gYmUgYW4gYWJzb2x1dGUgVVJJLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIFRoZSByb290IGltcG9ydCB0byBiZWdpbiBsb2FkaW5nIGZyb20uXG4gKiBAcGFyYW0ge0xvYWRPcHRpb25zPX0gb3B0aW9ucyBBbnkgYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgbG9hZC5cbiAqIEByZXR1cm4ge1Byb21pc2U8QW5hbHl6ZXI+fSBBIHByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgb25jZSBgaHJlZmAgYW5kIGl0c1xuICogICAgIGRlcGVuZGVuY2llcyBoYXZlIGJlZW4gbG9hZGVkIGFuZCBhbmFseXplZC5cbiAqL1xuQW5hbHl6ZXIuYW5hbHl6ZSA9IGZ1bmN0aW9uIGFuYWx5emUoaHJlZiwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgb3B0aW9ucy5maWx0ZXIgPSBvcHRpb25zLmZpbHRlciB8fCBfZGVmYXVsdEZpbHRlcihocmVmKTtcblxuICB2YXIgbG9hZGVyID0gbmV3IEZpbGVMb2FkZXIoKTtcbiAgdmFyIFByaW1hcnlSZXNvbHZlciA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyL2ZzLXJlc29sdmVyJykgOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXIveGhyLXJlc29sdmVyJyk7XG4gIGxvYWRlci5hZGRSZXNvbHZlcihuZXcgUHJpbWFyeVJlc29sdmVyKG9wdGlvbnMpKTtcbiAgbG9hZGVyLmFkZFJlc29sdmVyKG5ldyBOb29wUmVzb2x2ZXIoe3Rlc3Q6IG9wdGlvbnMuZmlsdGVyfSkpO1xuXG4gIHZhciBhbmFseXplciA9IG5ldyB0aGlzKG51bGwsIGxvYWRlcik7XG4gIHJldHVybiBhbmFseXplci5tZXRhZGF0YVRyZWUoaHJlZikudGhlbihmdW5jdGlvbihyb290KSB7XG4gICAgaWYgKCFvcHRpb25zLm5vQW5ub3RhdGlvbnMpIHtcbiAgICAgIGFuYWx5emVyLmFubm90YXRlKCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmNsZWFuKSB7XG4gICAgICBhbmFseXplci5jbGVhbigpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFuYWx5emVyKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHJlZlxuICogQHJldHVybiB7ZnVuY3Rpb24oc3RyaW5nKTogYm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gX2RlZmF1bHRGaWx0ZXIoaHJlZikge1xuICAvLyBFdmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0IGAvYCBvciBgXFxgLlxuICB2YXIgYmFzZSA9IGhyZWYubWF0Y2goL14oLio/KVteXFwvXFxcXF0qJC8pWzFdO1xuICByZXR1cm4gZnVuY3Rpb24odXJpKSB7XG4gICAgcmV0dXJuIHVyaS5pbmRleE9mKGJhc2UpICE9PSAwO1xuICB9O1xufVxuXG5BbmFseXplci5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIGxvYWQoaHJlZikge1xuICByZXR1cm4gdGhpcy5sb2FkZXIucmVxdWVzdChocmVmKS50aGVuKGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9jb250ZW50W2hyZWZdID0gY29udGVudDtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLl9wYXJzZUhUTUwoY29udGVudCwgaHJlZikpO1xuICAgICAgfS5iaW5kKHRoaXMpLCAwKTtcbiAgICB9LmJpbmQodGhpcykpLmNhdGNoKGZ1bmN0aW9uKGVycil7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcHJvY2Vzc2luZyBkb2N1bWVudCBhdCBcIiArIGhyZWYpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGBBbmFseXplZERvY3VtZW50YCByZXByZXNlbnRpbmcgdGhlIHByb3ZpZGVkIGRvY3VtZW50XG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtICB7c3RyaW5nfSBodG1sSW1wb3J0IFJhdyB0ZXh0IG9mIGFuIEhUTUwgZG9jdW1lbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gaHJlZiAgICAgICBUaGUgZG9jdW1lbnQncyBVUkwuXG4gKiBAcmV0dXJuIHtBbmFseXplZERvY3VtZW50fSAgICAgICBBbiAgYEFuYWx5emVkRG9jdW1lbnRgXG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5fcGFyc2VIVE1MID0gZnVuY3Rpb24gX3BhcnNlSFRNTChodG1sSW1wb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmKSB7XG4gIGlmIChocmVmIGluIHRoaXMuaHRtbCkge1xuICAgIHJldHVybiB0aGlzLmh0bWxbaHJlZl07XG4gIH1cbiAgdmFyIGRlcHNMb2FkZWQgPSBbXTtcbiAgdmFyIGRlcEhyZWZzID0gW107XG4gIHZhciBtZXRhZGF0YUxvYWRlZCA9IFByb21pc2UucmVzb2x2ZShFTVBUWV9NRVRBREFUQSk7XG4gIHZhciBwYXJzZWQ7XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gaW1wb3J0UGFyc2UoaHRtbEltcG9ydCwgaHJlZik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmchJyk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG4gIHZhciBodG1sTG9hZGVkID0gUHJvbWlzZS5yZXNvbHZlKHBhcnNlZCk7XG4gIGlmIChwYXJzZWQuc2NyaXB0KSB7XG4gICAgbWV0YWRhdGFMb2FkZWQgPSB0aGlzLl9wcm9jZXNzU2NyaXB0cyhwYXJzZWQuc2NyaXB0LCBocmVmKTtcbiAgfVxuICB2YXIgY29tbWVudFRleHQgPSBwYXJzZWQuY29tbWVudC5tYXAoZnVuY3Rpb24oY29tbWVudCl7XG4gICAgcmV0dXJuIGRvbTUuZ2V0VGV4dENvbnRlbnQoY29tbWVudCk7XG4gIH0pO1xuICB2YXIgcHNldWRvRWxlbWVudHMgPSBkb2NzLnBhcnNlUHNldWRvRWxlbWVudHMoY29tbWVudFRleHQpO1xuICBwc2V1ZG9FbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpe1xuICAgIGVsZW1lbnQuY29udGVudEhyZWYgPSBocmVmO1xuICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lW2VsZW1lbnQuaXNdID0gZWxlbWVudDtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgbWV0YWRhdGFMb2FkZWQgPSBtZXRhZGF0YUxvYWRlZC50aGVuKGZ1bmN0aW9uKG1ldGFkYXRhKXtcbiAgICB2YXIgbWV0YWRhdGFFbnRyeSA9IHtcbiAgICAgIGVsZW1lbnRzOiBwc2V1ZG9FbGVtZW50cyxcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIGJlaGF2aW9yczogW11cbiAgICB9O1xuICAgIHJldHVybiBbbWV0YWRhdGEsIG1ldGFkYXRhRW50cnldLnJlZHVjZShyZWR1Y2VNZXRhZGF0YSk7XG4gIH0pO1xuICBkZXBzTG9hZGVkLnB1c2gobWV0YWRhdGFMb2FkZWQpO1xuXG5cbiAgaWYgKHRoaXMubG9hZGVyKSB7XG4gICAgdmFyIGJhc2VVcmkgPSBocmVmO1xuICAgIGlmIChwYXJzZWQuYmFzZS5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiT25seSBvbmUgYmFzZSB0YWcgcGVyIGRvY3VtZW50IVwiKTtcbiAgICAgIHRocm93IFwiTXVsdGlwbGUgYmFzZSB0YWdzIGluIFwiICsgaHJlZjtcbiAgICB9IGVsc2UgaWYgKHBhcnNlZC5iYXNlLmxlbmd0aCA9PSAxKSB7XG4gICAgICB2YXIgYmFzZUhyZWYgPSBkb201LmdldEF0dHJpYnV0ZShwYXJzZWQuYmFzZVswXSwgXCJocmVmXCIpO1xuICAgICAgaWYgKGJhc2VIcmVmKSB7XG4gICAgICAgIGJhc2VIcmVmID0gYmFzZUhyZWYgKyBcIi9cIjtcbiAgICAgICAgYmFzZVVyaSA9IHVybC5yZXNvbHZlKGJhc2VVcmksIGJhc2VIcmVmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VkLmltcG9ydC5mb3JFYWNoKGZ1bmN0aW9uKGxpbmspIHtcbiAgICAgIHZhciBsaW5rdXJsID0gZG9tNS5nZXRBdHRyaWJ1dGUobGluaywgJ2hyZWYnKTtcbiAgICAgIGlmIChsaW5rdXJsKSB7XG4gICAgICAgIHZhciByZXNvbHZlZFVybCA9IHVybC5yZXNvbHZlKGJhc2VVcmksIGxpbmt1cmwpO1xuICAgICAgICBkZXBIcmVmcy5wdXNoKHJlc29sdmVkVXJsKTtcbiAgICAgICAgZGVwc0xvYWRlZC5wdXNoKHRoaXMuX2RlcGVuZGVuY2llc0xvYWRlZEZvcihyZXNvbHZlZFVybCwgaHJlZikpO1xuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgcGFyc2VkLnN0eWxlLmZvckVhY2goZnVuY3Rpb24oc3R5bGVFbGVtZW50KSB7XG4gICAgICBpZiAocG9seW1lckV4dGVybmFsU3R5bGUoc3R5bGVFbGVtZW50KSkge1xuICAgICAgICB2YXIgc3R5bGVIcmVmID0gZG9tNS5nZXRBdHRyaWJ1dGUoc3R5bGVFbGVtZW50LCAnaHJlZicpO1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIHN0eWxlSHJlZiA9IHVybC5yZXNvbHZlKGJhc2VVcmksIHN0eWxlSHJlZik7XG4gICAgICAgICAgZGVwc0xvYWRlZC5wdXNoKHRoaXMubG9hZGVyLnJlcXVlc3Qoc3R5bGVIcmVmKS50aGVuKGZ1bmN0aW9uKGNvbnRlbnQpe1xuICAgICAgICAgICAgdGhpcy5fY29udGVudFtzdHlsZUhyZWZdID0gY29udGVudDtcbiAgICAgICAgICB9LmJpbmQodGhpcykpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSk7XG4gIH1cbiAgZGVwc0xvYWRlZCA9IFByb21pc2UuYWxsKGRlcHNMb2FkZWQpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKCkge3JldHVybiBkZXBIcmVmczt9KVxuICAgICAgICAuY2F0Y2goZnVuY3Rpb24oZXJyKSB7dGhyb3cgZXJyO30pO1xuICB0aGlzLnBhcnNlZERvY3VtZW50c1tocmVmXSA9IHBhcnNlZC5hc3Q7XG4gIHRoaXMuaHRtbFtocmVmXSA9IHtcbiAgICAgIGhyZWY6IGhyZWYsXG4gICAgICBodG1sTG9hZGVkOiBodG1sTG9hZGVkLFxuICAgICAgbWV0YWRhdGFMb2FkZWQ6IG1ldGFkYXRhTG9hZGVkLFxuICAgICAgZGVwSHJlZnM6IGRlcEhyZWZzLFxuICAgICAgZGVwc0xvYWRlZDogZGVwc0xvYWRlZFxuICB9O1xuICByZXR1cm4gdGhpcy5odG1sW2hyZWZdO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9wcm9jZXNzU2NyaXB0cyA9IGZ1bmN0aW9uIF9wcm9jZXNzU2NyaXB0cyhzY3JpcHRzLCBocmVmKSB7XG4gIHZhciBzY3JpcHRQcm9taXNlcyA9IFtdO1xuICBzY3JpcHRzLmZvckVhY2goZnVuY3Rpb24oc2NyaXB0KSB7XG4gICAgc2NyaXB0UHJvbWlzZXMucHVzaCh0aGlzLl9wcm9jZXNzU2NyaXB0KHNjcmlwdCwgaHJlZikpO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gUHJvbWlzZS5hbGwoc2NyaXB0UHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24obWV0YWRhdGFMaXN0KSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhTGlzdC5yZWR1Y2UocmVkdWNlTWV0YWRhdGEsIEVNUFRZX01FVEFEQVRBKTtcbiAgfSk7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX3Byb2Nlc3NTY3JpcHQgPSBmdW5jdGlvbiBfcHJvY2Vzc1NjcmlwdChzY3JpcHQsIGhyZWYpIHtcbiAgdmFyIHNyYyA9IGRvbTUuZ2V0QXR0cmlidXRlKHNjcmlwdCwgJ3NyYycpO1xuICB2YXIgcGFyc2VkSnM7XG4gIGlmICghc3JjKSB7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZEpzID0ganNQYXJzZSgoc2NyaXB0LmNoaWxkTm9kZXMubGVuZ3RoKSA/IHNjcmlwdC5jaGlsZE5vZGVzWzBdLnZhbHVlIDogJycpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gRmlndXJlIG91dCB0aGUgY29ycmVjdCBsaW5lIG51bWJlciBmb3IgdGhlIGVycm9yLlxuICAgICAgdmFyIGxpbmUgPSAwO1xuICAgICAgdmFyIGNvbCA9IDA7XG4gICAgICBpZiAoc2NyaXB0Ll9fb3duZXJEb2N1bWVudCAmJiBzY3JpcHQuX19vd25lckRvY3VtZW50ID09IGhyZWYpIHtcbiAgICAgICAgbGluZSA9IHNjcmlwdC5fX2xvY2F0aW9uRGV0YWlsLmxpbmUgLSAxO1xuICAgICAgICBjb2wgPSBzY3JpcHQuX19sb2NhdGlvbkRldGFpbC5saW5lIC0gMTtcbiAgICAgIH1cbiAgICAgIGxpbmUgKz0gZXJyLmxpbmVOdW1iZXI7XG4gICAgICBjb2wgKz0gZXJyLmNvbHVtbjtcbiAgICAgIHZhciBtZXNzYWdlID0gXCJFcnJvciBwYXJzaW5nIHNjcmlwdCBpbiBcIiArIGhyZWYgKyBcIiBhdCBcIiArIGxpbmUgKyBcIjpcIiArIGNvbDtcbiAgICAgIG1lc3NhZ2UgKz0gXCJcXG5cIiArIGVyci5zdGFjaztcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkSnMuZWxlbWVudHMpIHtcbiAgICAgIHBhcnNlZEpzLmVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNjcmlwdEVsZW1lbnQgPSBzY3JpcHQ7XG4gICAgICAgIGVsZW1lbnQuY29udGVudEhyZWYgPSBocmVmO1xuICAgICAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIGlmIChlbGVtZW50LmlzIGluIHRoaXMuZWxlbWVudHNCeVRhZ05hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0lnbm9yaW5nIGR1cGxpY2F0ZSBlbGVtZW50IGRlZmluaXRpb246ICcgKyBlbGVtZW50LmlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lW2VsZW1lbnQuaXNdID0gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZEpzLmZlYXR1cmVzKSB7XG4gICAgICBwYXJzZWRKcy5mZWF0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uKGZlYXR1cmUpe1xuICAgICAgICBmZWF0dXJlLmNvbnRlbnRIcmVmID0gaHJlZjtcbiAgICAgICAgZmVhdHVyZS5zY3JpcHRFbGVtZW50ID0gc2NyaXB0O1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZlYXR1cmVzID0gdGhpcy5mZWF0dXJlcy5jb25jYXQocGFyc2VkSnMuZmVhdHVyZXMpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkSnMuYmVoYXZpb3JzKSB7XG4gICAgICBwYXJzZWRKcy5iZWhhdmlvcnMuZm9yRWFjaChmdW5jdGlvbihiZWhhdmlvcil7XG4gICAgICAgIGJlaGF2aW9yLmNvbnRlbnRIcmVmID0gaHJlZjtcbiAgICAgICAgdGhpcy5iZWhhdmlvcnNCeU5hbWVbYmVoYXZpb3IuaXNdID0gYmVoYXZpb3I7XG4gICAgICAgIHRoaXMuYmVoYXZpb3JzQnlOYW1lW2JlaGF2aW9yLnN5bWJvbF0gPSBiZWhhdmlvcjtcbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLmJlaGF2aW9ycyA9IHRoaXMuYmVoYXZpb3JzLmNvbmNhdChwYXJzZWRKcy5iZWhhdmlvcnMpO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyc2VkU2NyaXB0cywgaHJlZikpIHtcbiAgICAgIHRoaXMucGFyc2VkU2NyaXB0c1tocmVmXSA9IFtdO1xuICAgIH1cbiAgICB2YXIgc2NyaXB0RWxlbWVudDtcbiAgICBpZiAoc2NyaXB0Ll9fb3duZXJEb2N1bWVudCAmJiBzY3JpcHQuX19vd25lckRvY3VtZW50ID09IGhyZWYpIHtcbiAgICAgIHNjcmlwdEVsZW1lbnQgPSBzY3JpcHQ7XG4gICAgfVxuICAgIHRoaXMucGFyc2VkU2NyaXB0c1tocmVmXS5wdXNoKHtcbiAgICAgIGFzdDogcGFyc2VkSnMucGFyc2VkU2NyaXB0LFxuICAgICAgc2NyaXB0RWxlbWVudDogc2NyaXB0RWxlbWVudFxuICAgIH0pO1xuICAgIHJldHVybiBwYXJzZWRKcztcbiAgfVxuICBpZiAodGhpcy5sb2FkZXIpIHtcbiAgICB2YXIgcmVzb2x2ZWRTcmMgPSB1cmwucmVzb2x2ZShocmVmLCBzcmMpO1xuICAgIHJldHVybiB0aGlzLmxvYWRlci5yZXF1ZXN0KHJlc29sdmVkU3JjKS50aGVuKGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICAgIHRoaXMuX2NvbnRlbnRbcmVzb2x2ZWRTcmNdID0gY29udGVudDtcbiAgICAgIHZhciByZXNvbHZlZFNjcmlwdCA9IE9iamVjdC5jcmVhdGUoc2NyaXB0KTtcbiAgICAgIHJlc29sdmVkU2NyaXB0LmNoaWxkTm9kZXMgPSBbe3ZhbHVlOiBjb250ZW50fV07XG4gICAgICByZXNvbHZlZFNjcmlwdC5hdHRycyA9IHJlc29sdmVkU2NyaXB0LmF0dHJzLnNsaWNlKCk7XG4gICAgICBkb201LnJlbW92ZUF0dHJpYnV0ZShyZXNvbHZlZFNjcmlwdCwgJ3NyYycpO1xuICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NTY3JpcHQocmVzb2x2ZWRTY3JpcHQsIHJlc29sdmVkU3JjKTtcbiAgICB9LmJpbmQodGhpcykpLmNhdGNoKGZ1bmN0aW9uKGVycikge3Rocm93IGVycjt9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEVNUFRZX01FVEFEQVRBKTtcbiAgfVxufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9kZXBlbmRlbmNpZXNMb2FkZWRGb3IgPSBmdW5jdGlvbiBfZGVwZW5kZW5jaWVzTG9hZGVkRm9yKGhyZWYsIHJvb3QpIHtcbiAgdmFyIGZvdW5kID0ge307XG4gIGlmIChyb290ICE9PSB1bmRlZmluZWQpIHtcbiAgICBmb3VuZFtyb290XSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX2dldERlcGVuZGVuY2llcyhocmVmLCBmb3VuZCkudGhlbihmdW5jdGlvbihkZXBzKSB7XG4gICAgdmFyIGRlcE1ldGFkYXRhTG9hZGVkID0gW107XG4gICAgdmFyIGRlcFByb21pc2VzID0gZGVwcy5tYXAoZnVuY3Rpb24oZGVwSHJlZil7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkKGRlcEhyZWYpLnRoZW4oZnVuY3Rpb24oaHRtbE1vbm9tZXIpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxNb25vbWVyLm1ldGFkYXRhTG9hZGVkO1xuICAgICAgfSk7XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoZGVwUHJvbWlzZXMpO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuLyoqXG4gKiBMaXN0IGFsbCB0aGUgaHRtbCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBkb2N1bWVudCBhdCBgaHJlZmAuXG4gKiBAcGFyYW0gIHtzdHJpbmd9ICAgICAgICAgICAgICAgICAgIGhyZWYgICAgICBUaGUgaHJlZiB0byBnZXQgZGVwZW5kZW5jaWVzIGZvci5cbiAqIEBwYXJhbSAge09iamVjdC48c3RyaW5nLGJvb2xlYW4+PX0gZm91bmQgICAgIEFuIG9iamVjdCBrZXllZCBieSBVUkwgb2YgdGhlXG4gKiAgICAgYWxyZWFkeSByZXNvbHZlZCBkZXBlbmRlbmNpZXMuXG4gKiBAcGFyYW0gIHtib29sZWFuPX0gICAgICAgICAgICAgICAgdHJhbnNpdGl2ZSBXaGV0aGVyIHRvIGxvYWQgdHJhbnNpdGl2ZVxuICogICAgIGRlcGVuZGVuY2llcy4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fSAgQSBsaXN0IG9mIGFsbCB0aGUgaHRtbCBkZXBlbmRlbmNpZXMuXG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5fZ2V0RGVwZW5kZW5jaWVzID0gZnVuY3Rpb24gX2dldERlcGVuZGVuY2llcyhocmVmLCBmb3VuZCwgdHJhbnNpdGl2ZSkge1xuICBpZiAoZm91bmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvdW5kID0ge307XG4gICAgZm91bmRbaHJlZl0gPSB0cnVlO1xuICB9XG4gIGlmICh0cmFuc2l0aXZlID09PSB1bmRlZmluZWQpIHtcbiAgICB0cmFuc2l0aXZlID0gdHJ1ZTtcbiAgfVxuICB2YXIgZGVwcyA9IFtdO1xuICByZXR1cm4gdGhpcy5sb2FkKGhyZWYpLnRoZW4oZnVuY3Rpb24oaHRtbE1vbm9tZXIpIHtcbiAgICB2YXIgdHJhbnNpdGl2ZURlcHMgPSBbXTtcbiAgICBodG1sTW9ub21lci5kZXBIcmVmcy5mb3JFYWNoKGZ1bmN0aW9uKGRlcEhyZWYpe1xuICAgICAgaWYgKGZvdW5kW2RlcEhyZWZdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRlcHMucHVzaChkZXBIcmVmKTtcbiAgICAgIGZvdW5kW2RlcEhyZWZdID0gdHJ1ZTtcbiAgICAgIGlmICh0cmFuc2l0aXZlKSB7XG4gICAgICAgIHRyYW5zaXRpdmVEZXBzLnB1c2godGhpcy5fZ2V0RGVwZW5kZW5jaWVzKGRlcEhyZWYsIGZvdW5kKSk7XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodHJhbnNpdGl2ZURlcHMpO1xuICB9LmJpbmQodGhpcykpLnRoZW4oZnVuY3Rpb24odHJhbnNpdGl2ZURlcHMpIHtcbiAgICB2YXIgYWxsZGVwcyA9IHRyYW5zaXRpdmVEZXBzLnJlZHVjZShmdW5jdGlvbihhLCBiKSB7XG4gICAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gICAgfSwgW10pLmNvbmNhdChkZXBzKTtcbiAgICByZXR1cm4gYWxsZGVwcztcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBtYXRjaGVzRG9jdW1lbnRGb2xkZXIoZGVzY3JpcHRvciwgaHJlZikge1xuICBpZiAoIWRlc2NyaXB0b3IuY29udGVudEhyZWYpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGRlc2NyaXB0b3JEb2MgPSB1cmwucGFyc2UoZGVzY3JpcHRvci5jb250ZW50SHJlZik7XG4gIGlmICghZGVzY3JpcHRvckRvYyB8fCAhZGVzY3JpcHRvckRvYy5wYXRobmFtZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgc2VhcmNoRG9jID0gdXJsLnBhcnNlKGhyZWYpO1xuICBpZiAoIXNlYXJjaERvYyB8fCAhc2VhcmNoRG9jLnBhdGhuYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBzZWFyY2hQYXRoID0gc2VhcmNoRG9jLnBhdGhuYW1lO1xuICB2YXIgbGFzdFNsYXNoID0gc2VhcmNoUGF0aC5sYXN0SW5kZXhPZihcIi9cIik7XG4gIGlmIChsYXN0U2xhc2ggPiAwKSB7XG4gICAgc2VhcmNoUGF0aCA9IHNlYXJjaFBhdGguc2xpY2UoMCwgbGFzdFNsYXNoKTtcbiAgfVxuICByZXR1cm4gZGVzY3JpcHRvckRvYy5wYXRobmFtZS5pbmRleE9mKHNlYXJjaFBhdGgpID09PSAwO1xufVxuXG5BbmFseXplci5wcm90b3R5cGUuZWxlbWVudHNGb3JGb2xkZXIgPSBmdW5jdGlvbiBlbGVtZW50c0ZvckZvbGRlcihocmVmKSB7XG4gIHJldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihlbGVtZW50KXtcbiAgICByZXR1cm4gbWF0Y2hlc0RvY3VtZW50Rm9sZGVyKGVsZW1lbnQsIGhyZWYpO1xuICB9KTtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5iZWhhdmlvcnNGb3JGb2xkZXIgPSBmdW5jdGlvbiBiZWhhdmlvcnNGb3JGb2xkZXIoaHJlZikge1xuICByZXR1cm4gdGhpcy5iZWhhdmlvcnMuZmlsdGVyKGZ1bmN0aW9uKGJlaGF2aW9yKXtcbiAgICByZXR1cm4gbWF0Y2hlc0RvY3VtZW50Rm9sZGVyKGJlaGF2aW9yLCBocmVmKTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBQT0pPIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbXBvcnRcbiAqIHRyZWUsIGluIGEgZm9ybWF0IHRoYXQgbWFpbnRhaW5zIHRoZSBvcmRlcmluZyBvZiB0aGUgSFRNTCBpbXBvcnRzIHNwZWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gaHJlZiB0aGUgaW1wb3J0IHRvIGdldCBtZXRhZGF0YSBmb3IuXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5BbmFseXplci5wcm90b3R5cGUubWV0YWRhdGFUcmVlID0gZnVuY3Rpb24gbWV0YWRhdGFUcmVlKGhyZWYpIHtcbiAgcmV0dXJuIHRoaXMubG9hZChocmVmKS50aGVuKGZ1bmN0aW9uKG1vbm9tZXIpe1xuICAgIHZhciBsb2FkZWRIcmVmcyA9IHt9O1xuICAgIGxvYWRlZEhyZWZzW2hyZWZdID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFUcmVlKG1vbm9tZXIsIGxvYWRlZEhyZWZzKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fbWV0YWRhdGFUcmVlID0gZnVuY3Rpb24gX21ldGFkYXRhVHJlZShodG1sTW9ub21lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWRIcmVmcykge1xuICBpZiAobG9hZGVkSHJlZnMgPT09IHVuZGVmaW5lZCkge1xuICAgIGxvYWRlZEhyZWZzID0ge307XG4gIH1cbiAgcmV0dXJuIGh0bWxNb25vbWVyLm1ldGFkYXRhTG9hZGVkLnRoZW4oZnVuY3Rpb24obWV0YWRhdGEpIHtcbiAgICBtZXRhZGF0YSA9IHtcbiAgICAgIGVsZW1lbnRzOiBtZXRhZGF0YS5lbGVtZW50cyxcbiAgICAgIGZlYXR1cmVzOiBtZXRhZGF0YS5mZWF0dXJlcyxcbiAgICAgIGhyZWY6IGh0bWxNb25vbWVyLmhyZWZcbiAgICB9O1xuICAgIHJldHVybiBodG1sTW9ub21lci5kZXBzTG9hZGVkLnRoZW4oZnVuY3Rpb24oaHJlZnMpIHtcbiAgICAgIHZhciBkZXBNZXRhZGF0YSA9IFtdO1xuICAgICAgaHJlZnMuZm9yRWFjaChmdW5jdGlvbihocmVmKSB7XG4gICAgICAgIHZhciBtZXRhZGF0YVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gICAgICAgIGlmIChkZXBNZXRhZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbWV0YWRhdGFQcm9taXNlID0gZGVwTWV0YWRhdGFbZGVwTWV0YWRhdGEubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgbWV0YWRhdGFQcm9taXNlID0gbWV0YWRhdGFQcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFsb2FkZWRIcmVmc1tocmVmXSkge1xuICAgICAgICAgICAgbG9hZGVkSHJlZnNbaHJlZl0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhVHJlZSh0aGlzLmh0bWxbaHJlZl0sIGxvYWRlZEhyZWZzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICBkZXBNZXRhZGF0YS5wdXNoKG1ldGFkYXRhUHJvbWlzZSk7XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGRlcE1ldGFkYXRhKS50aGVuKGZ1bmN0aW9uKGltcG9ydE1ldGFkYXRhKSB7XG4gICAgICAgIG1ldGFkYXRhLmltcG9ydHMgPSBpbXBvcnRNZXRhZGF0YTtcbiAgICAgICAgcmV0dXJuIGh0bWxNb25vbWVyLmh0bWxMb2FkZWQudGhlbihmdW5jdGlvbihwYXJzZWRIdG1sKSB7XG4gICAgICAgICAgbWV0YWRhdGEuaHRtbCA9IHBhcnNlZEh0bWw7XG4gICAgICAgICAgaWYgKG1ldGFkYXRhLmVsZW1lbnRzKSB7XG4gICAgICAgICAgICBtZXRhZGF0YS5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgYXR0YWNoRG9tTW9kdWxlKHBhcnNlZEh0bWwsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtZXRhZGF0YTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LmJpbmQodGhpcykpO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuZnVuY3Rpb24gbWF0Y2hpbmdJbXBvcnQoaW1wb3J0RWxlbWVudCkge1xuICB2YXIgbWF0Y2hlc1RhZyA9IGRvbTUucHJlZGljYXRlcy5oYXNUYWdOYW1lKGltcG9ydEVsZW1lbnQudGFnTmFtZSk7XG4gIHZhciBtYXRjaGVzSHJlZiA9IGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ2hyZWYnLCBkb201LmdldEF0dHJpYnV0ZShpbXBvcnRFbGVtZW50LCAnaHJlZicpKTtcbiAgdmFyIG1hdGNoZXNSZWwgPSBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCdyZWwnLCBkb201LmdldEF0dHJpYnV0ZShpbXBvcnRFbGVtZW50LCAncmVsJykpO1xuICByZXR1cm4gZG9tNS5wcmVkaWNhdGVzLkFORChtYXRjaGVzVGFnLCBtYXRjaGVzSHJlZiwgbWF0Y2hlc1JlbCk7XG59XG5cbi8vIFRPRE8oYWpvKTogUmVmYWN0b3Igb3V0IG9mIHZ1bGNhbml6ZSBpbnRvIGRvbTUuXG52YXIgcG9seW1lckV4dGVybmFsU3R5bGUgPSBkb201LnByZWRpY2F0ZXMuQU5EKFxuICBkb201LnByZWRpY2F0ZXMuaGFzVGFnTmFtZSgnbGluaycpLFxuICBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCdyZWwnLCAnaW1wb3J0JyksXG4gIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3R5cGUnLCAnY3NzJylcbik7XG5cbnZhciBleHRlcm5hbFNjcmlwdCA9IGRvbTUucHJlZGljYXRlcy5BTkQoXG4gIGRvbTUucHJlZGljYXRlcy5oYXNUYWdOYW1lKCdzY3JpcHQnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHIoJ3NyYycpXG4pO1xuXG52YXIgaXNIdG1sSW1wb3J0Tm9kZSA9IGRvbTUucHJlZGljYXRlcy5BTkQoXG4gIGRvbTUucHJlZGljYXRlcy5oYXNUYWdOYW1lKCdsaW5rJyksXG4gIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3JlbCcsICdpbXBvcnQnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLk5PVChcbiAgICBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCd0eXBlJywgJ2NzcycpXG4gIClcbik7XG5cbkFuYWx5emVyLnByb3RvdHlwZS5faW5saW5lU3R5bGVzID0gZnVuY3Rpb24gX2lubGluZVN0eWxlcyhhc3QsIGhyZWYpIHtcbiAgdmFyIGNzc0xpbmtzID0gZG9tNS5xdWVyeUFsbChhc3QsIHBvbHltZXJFeHRlcm5hbFN0eWxlKTtcbiAgY3NzTGlua3MuZm9yRWFjaChmdW5jdGlvbihsaW5rKSB7XG4gICAgdmFyIGxpbmtIcmVmID0gZG9tNS5nZXRBdHRyaWJ1dGUobGluaywgJ2hyZWYnKTtcbiAgICB2YXIgdXJpID0gdXJsLnJlc29sdmUoaHJlZiwgbGlua0hyZWYpO1xuICAgIHZhciBjb250ZW50ID0gdGhpcy5fY29udGVudFt1cmldO1xuICAgIHZhciBzdHlsZSA9IGRvbTUuY29uc3RydWN0b3JzLmVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgZG9tNS5zZXRUZXh0Q29udGVudChzdHlsZSwgJ1xcbicgKyBjb250ZW50ICsgJ1xcbicpO1xuICAgIGRvbTUucmVwbGFjZShsaW5rLCBzdHlsZSk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBjc3NMaW5rcy5sZW5ndGggPiAwO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9pbmxpbmVTY3JpcHRzID0gZnVuY3Rpb24gX2lubGluZVNjcmlwdHMoYXN0LCBocmVmKSB7XG4gIHZhciBzY3JpcHRzID0gZG9tNS5xdWVyeUFsbChhc3QsIGV4dGVybmFsU2NyaXB0KTtcbiAgc2NyaXB0cy5mb3JFYWNoKGZ1bmN0aW9uKHNjcmlwdCkge1xuICAgIHZhciBzY3JpcHRIcmVmID0gZG9tNS5nZXRBdHRyaWJ1dGUoc2NyaXB0LCAnc3JjJyk7XG4gICAgdmFyIHVyaSA9IHVybC5yZXNvbHZlKGhyZWYsIHNjcmlwdEhyZWYpO1xuICAgIHZhciBjb250ZW50ID0gdGhpcy5fY29udGVudFt1cmldO1xuICAgIHZhciBpbmxpbmVkID0gZG9tNS5jb25zdHJ1Y3RvcnMuZWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgZG9tNS5zZXRUZXh0Q29udGVudChpbmxpbmVkLCAnXFxuJyArIGNvbnRlbnQgKyAnXFxuJyk7XG4gICAgZG9tNS5yZXBsYWNlKHNjcmlwdCwgaW5saW5lZCk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBzY3JpcHRzLmxlbmd0aCA+IDA7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX2lubGluZUltcG9ydHMgPSBmdW5jdGlvbiBfaW5saW5lSW1wb3J0cyhhc3QsIGhyZWYsIGxvYWRlZCkge1xuICB2YXIgaW1wb3J0cyA9IGRvbTUucXVlcnlBbGwoYXN0LCBpc0h0bWxJbXBvcnROb2RlKTtcbiAgaW1wb3J0cy5mb3JFYWNoKGZ1bmN0aW9uKGh0bWxJbXBvcnQpIHtcbiAgICB2YXIgaW1wb3J0SHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKGh0bWxJbXBvcnQsICdocmVmJyk7XG4gICAgdmFyIHVyaSA9IHVybC5yZXNvbHZlKGhyZWYsIGltcG9ydEhyZWYpO1xuICAgIGlmIChsb2FkZWRbdXJpXSkge1xuICAgICAgZG9tNS5yZW1vdmUoaHRtbEltcG9ydCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjb250ZW50ID0gdGhpcy5nZXRMb2FkZWRBc3QodXJpLCBsb2FkZWQpO1xuICAgIGRvbTUucmVwbGFjZShodG1sSW1wb3J0LCBjb250ZW50KTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgcmV0dXJuIGltcG9ydHMubGVuZ3RoID4gMDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgcmVzb2x2aW5nIHRvIGEgZm9ybSBvZiB0aGUgQVNUIHdpdGggYWxsIGxpbmtzIHJlcGxhY2VkXG4gKiB3aXRoIHRoZSBkb2N1bWVudCB0aGV5IGxpbmsgdG8uIC5jc3MgYW5kIC5zY3JpcHQgZmlsZXMgYmVjb21lICZsdDtzdHlsZSZndDsgYW5kXG4gKiAmbHQ7c2NyaXB0Jmd0OywgcmVzcGVjdGl2ZWx5LlxuICpcbiAqIFRoZSBlbGVtZW50cyBpbiB0aGUgbG9hZGVkIGRvY3VtZW50IGFyZSB1bm1vZGlmaWVkIGZyb20gdGhlaXIgb3JpZ2luYWxcbiAqIGRvY3VtZW50cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHJlZiBUaGUgZG9jdW1lbnQgdG8gbG9hZC5cbiAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsYm9vbGVhbj49fSBsb2FkZWQgQW4gb2JqZWN0IGtleWVkIGJ5IGFscmVhZHkgbG9hZGVkIGRvY3VtZW50cy5cbiAqIEByZXR1cm4ge1Byb21pc2UuPERvY3VtZW50QVNUPn1cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLmdldExvYWRlZEFzdCA9IGZ1bmN0aW9uIGdldExvYWRlZEFzdChocmVmLCBsb2FkZWQpIHtcbiAgaWYgKCFsb2FkZWQpIHtcbiAgICBsb2FkZWQgPSB7fTtcbiAgfVxuICBsb2FkZWRbaHJlZl0gPSB0cnVlO1xuICB2YXIgcGFyc2VkRG9jdW1lbnQgPSB0aGlzLnBhcnNlZERvY3VtZW50c1tocmVmXTtcbiAgdmFyIGFuYWx5emVkRG9jdW1lbnQgPSB0aGlzLmh0bWxbaHJlZl07XG4gIHZhciBhc3RDb3B5ID0gZG9tNS5wYXJzZShkb201LnNlcmlhbGl6ZShwYXJzZWREb2N1bWVudCkpO1xuICAvLyBXaGVuZXZlciB3ZSBpbmxpbmUgc29tZXRoaW5nLCByZXNldCBpbmxpbmVkIHRvIHRydWUgdG8ga25vdyB0aGF0IGFub2F0aGVyXG4gIC8vIGlubGluaW5nIHBhc3MgaXMgbmVlZGVkO1xuICB0aGlzLl9pbmxpbmVTdHlsZXMoYXN0Q29weSwgaHJlZik7XG4gIHRoaXMuX2lubGluZVNjcmlwdHMoYXN0Q29weSwgaHJlZik7XG4gIHRoaXMuX2lubGluZUltcG9ydHMoYXN0Q29weSwgaHJlZiwgbG9hZGVkKTtcbiAgcmV0dXJuIGFzdENvcHk7XG59O1xuXG4vKipcbiAqIENhbGxzIGBkb201Lm5vZGVXYWxrQWxsYCBvbiBlYWNoIGRvY3VtZW50IHRoYXQgYEFuYXl6bGVyYCBoYXMgbGFvZGVkLlxuICogQHBhcmFtICB7T2JqZWN0fSBwcmVkaWNhdGUgQSBkb201IHByZWRpY2F0ZS5cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLm5vZGVXYWxrRG9jdW1lbnRzID0gZnVuY3Rpb24gbm9kZVdhbGtEb2N1bWVudHMocHJlZGljYXRlKSB7XG4gIGZvciAodmFyIGhyZWYgaW4gdGhpcy5wYXJzZWREb2N1bWVudHMpIHtcbiAgICB2YXIgbWF0Y2ggPSBkb201Lm5vZGVXYWxrKHRoaXMucGFyc2VkRG9jdW1lbnRzW2hyZWZdLCBwcmVkaWNhdGUpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogQ2FsbHMgYGRvbTUubm9kZVdhbGtBbGxgIG9uIGVhY2ggZG9jdW1lbnQgdGhhdCBgQW5heXpsZXJgIGhhcyBsYW9kZWQuXG4gKiBAcGFyYW0gIHtPYmplY3R9IHByZWRpY2F0ZSBBIGRvbTUgcHJlZGljYXRlLlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5BbmFseXplci5wcm90b3R5cGUubm9kZVdhbGtBbGxEb2N1bWVudHMgPSBmdW5jdGlvbiBub2RlV2Fsa0RvY3VtZW50cyhwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgZm9yICh2YXIgaHJlZiBpbiB0aGlzLnBhcnNlZERvY3VtZW50cykge1xuICAgIHZhciBuZXdOb2RlcyA9IGRvbTUubm9kZVdhbGtBbGwodGhpcy5wYXJzZWREb2N1bWVudHNbaHJlZl0sIHByZWRpY2F0ZSk7XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KG5ld05vZGVzKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKiBBbm5vdGF0ZXMgYWxsIGxvYWRlZCBtZXRhZGF0YSB3aXRoIGl0cyBkb2N1bWVudGF0aW9uLiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLmFubm90YXRlID0gZnVuY3Rpb24gYW5ub3RhdGUoKSB7XG4gIGlmICh0aGlzLmZlYXR1cmVzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZmVhdHVyZUVsID0gZG9jcy5mZWF0dXJlRWxlbWVudCh0aGlzLmZlYXR1cmVzKTtcbiAgICB0aGlzLmVsZW1lbnRzLnVuc2hpZnQoZmVhdHVyZUVsKTtcbiAgICB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lW2ZlYXR1cmVFbC5pc10gPSBmZWF0dXJlRWw7XG4gIH1cbiAgdmFyIGJlaGF2aW9yc0J5TmFtZSA9IHRoaXMuYmVoYXZpb3JzQnlOYW1lO1xuICB2YXIgZWxlbWVudEhlbHBlciA9IGZ1bmN0aW9uKGRlc2NyaXB0b3Ipe1xuICAgIGRvY3MuYW5ub3RhdGVFbGVtZW50KGRlc2NyaXB0b3IsIGJlaGF2aW9yc0J5TmFtZSk7XG4gIH07XG4gIHRoaXMuZWxlbWVudHMuZm9yRWFjaChlbGVtZW50SGVscGVyKTtcbiAgdGhpcy5iZWhhdmlvcnMuZm9yRWFjaChlbGVtZW50SGVscGVyKTsgLy8gU2FtZSBzaGFwZS5cbiAgdGhpcy5iZWhhdmlvcnMuZm9yRWFjaChmdW5jdGlvbihiZWhhdmlvcil7XG4gICAgaWYgKGJlaGF2aW9yLmlzICE9PSBiZWhhdmlvci5zeW1ib2wgJiYgYmVoYXZpb3Iuc3ltYm9sKSB7XG4gICAgICB0aGlzLmJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvci5zeW1ib2xdID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbmZ1bmN0aW9uIGF0dGFjaERvbU1vZHVsZShwYXJzZWRJbXBvcnQsIGVsZW1lbnQpIHtcbiAgdmFyIGRvbU1vZHVsZXMgPSBwYXJzZWRJbXBvcnRbJ2RvbS1tb2R1bGUnXTtcbiAgZm9yICh2YXIgaSA9IDAsIGRvbU1vZHVsZTsgaSA8IGRvbU1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICBkb21Nb2R1bGUgPSBkb21Nb2R1bGVzW2ldO1xuICAgIGlmIChkb201LmdldEF0dHJpYnV0ZShkb21Nb2R1bGUsICdpZCcpID09PSBlbGVtZW50LmlzKSB7XG4gICAgICBlbGVtZW50LmRvbU1vZHVsZSA9IGRvbU1vZHVsZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFJlbW92ZXMgcmVkdW5kYW50IHByb3BlcnRpZXMgZnJvbSB0aGUgY29sbGVjdGVkIGRlc2NyaXB0b3JzLiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLmNsZWFuID0gZnVuY3Rpb24gY2xlYW4oKSB7XG4gIHRoaXMuZWxlbWVudHMuZm9yRWFjaChkb2NzLmNsZWFuRWxlbWVudCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFuYWx5emVyO1xuIl19
737 737 },{"./ast-utils/docs":5,"./ast-utils/import-parse":10,"./ast-utils/js-parse":11,"./loader/file-loader":13,"./loader/fs-resolver":14,"./loader/noop-resolver":15,"./loader/xhr-resolver":17,"dom5":39,"es6-promise":61,"url":27}],2:[function(require,module,exports){
738 738 /**
739 739 * @license
... ... @@ -1255,7 +1255,6 @@ var ELEMENT_CONFIGURATION = [
1255 1255 'is',
1256 1256 'listeners',
1257 1257 'mixins',
1258   - 'observers',
1259 1258 'properties',
1260 1259 'ready',
1261 1260 'registered'
... ... @@ -1344,6 +1343,20 @@ function copyProperties(from, to, behaviorsByName) {
1344 1343 });
1345 1344 to.properties.push(newProp);
1346 1345 });
  1346 + from.events.forEach(function(fromEvent){
  1347 + for (var toEvent, i = 0; i < to.events.length; i++) {
  1348 + toEvent = to.events[i];
  1349 + if (fromEvent.name === toEvent.name) {
  1350 + return;
  1351 + }
  1352 + }
  1353 + if (fromEvent.__fromBehavior) {
  1354 + return;
  1355 + }
  1356 + var newEvent = Object.create(fromEvent);
  1357 + newEvent.__fromBehavior = from.is;
  1358 + to.events.push(newEvent);
  1359 + });
1347 1360 }
1348 1361 if (!from.behaviors) {
1349 1362 return;
... ... @@ -1752,6 +1765,20 @@ var elementFinder = function elementFinder() {
1752 1765 v = astValue.CANT_CONVERT;
1753 1766 element.behaviors.push(v);
1754 1767 }
  1768 + },
  1769 + observers: function(node) {
  1770 + if (node.type != 'ArrayExpression') {
  1771 + return;
  1772 + }
  1773 + for (var i=0; i<node.elements.length; i++) {
  1774 + var v = astValue.expressionToValue(node.elements[i]);
  1775 + if (v === undefined)
  1776 + v = astValue.CANT_CONVERT;
  1777 + element.observers.push({
  1778 + javascriptNode: node.elements[i],
  1779 + expression: v
  1780 + });
  1781 + }
1755 1782 }
1756 1783 };
1757 1784  
... ... @@ -1786,6 +1813,10 @@ var elementFinder = function elementFinder() {
1786 1813 if (element && !element.properties) {
1787 1814 element.properties = [];
1788 1815 element.behaviors = [];
  1816 + element.observers = [];
  1817 + var getters = {};
  1818 + var setters = {};
  1819 + var definedProperties = {};
1789 1820 for (var i = 0; i < node.properties.length; i++) {
1790 1821 var prop = node.properties[i];
1791 1822 var name = esutil.objectKeyToString(prop.key);
... ... @@ -1800,8 +1831,31 @@ var elementFinder = function elementFinder() {
1800 1831 propertyHandlers[name](prop.value);
1801 1832 continue;
1802 1833 }
1803   - element.properties.push(esutil.toPropertyDescriptor(prop));
  1834 + var descriptor = esutil.toPropertyDescriptor(prop);
  1835 + if (descriptor.getter) {
  1836 + getters[descriptor.name] = descriptor;
  1837 + } else if (descriptor.setter) {
  1838 + setters[descriptor.name] = descriptor;
  1839 + } else {
  1840 + element.properties.push(esutil.toPropertyDescriptor(prop));
  1841 + }
1804 1842 }
  1843 + Object.keys(getters).forEach(function(getter) {
  1844 + var get = getters[getter];
  1845 + definedProperties[get.name] = get;
  1846 + });
  1847 + Object.keys(setters).forEach(function(setter) {
  1848 + var set = setters[setter];
  1849 + if (!(set.name in definedProperties)) {
  1850 + definedProperties[set.name] = set;
  1851 + } else {
  1852 + definedProperties[set.name].setter = true;
  1853 + }
  1854 + });
  1855 + Object.keys(definedProperties).forEach(function(p){
  1856 + var prop = definedProperties[p];
  1857 + element.properties.push(p);
  1858 + });
1805 1859 return estraverse.VisitorOption.Skip;
1806 1860 }
1807 1861 }
... ... @@ -1959,14 +2013,21 @@ function getLeadingComments(node) {
1959 2013 * @return {PropertyDescriptor}
1960 2014 */
1961 2015 function toPropertyDescriptor(node) {
  2016 + var type = closureType(node.value);
  2017 + if (type == "Function") {
  2018 + if (node.kind === "get" || node.kind === "set") {
  2019 + type = '';
  2020 + node[node.kind+"ter"] = true;
  2021 + }
  2022 + }
1962 2023 var result = {
1963 2024 name: objectKeyToString(node.key),
1964   - type: closureType(node.value),
  2025 + type: type,
1965 2026 desc: getAttachedComment(node),
1966 2027 javascriptNode: node
1967 2028 };
1968 2029  
1969   - if (node.value.type === 'FunctionExpression') {
  2030 + if (type === 'Function') {
1970 2031 result.params = (node.value.params || []).map(function(param) {
1971 2032 return {name: param.name};
1972 2033 });
... ... @@ -2647,6 +2708,7 @@ module.exports = FileLoader;
2647 2708  
2648 2709 var fs = require('fs');
2649 2710 var path = require('path');
  2711 +var pathIsAbsolute = require('path-is-absolute');
2650 2712 var url = require('url');
2651 2713  
2652 2714 function getFile(filePath, deferred, secondPath) {
... ... @@ -2716,7 +2778,6 @@ FSResolver.prototype = {
2716 2778 if (!parsed.hostname || parsed.hostname === host) {
2717 2779 local = parsed.pathname;
2718 2780 }
2719   -
2720 2781 if (local) {
2721 2782 // un-escape HTML escapes
2722 2783 local = decodeURIComponent(local);
... ... @@ -2743,7 +2804,7 @@ FSResolver.prototype = {
2743 2804  
2744 2805 module.exports = FSResolver;
2745 2806  
2746   -},{"fs":18,"path":21,"url":27}],15:[function(require,module,exports){
  2807 +},{"fs":18,"path":21,"path-is-absolute":75,"url":27}],15:[function(require,module,exports){
2747 2808 /**
2748 2809 * @license
2749 2810 * Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
... ... @@ -26417,7 +26478,32 @@ module.exports={
26417 26478 "readme": "ERROR: No README data found!"
26418 26479 }
26419 26480  
26420   -},{}],"hydrolysis":[function(require,module,exports){
  26481 +},{}],75:[function(require,module,exports){
  26482 +(function (process){
  26483 +'use strict';
  26484 +
  26485 +function posix(path) {
  26486 + return path.charAt(0) === '/';
  26487 +};
  26488 +
  26489 +function win32(path) {
  26490 + // https://github.com/joyent/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56
  26491 + var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/;
  26492 + var result = splitDeviceRe.exec(path);
  26493 + var device = result[1] || '';
  26494 + var isUnc = !!device && device.charAt(1) !== ':';
  26495 +
  26496 + // UNC paths are always absolute
  26497 + return !!result[2] || isUnc;
  26498 +};
  26499 +
  26500 +module.exports = process.platform === 'win32' ? win32 : posix;
  26501 +module.exports.posix = posix;
  26502 +module.exports.win32 = win32;
  26503 +
  26504 +}).call(this,require('_process'))
  26505 +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9wYXRoLWlzLWFic29sdXRlL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gcG9zaXgocGF0aCkge1xuXHRyZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbn07XG5cbmZ1bmN0aW9uIHdpbjMyKHBhdGgpIHtcblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2Jsb2IvYjNmY2MyNDVmYjI1NTM5OTA5ZWYxZDVlYWEwMWRiZjkyZTE2ODYzMy9saWIvcGF0aC5qcyNMNTZcblx0dmFyIHNwbGl0RGV2aWNlUmUgPSAvXihbYS16QS1aXTp8W1xcXFxcXC9dezJ9W15cXFxcXFwvXStbXFxcXFxcL10rW15cXFxcXFwvXSspPyhbXFxcXFxcL10pPyhbXFxzXFxTXSo/KSQvO1xuXHR2YXIgcmVzdWx0ID0gc3BsaXREZXZpY2VSZS5leGVjKHBhdGgpO1xuXHR2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8ICcnO1xuXHR2YXIgaXNVbmMgPSAhIWRldmljZSAmJiBkZXZpY2UuY2hhckF0KDEpICE9PSAnOic7XG5cblx0Ly8gVU5DIHBhdGhzIGFyZSBhbHdheXMgYWJzb2x1dGVcblx0cmV0dXJuICEhcmVzdWx0WzJdIHx8IGlzVW5jO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luMzIgOiBwb3NpeDtcbm1vZHVsZS5leHBvcnRzLnBvc2l4ID0gcG9zaXg7XG5tb2R1bGUuZXhwb3J0cy53aW4zMiA9IHdpbjMyO1xuIl19
  26506 +},{"_process":22}],"hydrolysis":[function(require,module,exports){
26421 26507 /**
26422 26508 * @license
26423 26509 * Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
... ... @@ -26448,4 +26534,4 @@ module.exports = {
26448 26534 };
26449 26535  
26450 26536 },{"./lib/analyzer":1,"./lib/ast-utils/docs":5,"./lib/ast-utils/import-parse":10,"./lib/ast-utils/js-parse":11,"./lib/ast-utils/jsdoc":12,"./lib/loader/file-loader":13,"./lib/loader/fs-resolver":14,"./lib/loader/noop-resolver":15,"./lib/loader/redirect-resolver":16,"./lib/loader/xhr-resolver":17}]},{},[])
26451   -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvYW5hbHl6ZXIuanMiLCJsaWIvYXN0LXV0aWxzL2FuYWx5emUtcHJvcGVydGllcy5qcyIsImxpYi9hc3QtdXRpbHMvYXN0LXZhbHVlLmpzIiwibGliL2FzdC11dGlscy9iZWhhdmlvci1maW5kZXIuanMiLCJsaWIvYXN0LXV0aWxzL2RvY3MuanMiLCJsaWIvYXN0LXV0aWxzL2VsZW1lbnQtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9lc3V0aWwuanMiLCJsaWIvYXN0LXV0aWxzL2ZlYXR1cmUtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9maW5kLWFsaWFzLmpzIiwibGliL2FzdC11dGlscy9pbXBvcnQtcGFyc2UuanMiLCJsaWIvYXN0LXV0aWxzL2pzLXBhcnNlLmpzIiwibGliL2FzdC11dGlscy9qc2RvYy5qcyIsImxpYi9sb2FkZXIvZmlsZS1sb2FkZXIuanMiLCJsaWIvbG9hZGVyL2ZzLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci9ub29wLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci9yZWRpcmVjdC1yZXNvbHZlci5qcyIsImxpYi9sb2FkZXIveGhyLXJlc29sdmVyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbGliL19lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcGF0aC1icm93c2VyaWZ5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZGVjb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9lbmNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3VybC91cmwuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L2lzQnVmZmVyQnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiLCJub2RlX21vZHVsZXMvZG9jdHJpbmUvbGliL2RvY3RyaW5lLmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL2xpYi90eXBlZC5qcyIsIm5vZGVfbW9kdWxlcy9kb2N0cmluZS9saWIvdXRpbGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9kb2N0cmluZS9ub2RlX21vZHVsZXMvZXN1dGlscy9saWIvYXN0LmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL25vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi9jb2RlLmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL25vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi9rZXl3b3JkLmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL25vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9kb2N0cmluZS9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kb2N0cmluZS9wYWNrYWdlLmpzb24iLCJub2RlX21vZHVsZXMvZG9tNS9kb201LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9kb2N0eXBlLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL2ZvcmVpZ25fY29udGVudC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9odG1sLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL3VuaWNvZGUuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vdXRpbHMuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9qc2RvbS9qc2RvbV9wYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9qc2RvbS9wYXJzaW5nX3VuaXQuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6ZXIuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9zaW1wbGVfYXBpL3NpbXBsZV9hcGlfcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvc2ltcGxlX2FwaS90b2tlbml6ZXJfcHJveHkuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vbG9jYXRpb25faW5mb19taXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi9uYW1lZF9lbnRpdHlfdHJpZS5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi9wcmVwcm9jZXNzb3IuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vdG9rZW5pemVyLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9hZGFwdGVycy9kZWZhdWx0LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9hZGFwdGVycy9odG1scGFyc2VyMi5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL2Zvcm1hdHRpbmdfZWxlbWVudF9saXN0LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vbG9jYXRpb25faW5mb19taXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL29wZW5fZWxlbWVudF9zdGFjay5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9lc3ByZWUuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9hc3Qtbm9kZS1mYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvYXN0LW5vZGUtdHlwZXMuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9jb21tZW50LWF0dGFjaG1lbnQuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9mZWF0dXJlcy5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL21lc3NhZ2VzLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvc3RyaW5nLW1hcC5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL3N5bnRheC5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL3Rva2VuLWluZm8uanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi94aHRtbC1lbnRpdGllcy5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvcGFja2FnZS5qc29uIiwibm9kZV9tb2R1bGVzL2VzdHJhdmVyc2UvZXN0cmF2ZXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9lc3RyYXZlcnNlL3BhY2thZ2UuanNvbiIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzl0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25kQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25PQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5ZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25zQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN2tCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbHpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzd1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakNBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3d0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdktBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzd0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy84QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3NUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcDhCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNySEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6MEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbiAoZ2xvYmFsKXtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0Jztcbi8vIGpzaGludCAtVzA3OVxudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZSB8fCByZXF1aXJlKCdlczYtcHJvbWlzZScpLlByb21pc2U7XG4vLyBqc2hpbnQgK1cwNzlcblxudmFyIGRvbTUgPSByZXF1aXJlKCdkb201Jyk7XG52YXIgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5cbnZhciBkb2NzID0gcmVxdWlyZSgnLi9hc3QtdXRpbHMvZG9jcycpO1xudmFyIEZpbGVMb2FkZXIgPSByZXF1aXJlKCcuL2xvYWRlci9maWxlLWxvYWRlcicpO1xudmFyIGltcG9ydFBhcnNlID0gcmVxdWlyZSgnLi9hc3QtdXRpbHMvaW1wb3J0LXBhcnNlJyk7XG52YXIganNQYXJzZSA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2pzLXBhcnNlJyk7XG52YXIgTm9vcFJlc29sdmVyID0gcmVxdWlyZSgnLi9sb2FkZXIvbm9vcC1yZXNvbHZlcicpO1xuXG5mdW5jdGlvbiByZWR1Y2VNZXRhZGF0YShtMSwgbTIpIHtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogIG0xLmVsZW1lbnRzLmNvbmNhdChtMi5lbGVtZW50cyksXG4gICAgZmVhdHVyZXM6ICBtMS5mZWF0dXJlcy5jb25jYXQobTIuZmVhdHVyZXMpLFxuICAgIGJlaGF2aW9yczogbTEuYmVoYXZpb3JzLmNvbmNhdChtMi5iZWhhdmlvcnMpLFxuICB9O1xufVxuXG52YXIgRU1QVFlfTUVUQURBVEEgPSB7ZWxlbWVudHM6IFtdLCBmZWF0dXJlczogW10sIGJlaGF2aW9yczogW119O1xuXG4vKipcbiAqIFBhcnNlNSdzIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyc2VkIGh0bWwgZG9jdW1lbnRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvY3VtZW50QVNUXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogZXNwcmVlJ3MgcmVwcmVzZW50YXRpb24gb2YgYSBwYXJzZWQgaHRtbCBkb2N1bWVudFxuICogQHR5cGVkZWYge09iamVjdH0gSlNBU1RcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBQYWNrYWdlIG9mIGEgcGFyc2VkIEpTIHNjcmlwdFxuICogQHR5cGVkZWYge09iamVjdH0gUGFyc2VkSlNcbiAqIEBwcm9wZXJ0eSB7SlNBU1R9IGFzdCBUaGUgc2NyaXB0J3MgQVNUXG4gKiBAcHJvcGVydHkge0RvY3VtZW50QVNUfSBzY3JpcHRFbGVtZW50IElmIGlubGluZSwgdGhlIHNjcmlwdCdzIGNvbnRhaW5pbmcgdGFnLlxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBzaW5nbGUgcG9seW1lciBlbGVtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFbGVtZW50RGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBQb2x5bWVyIGZlYXR1cmUuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGZWF0dXJlRGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBQb2x5bWVyIGJlaGF2aW9yIG1peGluLlxuICogQHR5cGVkZWYge09iamVjdH0gQmVoYXZpb3JEZXNjcmlwdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIGZvciBhbGwgZmVhdHVyZXMgYW5kIGVsZW1lbnRzIGRlZmluZWQgaW4gb25lIGRvY3VtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb2N1bWVudERlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge0FycmF5PEVsZW1lbnREZXNjcmlwdG9yPn0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIGZyb20gdGhlIGRvY3VtZW50XG4gKiBAcHJvcGVydHkge0FycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn0gIGZlYXR1cmVzIFRoZSBmZWF0dXJlcyBmcm9tIHRoZSBkb2N1bWVudFxuICogQHByb3BlcnR5IHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59ICBiZWhhdmlvcnMgVGhlIGJlaGF2aW9ycyBmcm9tIHRoZSBkb2N1bWVudFxuICovXG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIG9mIGFuIGVudGlyZSBIVE1MIGRvY3VtZW50LCBpbiBwcm9taXNlcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFuYWx5emVkRG9jdW1lbnRcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZiBUaGUgdXJsIG9mIHRoZSBkb2N1bWVudC5cbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxQYXJzZWRJbXBvcnQ+fSAgaHRtbExvYWRlZCBUaGUgcGFyc2VkIHJlcHJlc2VudGF0aW9uIG9mXG4gKiAgICAgdGhlIGRvYy4gVXNlIHRoZSBgYXN0YCBwcm9wZXJ0eSB0byBnZXQgdGhlIGZ1bGwgYHBhcnNlNWAgYXN0XG4gKlxuICogQHByb3BlcnR5IHtQcm9taXNlPEFycmF5PHN0cmluZz4+fSBkZXBzTG9hZGVkIFJlc29sdmVzIHRvIHRoZSBsaXN0IG9mIHRoaXNcbiAqICAgICBEb2N1bWVudCdzIHRyYW5zaXRpdmUgaW1wb3J0IGRlcGVuZGVuY2llc1xuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gZGVwSHJlZnMgVGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMgb2YgdGhlIGRvY3VtZW50LlxuICpcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxEb2N1bWVudERlc2NyaXB0b3I+fSBtZXRhZGF0YUxvYWRlZCBSZXNvbHZlcyB0byB0aGUgbGlzdCBvZlxuICogICAgIHRoaXMgRG9jdW1lbnQncyBpbXBvcnQgZGVwZW5kZW5jaWVzXG4gKi9cblxuLyoqXG4gKiBBIGRhdGFiYXNlIG9mIFBvbHltZXIgbWV0YWRhdGEgZGVmaW5lZCBpbiBIVE1MXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyT2YgaHlkcm9seXNpc1xuICogQHBhcmFtICB7Ym9vbGVhbn0gYXR0YWNoQVNUICBJZiB0cnVlLCBhdHRhY2ggYSBwYXJzZTUgY29tcGxpYW50IEFTVFxuICogQHBhcmFtICB7RmlsZUxvYWRlcj19IGxvYWRlciBBbiBvcHRpb25hbCBgRmlsZUxvYWRlcmAgdXNlZCB0byBsb2FkIGV4dGVybmFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1xuICovXG52YXIgQW5hbHl6ZXIgPSBmdW5jdGlvbiBBbmFseXplcihhdHRhY2hBU1QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIpIHtcbiAgdGhpcy5sb2FkZXIgPSBsb2FkZXI7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhbGwgZWxlbWVudHMgdGhlIGBBbmFseXplcmAgaGFzIG1ldGFkYXRhIGZvci5cbiAgICogQG1lbWJlciB7QXJyYXkuPEVsZW1lbnREZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZWxlbWVudHMgPSBbXTtcblxuICAvKipcbiAgICogQSB2aWV3IGludG8gYGVsZW1lbnRzYCwga2V5ZWQgYnkgdGFnIG5hbWUuXG4gICAqIEBtZW1iZXIge09iamVjdC48c3RyaW5nLEVsZW1lbnREZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZWxlbWVudHNCeVRhZ05hbWUgPSB7fTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIEFQSSBmZWF0dXJlcyBhZGRlZCB0byBgUG9seW1lci5CYXNlYCBlbmNvdW50ZXJlZCBieSB0aGVcbiAgICogYW5hbHl6ZXIuXG4gICAqIEBtZW1iZXIge0FycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZmVhdHVyZXMgPSBbXTtcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9ycyBjb2xsZWN0ZWQgYnkgdGhlIGFuYWx5c2lzIHBhc3MuXG4gICAqXG4gICAqIEBtZW1iZXIge0FycmF5PEJlaGF2aW9yRGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmJlaGF2aW9ycyA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgYmVoYXZpb3JzIGNvbGxlY3RlZCBieSB0aGUgYW5hbHlzaXMgcGFzcyBieSBuYW1lLlxuICAgKlxuICAgKiBAbWVtYmVyIHtPYmplY3Q8c3RyaW5nLEJlaGF2aW9yRGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmJlaGF2aW9yc0J5TmFtZSA9IHt9O1xuXG4gIC8qKlxuICAgKiBBIG1hcCwga2V5ZWQgYnkgYWJzb2x1dGUgcGF0aCwgb2YgRG9jdW1lbnQgbWV0YWRhdGEuXG4gICAqIEBtZW1iZXIge09iamVjdDxzdHJpbmcsQW5hbHl6ZWREb2N1bWVudD59XG4gICAqL1xuICB0aGlzLmh0bWwgPSB7fTtcblxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IHBhdGgsIG9mIEhUTUwgZG9jdW1lbnQgQVNUcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMucGFyc2VkRG9jdW1lbnRzID0ge307XG5cbiAgLyoqXG4gICAqIEEgbWFwLCBrZXllZCBieSBwYXRoLCBvZiBKUyBzY3JpcHQgQVNUcy5cbiAgICpcbiAgICogSWYgdGhlIHBhdGggaXMgYW4gSFRNTCBmaWxlIHdpdGggbXVsdGlwbGUgc2NyaXB0cywgdGhlIGVudHJ5IHdpbGwgYmUgYW4gYXJyYXkgb2Ygc2NyaXB0cy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdDxzdHJpbmcsQXJyYXk8UGFyc2VkSlM+Pn1cbiAgICovXG4gIHRoaXMucGFyc2VkU2NyaXB0cyA9IHt9O1xuXG4gIFxuXG4gIC8qKlxuICAgKiBBIG1hcCwga2V5ZWQgYnkgcGF0aCwgb2YgZG9jdW1lbnQgY29udGVudC5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMuX2NvbnRlbnQgPSB7fTtcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEFuYWx5emVyLmFuYWx6eWVgXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb2FkT3B0aW9uc1xuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbm9Bbm5vdGF0aW9ucyBXaGV0aGVyIGBhbm5vdGF0ZSgpYCBzaG91bGQgYmUgc2tpcHBlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY2xlYW4gV2hldGhlciB0aGUgZ2VuZXJhdGVkIGRlc2NyaXB0b3JzIHNob3VsZCBiZSBjbGVhbmVkXG4gKiAgICAgb2YgcmVkdW5kYW50IGRhdGEuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59IGZpbHRlciBBIHByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0XG4gKiAgICAgaW5kaWNhdGVzIHdoaWNoIGZpbGVzIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBsb2FkZXIuIEJ5IGRlZmF1bHQgYWxsXG4gKiAgICAgZmlsZXMgbm90IGxvY2F0ZWQgdW5kZXIgdGhlIGRpcm5hbWUgb2YgYGhyZWZgIHdpbGwgYmUgaWdub3JlZC5cbiAqL1xuXG4vKipcbiAqIFNob3J0aGFuZCBmb3IgdHJhbnNpdGl2ZWx5IGxvYWRpbmcgYW5kIHByb2Nlc3NpbmcgYWxsIGltcG9ydHMgYmVnaW5uaW5nIGF0XG4gKiBgaHJlZmAuXG4gKlxuICogSW4gb3JkZXIgdG8gcHJvcGVybHkgZmlsdGVyIHBhdGhzLCBgaHJlZmAgX211c3RfIGJlIGFuIGFic29sdXRlIFVSSS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHJlZiBUaGUgcm9vdCBpbXBvcnQgdG8gYmVnaW4gbG9hZGluZyBmcm9tLlxuICogQHBhcmFtIHtMb2FkT3B0aW9ucz19IG9wdGlvbnMgQW55IGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGxvYWQuXG4gKiBAcmV0dXJuIHtQcm9taXNlPEFuYWx5emVyPn0gQSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIG9uY2UgYGhyZWZgIGFuZCBpdHNcbiAqICAgICBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIGxvYWRlZCBhbmQgYW5hbHl6ZWQuXG4gKi9cbkFuYWx5emVyLmFuYWx5emUgPSBmdW5jdGlvbiBhbmFseXplKGhyZWYsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIG9wdGlvbnMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXIgfHwgX2RlZmF1bHRGaWx0ZXIoaHJlZik7XG5cbiAgdmFyIGxvYWRlciA9IG5ldyBGaWxlTG9hZGVyKCk7XG4gIHZhciBQcmltYXJ5UmVzb2x2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlci9mcy1yZXNvbHZlcicpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoJy4vbG9hZGVyL3hoci1yZXNvbHZlcicpO1xuICBsb2FkZXIuYWRkUmVzb2x2ZXIobmV3IFByaW1hcnlSZXNvbHZlcihvcHRpb25zKSk7XG4gIGxvYWRlci5hZGRSZXNvbHZlcihuZXcgTm9vcFJlc29sdmVyKHt0ZXN0OiBvcHRpb25zLmZpbHRlcn0pKTtcblxuICB2YXIgYW5hbHl6ZXIgPSBuZXcgdGhpcyhudWxsLCBsb2FkZXIpO1xuICByZXR1cm4gYW5hbHl6ZXIubWV0YWRhdGFUcmVlKGhyZWYpLnRoZW4oZnVuY3Rpb24ocm9vdCkge1xuICAgIGlmICghb3B0aW9ucy5ub0Fubm90YXRpb25zKSB7XG4gICAgICBhbmFseXplci5hbm5vdGF0ZSgpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5jbGVhbikge1xuICAgICAgYW5hbHl6ZXIuY2xlYW4oKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhbmFseXplcik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWZcbiAqIEByZXR1cm4ge2Z1bmN0aW9uKHN0cmluZyk6IGJvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIF9kZWZhdWx0RmlsdGVyKGhyZWYpIHtcbiAgLy8gRXZlcnl0aGluZyB1cCB0byB0aGUgbGFzdCBgL2Agb3IgYFxcYC5cbiAgdmFyIGJhc2UgPSBocmVmLm1hdGNoKC9eKC4qPylbXlxcL1xcXFxdKiQvKVsxXTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHVyaSkge1xuICAgIHJldHVybiB1cmkuaW5kZXhPZihiYXNlKSAhPT0gMDtcbiAgfTtcbn1cblxuQW5hbHl6ZXIucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiBsb2FkKGhyZWYpIHtcbiAgcmV0dXJuIHRoaXMubG9hZGVyLnJlcXVlc3QoaHJlZikudGhlbihmdW5jdGlvbihjb250ZW50KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5fY29udGVudFtocmVmXSA9IGNvbnRlbnQ7XG4gICAgICAgIHJlc29sdmUodGhpcy5fcGFyc2VIVE1MKGNvbnRlbnQsIGhyZWYpKTtcbiAgICAgIH0uYmluZCh0aGlzKSwgMCk7XG4gICAgfS5iaW5kKHRoaXMpKS5jYXRjaChmdW5jdGlvbihlcnIpe1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHByb2Nlc3NpbmcgZG9jdW1lbnQgYXQgXCIgKyBocmVmKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBgQW5hbHl6ZWREb2N1bWVudGAgcmVwcmVzZW50aW5nIHRoZSBwcm92aWRlZCBkb2N1bWVudFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAge3N0cmluZ30gaHRtbEltcG9ydCBSYXcgdGV4dCBvZiBhbiBIVE1MIGRvY3VtZW50XG4gKiBAcGFyYW0gIHtzdHJpbmd9IGhyZWYgICAgICAgVGhlIGRvY3VtZW50J3MgVVJMLlxuICogQHJldHVybiB7QW5hbHl6ZWREb2N1bWVudH0gICAgICAgQW4gIGBBbmFseXplZERvY3VtZW50YFxuICovXG5BbmFseXplci5wcm90b3R5cGUuX3BhcnNlSFRNTCA9IGZ1bmN0aW9uIF9wYXJzZUhUTUwoaHRtbEltcG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZikge1xuICBpZiAoaHJlZiBpbiB0aGlzLmh0bWwpIHtcbiAgICByZXR1cm4gdGhpcy5odG1sW2hyZWZdO1xuICB9XG4gIHZhciBkZXBzTG9hZGVkID0gW107XG4gIHZhciBkZXBIcmVmcyA9IFtdO1xuICB2YXIgbWV0YWRhdGFMb2FkZWQgPSBQcm9taXNlLnJlc29sdmUoRU1QVFlfTUVUQURBVEEpO1xuICB2YXIgcGFyc2VkO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IGltcG9ydFBhcnNlKGh0bWxJbXBvcnQsIGhyZWYpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIScpO1xuICAgIHRocm93IGVycjtcbiAgfVxuICB2YXIgaHRtbExvYWRlZCA9IFByb21pc2UucmVzb2x2ZShwYXJzZWQpO1xuICBpZiAocGFyc2VkLnNjcmlwdCkge1xuICAgIG1ldGFkYXRhTG9hZGVkID0gdGhpcy5fcHJvY2Vzc1NjcmlwdHMocGFyc2VkLnNjcmlwdCwgaHJlZik7XG4gIH1cbiAgdmFyIGNvbW1lbnRUZXh0ID0gcGFyc2VkLmNvbW1lbnQubWFwKGZ1bmN0aW9uKGNvbW1lbnQpe1xuICAgIHJldHVybiBkb201LmdldFRleHRDb250ZW50KGNvbW1lbnQpO1xuICB9KTtcbiAgdmFyIHBzZXVkb0VsZW1lbnRzID0gZG9jcy5wYXJzZVBzZXVkb0VsZW1lbnRzKGNvbW1lbnRUZXh0KTtcbiAgcHNldWRvRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KXtcbiAgICBlbGVtZW50LmNvbnRlbnRIcmVmID0gaHJlZjtcbiAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgdGhpcy5lbGVtZW50c0J5VGFnTmFtZVtlbGVtZW50LmlzXSA9IGVsZW1lbnQ7XG4gIH0uYmluZCh0aGlzKSk7XG4gIG1ldGFkYXRhTG9hZGVkID0gbWV0YWRhdGFMb2FkZWQudGhlbihmdW5jdGlvbihtZXRhZGF0YSl7XG4gICAgdmFyIG1ldGFkYXRhRW50cnkgPSB7XG4gICAgICBlbGVtZW50czogcHNldWRvRWxlbWVudHMsXG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICBiZWhhdmlvcnM6IFtdXG4gICAgfTtcbiAgICByZXR1cm4gW21ldGFkYXRhLCBtZXRhZGF0YUVudHJ5XS5yZWR1Y2UocmVkdWNlTWV0YWRhdGEpO1xuICB9KTtcbiAgZGVwc0xvYWRlZC5wdXNoKG1ldGFkYXRhTG9hZGVkKTtcblxuXG4gIGlmICh0aGlzLmxvYWRlcikge1xuICAgIHZhciBiYXNlVXJpID0gaHJlZjtcbiAgICBpZiAocGFyc2VkLmJhc2UubGVuZ3RoID4gMSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIk9ubHkgb25lIGJhc2UgdGFnIHBlciBkb2N1bWVudCFcIik7XG4gICAgICB0aHJvdyBcIk11bHRpcGxlIGJhc2UgdGFncyBpbiBcIiArIGhyZWY7XG4gICAgfSBlbHNlIGlmIChwYXJzZWQuYmFzZS5sZW5ndGggPT0gMSkge1xuICAgICAgdmFyIGJhc2VIcmVmID0gZG9tNS5nZXRBdHRyaWJ1dGUocGFyc2VkLmJhc2VbMF0sIFwiaHJlZlwiKTtcbiAgICAgIGlmIChiYXNlSHJlZikge1xuICAgICAgICBiYXNlSHJlZiA9IGJhc2VIcmVmICsgXCIvXCI7XG4gICAgICAgIGJhc2VVcmkgPSB1cmwucmVzb2x2ZShiYXNlVXJpLCBiYXNlSHJlZik7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlZC5pbXBvcnQuZm9yRWFjaChmdW5jdGlvbihsaW5rKSB7XG4gICAgICB2YXIgbGlua3VybCA9IGRvbTUuZ2V0QXR0cmlidXRlKGxpbmssICdocmVmJyk7XG4gICAgICBpZiAobGlua3VybCkge1xuICAgICAgICB2YXIgcmVzb2x2ZWRVcmwgPSB1cmwucmVzb2x2ZShiYXNlVXJpLCBsaW5rdXJsKTtcbiAgICAgICAgZGVwSHJlZnMucHVzaChyZXNvbHZlZFVybCk7XG4gICAgICAgIGRlcHNMb2FkZWQucHVzaCh0aGlzLl9kZXBlbmRlbmNpZXNMb2FkZWRGb3IocmVzb2x2ZWRVcmwsIGhyZWYpKTtcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpO1xuICAgIHBhcnNlZC5zdHlsZS5mb3JFYWNoKGZ1bmN0aW9uKHN0eWxlRWxlbWVudCkge1xuICAgICAgaWYgKHBvbHltZXJFeHRlcm5hbFN0eWxlKHN0eWxlRWxlbWVudCkpIHtcbiAgICAgICAgdmFyIHN0eWxlSHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKHN0eWxlRWxlbWVudCwgJ2hyZWYnKTtcbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICBzdHlsZUhyZWYgPSB1cmwucmVzb2x2ZShiYXNlVXJpLCBzdHlsZUhyZWYpO1xuICAgICAgICAgIGRlcHNMb2FkZWQucHVzaCh0aGlzLmxvYWRlci5yZXF1ZXN0KHN0eWxlSHJlZikudGhlbihmdW5jdGlvbihjb250ZW50KXtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRbc3R5bGVIcmVmXSA9IGNvbnRlbnQ7XG4gICAgICAgICAgfS5iaW5kKHRoaXMpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpO1xuICB9XG4gIGRlcHNMb2FkZWQgPSBQcm9taXNlLmFsbChkZXBzTG9hZGVkKVxuICAgICAgICAudGhlbihmdW5jdGlvbigpIHtyZXR1cm4gZGVwSHJlZnM7fSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycikge3Rocm93IGVycjt9KTtcbiAgdGhpcy5wYXJzZWREb2N1bWVudHNbaHJlZl0gPSBwYXJzZWQuYXN0O1xuICB0aGlzLmh0bWxbaHJlZl0gPSB7XG4gICAgICBocmVmOiBocmVmLFxuICAgICAgaHRtbExvYWRlZDogaHRtbExvYWRlZCxcbiAgICAgIG1ldGFkYXRhTG9hZGVkOiBtZXRhZGF0YUxvYWRlZCxcbiAgICAgIGRlcEhyZWZzOiBkZXBIcmVmcyxcbiAgICAgIGRlcHNMb2FkZWQ6IGRlcHNMb2FkZWRcbiAgfTtcbiAgcmV0dXJuIHRoaXMuaHRtbFtocmVmXTtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fcHJvY2Vzc1NjcmlwdHMgPSBmdW5jdGlvbiBfcHJvY2Vzc1NjcmlwdHMoc2NyaXB0cywgaHJlZikge1xuICB2YXIgc2NyaXB0UHJvbWlzZXMgPSBbXTtcbiAgc2NyaXB0cy5mb3JFYWNoKGZ1bmN0aW9uKHNjcmlwdCkge1xuICAgIHNjcmlwdFByb21pc2VzLnB1c2godGhpcy5fcHJvY2Vzc1NjcmlwdChzY3JpcHQsIGhyZWYpKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHNjcmlwdFByb21pc2VzKS50aGVuKGZ1bmN0aW9uKG1ldGFkYXRhTGlzdCkge1xuICAgIHJldHVybiBtZXRhZGF0YUxpc3QucmVkdWNlKHJlZHVjZU1ldGFkYXRhLCBFTVBUWV9NRVRBREFUQSk7XG4gIH0pO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9wcm9jZXNzU2NyaXB0ID0gZnVuY3Rpb24gX3Byb2Nlc3NTY3JpcHQoc2NyaXB0LCBocmVmKSB7XG4gIHZhciBzcmMgPSBkb201LmdldEF0dHJpYnV0ZShzY3JpcHQsICdzcmMnKTtcbiAgdmFyIHBhcnNlZEpzO1xuICBpZiAoIXNyYykge1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWRKcyA9IGpzUGFyc2UoKHNjcmlwdC5jaGlsZE5vZGVzLmxlbmd0aCkgPyBzY3JpcHQuY2hpbGROb2Rlc1swXS52YWx1ZSA6ICcnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgbGluZSBudW1iZXIgZm9yIHRoZSBlcnJvci5cbiAgICAgIHZhciBsaW5lID0gMDtcbiAgICAgIHZhciBjb2wgPSAwO1xuICAgICAgaWYgKHNjcmlwdC5fX293bmVyRG9jdW1lbnQgJiYgc2NyaXB0Ll9fb3duZXJEb2N1bWVudCA9PSBocmVmKSB7XG4gICAgICAgIGxpbmUgPSBzY3JpcHQuX19sb2NhdGlvbkRldGFpbC5saW5lIC0gMTtcbiAgICAgICAgY29sID0gc2NyaXB0Ll9fbG9jYXRpb25EZXRhaWwubGluZSAtIDE7XG4gICAgICB9XG4gICAgICBsaW5lICs9IGVyci5saW5lTnVtYmVyO1xuICAgICAgY29sICs9IGVyci5jb2x1bW47XG4gICAgICB2YXIgbWVzc2FnZSA9IFwiRXJyb3IgcGFyc2luZyBzY3JpcHQgaW4gXCIgKyBocmVmICsgXCIgYXQgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2w7XG4gICAgICBtZXNzYWdlICs9IFwiXFxuXCIgKyBlcnIuZGVzY3JpcHRpb247XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZEpzLmVsZW1lbnRzKSB7XG4gICAgICBwYXJzZWRKcy5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zY3JpcHRFbGVtZW50ID0gc2NyaXB0O1xuICAgICAgICBlbGVtZW50LmNvbnRlbnRIcmVmID0gaHJlZjtcbiAgICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxlbWVudC5pcyBpbiB0aGlzLmVsZW1lbnRzQnlUYWdOYW1lKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJZ25vcmluZyBkdXBsaWNhdGUgZWxlbWVudCBkZWZpbml0aW9uOiAnICsgZWxlbWVudC5pcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50c0J5VGFnTmFtZVtlbGVtZW50LmlzXSA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5mZWF0dXJlcykge1xuICAgICAgcGFyc2VkSnMuZmVhdHVyZXMuZm9yRWFjaChmdW5jdGlvbihmZWF0dXJlKXtcbiAgICAgICAgZmVhdHVyZS5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgICAgIGZlYXR1cmUuc2NyaXB0RWxlbWVudCA9IHNjcmlwdDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mZWF0dXJlcyA9IHRoaXMuZmVhdHVyZXMuY29uY2F0KHBhcnNlZEpzLmZlYXR1cmVzKTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZEpzLmJlaGF2aW9ycykge1xuICAgICAgcGFyc2VkSnMuYmVoYXZpb3JzLmZvckVhY2goZnVuY3Rpb24oYmVoYXZpb3Ipe1xuICAgICAgICBiZWhhdmlvci5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgICAgIHRoaXMuYmVoYXZpb3JzQnlOYW1lW2JlaGF2aW9yLmlzXSA9IGJlaGF2aW9yO1xuICAgICAgICB0aGlzLmJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvci5zeW1ib2xdID0gYmVoYXZpb3I7XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5iZWhhdmlvcnMgPSB0aGlzLmJlaGF2aW9ycy5jb25jYXQocGFyc2VkSnMuYmVoYXZpb3JzKTtcbiAgICB9XG4gICAgaWYgKCFPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnBhcnNlZFNjcmlwdHMsIGhyZWYpKSB7XG4gICAgICB0aGlzLnBhcnNlZFNjcmlwdHNbaHJlZl0gPSBbXTtcbiAgICB9XG4gICAgdmFyIHNjcmlwdEVsZW1lbnQ7XG4gICAgaWYgKHNjcmlwdC5fX293bmVyRG9jdW1lbnQgJiYgc2NyaXB0Ll9fb3duZXJEb2N1bWVudCA9PSBocmVmKSB7XG4gICAgICBzY3JpcHRFbGVtZW50ID0gc2NyaXB0O1xuICAgIH1cbiAgICB0aGlzLnBhcnNlZFNjcmlwdHNbaHJlZl0ucHVzaCh7XG4gICAgICBhc3Q6IHBhcnNlZEpzLnBhcnNlZFNjcmlwdCxcbiAgICAgIHNjcmlwdEVsZW1lbnQ6IHNjcmlwdEVsZW1lbnRcbiAgICB9KTtcbiAgICByZXR1cm4gcGFyc2VkSnM7XG4gIH1cbiAgaWYgKHRoaXMubG9hZGVyKSB7XG4gICAgdmFyIHJlc29sdmVkU3JjID0gdXJsLnJlc29sdmUoaHJlZiwgc3JjKTtcbiAgICByZXR1cm4gdGhpcy5sb2FkZXIucmVxdWVzdChyZXNvbHZlZFNyYykudGhlbihmdW5jdGlvbihjb250ZW50KSB7XG4gICAgICB0aGlzLl9jb250ZW50W3Jlc29sdmVkU3JjXSA9IGNvbnRlbnQ7XG4gICAgICB2YXIgcmVzb2x2ZWRTY3JpcHQgPSBPYmplY3QuY3JlYXRlKHNjcmlwdCk7XG4gICAgICByZXNvbHZlZFNjcmlwdC5jaGlsZE5vZGVzID0gW3t2YWx1ZTogY29udGVudH1dO1xuICAgICAgcmVzb2x2ZWRTY3JpcHQuYXR0cnMgPSByZXNvbHZlZFNjcmlwdC5hdHRycy5zbGljZSgpO1xuICAgICAgZG9tNS5yZW1vdmVBdHRyaWJ1dGUocmVzb2x2ZWRTY3JpcHQsICdzcmMnKTtcbiAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzU2NyaXB0KHJlc29sdmVkU2NyaXB0LCByZXNvbHZlZFNyYyk7XG4gICAgfS5iaW5kKHRoaXMpKS5jYXRjaChmdW5jdGlvbihlcnIpIHt0aHJvdyBlcnI7fSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShFTVBUWV9NRVRBREFUQSk7XG4gIH1cbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fZGVwZW5kZW5jaWVzTG9hZGVkRm9yID0gZnVuY3Rpb24gX2RlcGVuZGVuY2llc0xvYWRlZEZvcihocmVmLCByb290KSB7XG4gIHZhciBmb3VuZCA9IHt9O1xuICBpZiAocm9vdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZm91bmRbcm9vdF0gPSB0cnVlO1xuICB9XG4gIHJldHVybiB0aGlzLl9nZXREZXBlbmRlbmNpZXMoaHJlZiwgZm91bmQpLnRoZW4oZnVuY3Rpb24oZGVwcykge1xuICAgIHZhciBkZXBNZXRhZGF0YUxvYWRlZCA9IFtdO1xuICAgIHZhciBkZXBQcm9taXNlcyA9IGRlcHMubWFwKGZ1bmN0aW9uKGRlcEhyZWYpe1xuICAgICAgcmV0dXJuIHRoaXMubG9hZChkZXBIcmVmKS50aGVuKGZ1bmN0aW9uKGh0bWxNb25vbWVyKSB7XG4gICAgICAgIHJldHVybiBodG1sTW9ub21lci5tZXRhZGF0YUxvYWRlZDtcbiAgICAgIH0pO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGRlcFByb21pc2VzKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbi8qKlxuICogTGlzdCBhbGwgdGhlIGh0bWwgZGVwZW5kZW5jaWVzIGZvciB0aGUgZG9jdW1lbnQgYXQgYGhyZWZgLlxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICAgICAgICBocmVmICAgICAgVGhlIGhyZWYgdG8gZ2V0IGRlcGVuZGVuY2llcyBmb3IuXG4gKiBAcGFyYW0gIHtPYmplY3QuPHN0cmluZyxib29sZWFuPj19IGZvdW5kICAgICBBbiBvYmplY3Qga2V5ZWQgYnkgVVJMIG9mIHRoZVxuICogICAgIGFscmVhZHkgcmVzb2x2ZWQgZGVwZW5kZW5jaWVzLlxuICogQHBhcmFtICB7Ym9vbGVhbj19ICAgICAgICAgICAgICAgIHRyYW5zaXRpdmUgV2hldGhlciB0byBsb2FkIHRyYW5zaXRpdmVcbiAqICAgICBkZXBlbmRlbmNpZXMuIERlZmF1bHRzIHRvIHRydWUuXG4gKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0gIEEgbGlzdCBvZiBhbGwgdGhlIGh0bWwgZGVwZW5kZW5jaWVzLlxuICovXG5BbmFseXplci5wcm90b3R5cGUuX2dldERlcGVuZGVuY2llcyA9IGZ1bmN0aW9uIF9nZXREZXBlbmRlbmNpZXMoaHJlZiwgZm91bmQsIHRyYW5zaXRpdmUpIHtcbiAgaWYgKGZvdW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3VuZCA9IHt9O1xuICAgIGZvdW5kW2hyZWZdID0gdHJ1ZTtcbiAgfVxuICBpZiAodHJhbnNpdGl2ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJhbnNpdGl2ZSA9IHRydWU7XG4gIH1cbiAgdmFyIGRlcHMgPSBbXTtcbiAgcmV0dXJuIHRoaXMubG9hZChocmVmKS50aGVuKGZ1bmN0aW9uKGh0bWxNb25vbWVyKSB7XG4gICAgdmFyIHRyYW5zaXRpdmVEZXBzID0gW107XG4gICAgaHRtbE1vbm9tZXIuZGVwSHJlZnMuZm9yRWFjaChmdW5jdGlvbihkZXBIcmVmKXtcbiAgICAgIGlmIChmb3VuZFtkZXBIcmVmXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkZXBzLnB1c2goZGVwSHJlZik7XG4gICAgICBmb3VuZFtkZXBIcmVmXSA9IHRydWU7XG4gICAgICBpZiAodHJhbnNpdGl2ZSkge1xuICAgICAgICB0cmFuc2l0aXZlRGVwcy5wdXNoKHRoaXMuX2dldERlcGVuZGVuY2llcyhkZXBIcmVmLCBmb3VuZCkpO1xuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHRyYW5zaXRpdmVEZXBzKTtcbiAgfS5iaW5kKHRoaXMpKS50aGVuKGZ1bmN0aW9uKHRyYW5zaXRpdmVEZXBzKSB7XG4gICAgdmFyIGFsbGRlcHMgPSB0cmFuc2l0aXZlRGVwcy5yZWR1Y2UoZnVuY3Rpb24oYSwgYikge1xuICAgICAgcmV0dXJuIGEuY29uY2F0KGIpO1xuICAgIH0sIFtdKS5jb25jYXQoZGVwcyk7XG4gICAgcmV0dXJuIGFsbGRlcHM7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gbWF0Y2hlc0RvY3VtZW50Rm9sZGVyKGRlc2NyaXB0b3IsIGhyZWYpIHtcbiAgaWYgKCFkZXNjcmlwdG9yLmNvbnRlbnRIcmVmKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBkZXNjcmlwdG9yRG9jID0gdXJsLnBhcnNlKGRlc2NyaXB0b3IuY29udGVudEhyZWYpO1xuICBpZiAoIWRlc2NyaXB0b3JEb2MgfHwgIWRlc2NyaXB0b3JEb2MucGF0aG5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHNlYXJjaERvYyA9IHVybC5wYXJzZShocmVmKTtcbiAgaWYgKCFzZWFyY2hEb2MgfHwgIXNlYXJjaERvYy5wYXRobmFtZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgc2VhcmNoUGF0aCA9IHNlYXJjaERvYy5wYXRobmFtZTtcbiAgdmFyIGxhc3RTbGFzaCA9IHNlYXJjaFBhdGgubGFzdEluZGV4T2YoXCIvXCIpO1xuICBpZiAobGFzdFNsYXNoID4gMCkge1xuICAgIHNlYXJjaFBhdGggPSBzZWFyY2hQYXRoLnNsaWNlKDAsIGxhc3RTbGFzaCk7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3JEb2MucGF0aG5hbWUuaW5kZXhPZihzZWFyY2hQYXRoKSA9PT0gMDtcbn1cblxuQW5hbHl6ZXIucHJvdG90eXBlLmVsZW1lbnRzRm9yRm9sZGVyID0gZnVuY3Rpb24gZWxlbWVudHNGb3JGb2xkZXIoaHJlZikge1xuICByZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oZWxlbWVudCl7XG4gICAgcmV0dXJuIG1hdGNoZXNEb2N1bWVudEZvbGRlcihlbGVtZW50LCBocmVmKTtcbiAgfSk7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuYmVoYXZpb3JzRm9yRm9sZGVyID0gZnVuY3Rpb24gYmVoYXZpb3JzRm9yRm9sZGVyKGhyZWYpIHtcbiAgcmV0dXJuIHRoaXMuYmVoYXZpb3JzLmZpbHRlcihmdW5jdGlvbihiZWhhdmlvcil7XG4gICAgcmV0dXJuIG1hdGNoZXNEb2N1bWVudEZvbGRlcihiZWhhdmlvciwgaHJlZik7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgUE9KTyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW1wb3J0XG4gKiB0cmVlLCBpbiBhIGZvcm1hdCB0aGF0IG1haW50YWlucyB0aGUgb3JkZXJpbmcgb2YgdGhlIEhUTUwgaW1wb3J0cyBzcGVjLlxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgdGhlIGltcG9ydCB0byBnZXQgbWV0YWRhdGEgZm9yLlxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLm1ldGFkYXRhVHJlZSA9IGZ1bmN0aW9uIG1ldGFkYXRhVHJlZShocmVmKSB7XG4gIHJldHVybiB0aGlzLmxvYWQoaHJlZikudGhlbihmdW5jdGlvbihtb25vbWVyKXtcbiAgICB2YXIgbG9hZGVkSHJlZnMgPSB7fTtcbiAgICBsb2FkZWRIcmVmc1tocmVmXSA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhVHJlZShtb25vbWVyLCBsb2FkZWRIcmVmcyk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX21ldGFkYXRhVHJlZSA9IGZ1bmN0aW9uIF9tZXRhZGF0YVRyZWUoaHRtbE1vbm9tZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkSHJlZnMpIHtcbiAgaWYgKGxvYWRlZEhyZWZzID09PSB1bmRlZmluZWQpIHtcbiAgICBsb2FkZWRIcmVmcyA9IHt9O1xuICB9XG4gIHJldHVybiBodG1sTW9ub21lci5tZXRhZGF0YUxvYWRlZC50aGVuKGZ1bmN0aW9uKG1ldGFkYXRhKSB7XG4gICAgbWV0YWRhdGEgPSB7XG4gICAgICBlbGVtZW50czogbWV0YWRhdGEuZWxlbWVudHMsXG4gICAgICBmZWF0dXJlczogbWV0YWRhdGEuZmVhdHVyZXMsXG4gICAgICBocmVmOiBodG1sTW9ub21lci5ocmVmXG4gICAgfTtcbiAgICByZXR1cm4gaHRtbE1vbm9tZXIuZGVwc0xvYWRlZC50aGVuKGZ1bmN0aW9uKGhyZWZzKSB7XG4gICAgICB2YXIgZGVwTWV0YWRhdGEgPSBbXTtcbiAgICAgIGhyZWZzLmZvckVhY2goZnVuY3Rpb24oaHJlZikge1xuICAgICAgICB2YXIgbWV0YWRhdGFQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgICAgICBpZiAoZGVwTWV0YWRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIG1ldGFkYXRhUHJvbWlzZSA9IGRlcE1ldGFkYXRhW2RlcE1ldGFkYXRhLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIG1ldGFkYXRhUHJvbWlzZSA9IG1ldGFkYXRhUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICghbG9hZGVkSHJlZnNbaHJlZl0pIHtcbiAgICAgICAgICAgIGxvYWRlZEhyZWZzW2hyZWZdID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVRyZWUodGhpcy5odG1sW2hyZWZdLCBsb2FkZWRIcmVmcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgZGVwTWV0YWRhdGEucHVzaChtZXRhZGF0YVByb21pc2UpO1xuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChkZXBNZXRhZGF0YSkudGhlbihmdW5jdGlvbihpbXBvcnRNZXRhZGF0YSkge1xuICAgICAgICBtZXRhZGF0YS5pbXBvcnRzID0gaW1wb3J0TWV0YWRhdGE7XG4gICAgICAgIHJldHVybiBodG1sTW9ub21lci5odG1sTG9hZGVkLnRoZW4oZnVuY3Rpb24ocGFyc2VkSHRtbCkge1xuICAgICAgICAgIG1ldGFkYXRhLmh0bWwgPSBwYXJzZWRIdG1sO1xuICAgICAgICAgIGlmIChtZXRhZGF0YS5lbGVtZW50cykge1xuICAgICAgICAgICAgbWV0YWRhdGEuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICAgIGF0dGFjaERvbU1vZHVsZShwYXJzZWRIdG1sLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbmZ1bmN0aW9uIG1hdGNoaW5nSW1wb3J0KGltcG9ydEVsZW1lbnQpIHtcbiAgdmFyIG1hdGNoZXNUYWcgPSBkb201LnByZWRpY2F0ZXMuaGFzVGFnTmFtZShpbXBvcnRFbGVtZW50LnRhZ05hbWUpO1xuICB2YXIgbWF0Y2hlc0hyZWYgPSBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCdocmVmJywgZG9tNS5nZXRBdHRyaWJ1dGUoaW1wb3J0RWxlbWVudCwgJ2hyZWYnKSk7XG4gIHZhciBtYXRjaGVzUmVsID0gZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgncmVsJywgZG9tNS5nZXRBdHRyaWJ1dGUoaW1wb3J0RWxlbWVudCwgJ3JlbCcpKTtcbiAgcmV0dXJuIGRvbTUucHJlZGljYXRlcy5BTkQobWF0Y2hlc1RhZywgbWF0Y2hlc0hyZWYsIG1hdGNoZXNSZWwpO1xufVxuXG4vLyBUT0RPKGFqbyk6IFJlZmFjdG9yIG91dCBvZiB2dWxjYW5pemUgaW50byBkb201LlxudmFyIHBvbHltZXJFeHRlcm5hbFN0eWxlID0gZG9tNS5wcmVkaWNhdGVzLkFORChcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc1RhZ05hbWUoJ2xpbmsnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgncmVsJywgJ2ltcG9ydCcpLFxuICBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCd0eXBlJywgJ2NzcycpXG4pO1xuXG52YXIgZXh0ZXJuYWxTY3JpcHQgPSBkb201LnByZWRpY2F0ZXMuQU5EKFxuICBkb201LnByZWRpY2F0ZXMuaGFzVGFnTmFtZSgnc2NyaXB0JyksXG4gIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyKCdzcmMnKVxuKTtcblxudmFyIGlzSHRtbEltcG9ydE5vZGUgPSBkb201LnByZWRpY2F0ZXMuQU5EKFxuICBkb201LnByZWRpY2F0ZXMuaGFzVGFnTmFtZSgnbGluaycpLFxuICBkb201LnByZWRpY2F0ZXMuaGFzQXR0clZhbHVlKCdyZWwnLCAnaW1wb3J0JyksXG4gIGRvbTUucHJlZGljYXRlcy5OT1QoXG4gICAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgndHlwZScsICdjc3MnKVxuICApXG4pO1xuXG5BbmFseXplci5wcm90b3R5cGUuX2lubGluZVN0eWxlcyA9IGZ1bmN0aW9uIF9pbmxpbmVTdHlsZXMoYXN0LCBocmVmKSB7XG4gIHZhciBjc3NMaW5rcyA9IGRvbTUucXVlcnlBbGwoYXN0LCBwb2x5bWVyRXh0ZXJuYWxTdHlsZSk7XG4gIGNzc0xpbmtzLmZvckVhY2goZnVuY3Rpb24obGluaykge1xuICAgIHZhciBsaW5rSHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKGxpbmssICdocmVmJyk7XG4gICAgdmFyIHVyaSA9IHVybC5yZXNvbHZlKGhyZWYsIGxpbmtIcmVmKTtcbiAgICB2YXIgY29udGVudCA9IHRoaXMuX2NvbnRlbnRbdXJpXTtcbiAgICB2YXIgc3R5bGUgPSBkb201LmNvbnN0cnVjdG9ycy5lbGVtZW50KCdzdHlsZScpO1xuICAgIGRvbTUuc2V0VGV4dENvbnRlbnQoc3R5bGUsICdcXG4nICsgY29udGVudCArICdcXG4nKTtcbiAgICBkb201LnJlcGxhY2UobGluaywgc3R5bGUpO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gY3NzTGlua3MubGVuZ3RoID4gMDtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5faW5saW5lU2NyaXB0cyA9IGZ1bmN0aW9uIF9pbmxpbmVTY3JpcHRzKGFzdCwgaHJlZikge1xuICB2YXIgc2NyaXB0cyA9IGRvbTUucXVlcnlBbGwoYXN0LCBleHRlcm5hbFNjcmlwdCk7XG4gIHNjcmlwdHMuZm9yRWFjaChmdW5jdGlvbihzY3JpcHQpIHtcbiAgICB2YXIgc2NyaXB0SHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKHNjcmlwdCwgJ3NyYycpO1xuICAgIHZhciB1cmkgPSB1cmwucmVzb2x2ZShocmVmLCBzY3JpcHRIcmVmKTtcbiAgICB2YXIgY29udGVudCA9IHRoaXMuX2NvbnRlbnRbdXJpXTtcbiAgICB2YXIgaW5saW5lZCA9IGRvbTUuY29uc3RydWN0b3JzLmVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIGRvbTUuc2V0VGV4dENvbnRlbnQoaW5saW5lZCwgJ1xcbicgKyBjb250ZW50ICsgJ1xcbicpO1xuICAgIGRvbTUucmVwbGFjZShzY3JpcHQsIGlubGluZWQpO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gc2NyaXB0cy5sZW5ndGggPiAwO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9pbmxpbmVJbXBvcnRzID0gZnVuY3Rpb24gX2lubGluZUltcG9ydHMoYXN0LCBocmVmLCBsb2FkZWQpIHtcbiAgdmFyIGltcG9ydHMgPSBkb201LnF1ZXJ5QWxsKGFzdCwgaXNIdG1sSW1wb3J0Tm9kZSk7XG4gIGltcG9ydHMuZm9yRWFjaChmdW5jdGlvbihodG1sSW1wb3J0KSB7XG4gICAgdmFyIGltcG9ydEhyZWYgPSBkb201LmdldEF0dHJpYnV0ZShodG1sSW1wb3J0LCAnaHJlZicpO1xuICAgIHZhciB1cmkgPSB1cmwucmVzb2x2ZShocmVmLCBpbXBvcnRIcmVmKTtcbiAgICBpZiAobG9hZGVkW3VyaV0pIHtcbiAgICAgIGRvbTUucmVtb3ZlKGh0bWxJbXBvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgY29udGVudCA9IHRoaXMuZ2V0TG9hZGVkQXN0KHVyaSwgbG9hZGVkKTtcbiAgICBkb201LnJlcGxhY2UoaHRtbEltcG9ydCwgY29udGVudCk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBpbXBvcnRzLmxlbmd0aCA+IDA7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHJlc29sdmluZyB0byBhIGZvcm0gb2YgdGhlIEFTVCB3aXRoIGFsbCBsaW5rcyByZXBsYWNlZFxuICogd2l0aCB0aGUgZG9jdW1lbnQgdGhleSBsaW5rIHRvLiAuY3NzIGFuZCAuc2NyaXB0IGZpbGVzIGJlY29tZSAmbHQ7c3R5bGUmZ3Q7IGFuZFxuICogJmx0O3NjcmlwdCZndDssIHJlc3BlY3RpdmVseS5cbiAqXG4gKiBUaGUgZWxlbWVudHMgaW4gdGhlIGxvYWRlZCBkb2N1bWVudCBhcmUgdW5tb2RpZmllZCBmcm9tIHRoZWlyIG9yaWdpbmFsXG4gKiBkb2N1bWVudHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgVGhlIGRvY3VtZW50IHRvIGxvYWQuXG4gKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLGJvb2xlYW4+PX0gbG9hZGVkIEFuIG9iamVjdCBrZXllZCBieSBhbHJlYWR5IGxvYWRlZCBkb2N1bWVudHMuXG4gKiBAcmV0dXJuIHtQcm9taXNlLjxEb2N1bWVudEFTVD59XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5nZXRMb2FkZWRBc3QgPSBmdW5jdGlvbiBnZXRMb2FkZWRBc3QoaHJlZiwgbG9hZGVkKSB7XG4gIGlmICghbG9hZGVkKSB7XG4gICAgbG9hZGVkID0ge307XG4gIH1cbiAgbG9hZGVkW2hyZWZdID0gdHJ1ZTtcbiAgdmFyIHBhcnNlZERvY3VtZW50ID0gdGhpcy5wYXJzZWREb2N1bWVudHNbaHJlZl07XG4gIHZhciBhbmFseXplZERvY3VtZW50ID0gdGhpcy5odG1sW2hyZWZdO1xuICB2YXIgYXN0Q29weSA9IGRvbTUucGFyc2UoZG9tNS5zZXJpYWxpemUocGFyc2VkRG9jdW1lbnQpKTtcbiAgLy8gV2hlbmV2ZXIgd2UgaW5saW5lIHNvbWV0aGluZywgcmVzZXQgaW5saW5lZCB0byB0cnVlIHRvIGtub3cgdGhhdCBhbm9hdGhlclxuICAvLyBpbmxpbmluZyBwYXNzIGlzIG5lZWRlZDtcbiAgdGhpcy5faW5saW5lU3R5bGVzKGFzdENvcHksIGhyZWYpO1xuICB0aGlzLl9pbmxpbmVTY3JpcHRzKGFzdENvcHksIGhyZWYpO1xuICB0aGlzLl9pbmxpbmVJbXBvcnRzKGFzdENvcHksIGhyZWYsIGxvYWRlZCk7XG4gIHJldHVybiBhc3RDb3B5O1xufTtcblxuLyoqXG4gKiBDYWxscyBgZG9tNS5ub2RlV2Fsa0FsbGAgb24gZWFjaCBkb2N1bWVudCB0aGF0IGBBbmF5emxlcmAgaGFzIGxhb2RlZC5cbiAqIEBwYXJhbSAge09iamVjdH0gcHJlZGljYXRlIEEgZG9tNSBwcmVkaWNhdGUuXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5ub2RlV2Fsa0RvY3VtZW50cyA9IGZ1bmN0aW9uIG5vZGVXYWxrRG9jdW1lbnRzKHByZWRpY2F0ZSkge1xuICBmb3IgKHZhciBocmVmIGluIHRoaXMucGFyc2VkRG9jdW1lbnRzKSB7XG4gICAgdmFyIG1hdGNoID0gZG9tNS5ub2RlV2Fsayh0aGlzLnBhcnNlZERvY3VtZW50c1tocmVmXSwgcHJlZGljYXRlKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIENhbGxzIGBkb201Lm5vZGVXYWxrQWxsYCBvbiBlYWNoIGRvY3VtZW50IHRoYXQgYEFuYXl6bGVyYCBoYXMgbGFvZGVkLlxuICogQHBhcmFtICB7T2JqZWN0fSBwcmVkaWNhdGUgQSBkb201IHByZWRpY2F0ZS5cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLm5vZGVXYWxrQWxsRG9jdW1lbnRzID0gZnVuY3Rpb24gbm9kZVdhbGtEb2N1bWVudHMocHJlZGljYXRlKSB7XG4gIHZhciByZXN1bHRzID0gW107XG4gIGZvciAodmFyIGhyZWYgaW4gdGhpcy5wYXJzZWREb2N1bWVudHMpIHtcbiAgICB2YXIgbmV3Tm9kZXMgPSBkb201Lm5vZGVXYWxrQWxsKHRoaXMucGFyc2VkRG9jdW1lbnRzW2hyZWZdLCBwcmVkaWNhdGUpO1xuICAgIHJlc3VsdHMgPSByZXN1bHRzLmNvbmNhdChuZXdOb2Rlcyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKiogQW5ub3RhdGVzIGFsbCBsb2FkZWQgbWV0YWRhdGEgd2l0aCBpdHMgZG9jdW1lbnRhdGlvbi4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5hbm5vdGF0ZSA9IGZ1bmN0aW9uIGFubm90YXRlKCkge1xuICBpZiAodGhpcy5mZWF0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGZlYXR1cmVFbCA9IGRvY3MuZmVhdHVyZUVsZW1lbnQodGhpcy5mZWF0dXJlcyk7XG4gICAgdGhpcy5lbGVtZW50cy51bnNoaWZ0KGZlYXR1cmVFbCk7XG4gICAgdGhpcy5lbGVtZW50c0J5VGFnTmFtZVtmZWF0dXJlRWwuaXNdID0gZmVhdHVyZUVsO1xuICB9XG4gIHZhciBiZWhhdmlvcnNCeU5hbWUgPSB0aGlzLmJlaGF2aW9yc0J5TmFtZTtcbiAgdmFyIGVsZW1lbnRIZWxwZXIgPSBmdW5jdGlvbihkZXNjcmlwdG9yKXtcbiAgICBkb2NzLmFubm90YXRlRWxlbWVudChkZXNjcmlwdG9yLCBiZWhhdmlvcnNCeU5hbWUpO1xuICB9O1xuICB0aGlzLmVsZW1lbnRzLmZvckVhY2goZWxlbWVudEhlbHBlcik7XG4gIHRoaXMuYmVoYXZpb3JzLmZvckVhY2goZWxlbWVudEhlbHBlcik7IC8vIFNhbWUgc2hhcGUuXG4gIHRoaXMuYmVoYXZpb3JzLmZvckVhY2goZnVuY3Rpb24oYmVoYXZpb3Ipe1xuICAgIGlmIChiZWhhdmlvci5pcyAhPT0gYmVoYXZpb3Iuc3ltYm9sICYmIGJlaGF2aW9yLnN5bWJvbCkge1xuICAgICAgdGhpcy5iZWhhdmlvcnNCeU5hbWVbYmVoYXZpb3Iuc3ltYm9sXSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5mdW5jdGlvbiBhdHRhY2hEb21Nb2R1bGUocGFyc2VkSW1wb3J0LCBlbGVtZW50KSB7XG4gIHZhciBkb21Nb2R1bGVzID0gcGFyc2VkSW1wb3J0Wydkb20tbW9kdWxlJ107XG4gIGZvciAodmFyIGkgPSAwLCBkb21Nb2R1bGU7IGkgPCBkb21Nb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZG9tTW9kdWxlID0gZG9tTW9kdWxlc1tpXTtcbiAgICBpZiAoZG9tNS5nZXRBdHRyaWJ1dGUoZG9tTW9kdWxlLCAnaWQnKSA9PT0gZWxlbWVudC5pcykge1xuICAgICAgZWxlbWVudC5kb21Nb2R1bGUgPSBkb21Nb2R1bGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbi8qKiBSZW1vdmVzIHJlZHVuZGFudCBwcm9wZXJ0aWVzIGZyb20gdGhlIGNvbGxlY3RlZCBkZXNjcmlwdG9ycy4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5jbGVhbiA9IGZ1bmN0aW9uIGNsZWFuKCkge1xuICB0aGlzLmVsZW1lbnRzLmZvckVhY2goZG9jcy5jbGVhbkVsZW1lbnQpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBbmFseXplcjtcblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbXhwWWk5aGJtRnNlWHBsY2k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFQnNhV05sYm5ObFhHNGdLaUJEYjNCNWNtbG5hSFFnS0dNcElESXdNVFVnVkdobElGQnZiSGx0WlhJZ1VISnZhbVZqZENCQmRYUm9iM0p6TGlCQmJHd2djbWxuYUhSeklISmxjMlZ5ZG1Wa0xseHVJQ29nVkdocGN5QmpiMlJsSUcxaGVTQnZibXg1SUdKbElIVnpaV1FnZFc1a1pYSWdkR2hsSUVKVFJDQnpkSGxzWlNCc2FXTmxibk5sSUdadmRXNWtJR0YwSUdoMGRIQTZMeTl3YjJ4NWJXVnlMbWRwZEdoMVlpNXBieTlNU1VORlRsTkZMblI0ZEZ4dUlDb2dWR2hsSUdOdmJYQnNaWFJsSUhObGRDQnZaaUJoZFhSb2IzSnpJRzFoZVNCaVpTQm1iM1Z1WkNCaGRDQm9kSFJ3T2k4dmNHOXNlVzFsY2k1bmFYUm9kV0l1YVc4dlFWVlVTRTlTVXk1MGVIUmNiaUFxSUZSb1pTQmpiMjF3YkdWMFpTQnpaWFFnYjJZZ1kyOXVkSEpwWW5WMGIzSnpJRzFoZVNCaVpTQm1iM1Z1WkNCaGRDQm9kSFJ3T2k4dmNHOXNlVzFsY2k1bmFYUm9kV0l1YVc4dlEwOU9WRkpKUWxWVVQxSlRMblI0ZEZ4dUlDb2dRMjlrWlNCa2FYTjBjbWxpZFhSbFpDQmllU0JIYjI5bmJHVWdZWE1nY0dGeWRDQnZaaUIwYUdVZ2NHOXNlVzFsY2lCd2NtOXFaV04wSUdseklHRnNjMjljYmlBcUlITjFZbXBsWTNRZ2RHOGdZVzRnWVdSa2FYUnBiMjVoYkNCSlVDQnlhV2RvZEhNZ1ozSmhiblFnWm05MWJtUWdZWFFnYUhSMGNEb3ZMM0J2YkhsdFpYSXVaMmwwYUhWaUxtbHZMMUJCVkVWT1ZGTXVkSGgwWEc0Z0tpOWNiaTh2SUdwemFHbHVkQ0J1YjJSbE9pQjBjblZsWEc0bmRYTmxJSE4wY21samRDYzdYRzR2THlCcWMyaHBiblFnTFZjd056bGNiblpoY2lCUWNtOXRhWE5sSUQwZ1oyeHZZbUZzTGxCeWIyMXBjMlVnZkh3Z2NtVnhkV2x5WlNnblpYTTJMWEJ5YjIxcGMyVW5LUzVRY205dGFYTmxPMXh1THk4Z2FuTm9hVzUwSUN0WE1EYzVYRzVjYm5aaGNpQmtiMjAxSUQwZ2NtVnhkV2x5WlNnblpHOXROU2NwTzF4dWRtRnlJSFZ5YkNBOUlISmxjWFZwY21Vb0ozVnliQ2NwTzF4dVhHNTJZWElnWkc5amN5QTlJSEpsY1hWcGNtVW9KeTR2WVhOMExYVjBhV3h6TDJSdlkzTW5LVHRjYm5aaGNpQkdhV3hsVEc5aFpHVnlJRDBnY21WeGRXbHlaU2duTGk5c2IyRmtaWEl2Wm1sc1pTMXNiMkZrWlhJbktUdGNiblpoY2lCcGJYQnZjblJRWVhKelpTQTlJSEpsY1hWcGNtVW9KeTR2WVhOMExYVjBhV3h6TDJsdGNHOXlkQzF3WVhKelpTY3BPMXh1ZG1GeUlHcHpVR0Z5YzJVZ1BTQnlaWEYxYVhKbEtDY3VMMkZ6ZEMxMWRHbHNjeTlxY3kxd1lYSnpaU2NwTzF4dWRtRnlJRTV2YjNCU1pYTnZiSFpsY2lBOUlISmxjWFZwY21Vb0p5NHZiRzloWkdWeUwyNXZiM0F0Y21WemIyeDJaWEluS1R0Y2JseHVablZ1WTNScGIyNGdjbVZrZFdObFRXVjBZV1JoZEdFb2JURXNJRzB5S1NCN1hHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ1pXeGxiV1Z1ZEhNNklDQnRNUzVsYkdWdFpXNTBjeTVqYjI1allYUW9iVEl1Wld4bGJXVnVkSE1wTEZ4dUlDQWdJR1psWVhSMWNtVnpPaUFnYlRFdVptVmhkSFZ5WlhNdVkyOXVZMkYwS0cweUxtWmxZWFIxY21WektTeGNiaUFnSUNCaVpXaGhkbWx2Y25NNklHMHhMbUpsYUdGMmFXOXljeTVqYjI1allYUW9iVEl1WW1Wb1lYWnBiM0p6S1N4Y2JpQWdmVHRjYm4xY2JseHVkbUZ5SUVWTlVGUlpYMDFGVkVGRVFWUkJJRDBnZTJWc1pXMWxiblJ6T2lCYlhTd2dabVZoZEhWeVpYTTZJRnRkTENCaVpXaGhkbWx2Y25NNklGdGRmVHRjYmx4dUx5b3FYRzRnS2lCUVlYSnpaVFVuY3lCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2WmlCaElIQmhjbk5sWkNCb2RHMXNJR1J2WTNWdFpXNTBYRzRnS2lCQWRIbHdaV1JsWmlCN1QySnFaV04wZlNCRWIyTjFiV1Z1ZEVGVFZGeHVJQ29nUUcxbGJXSmxjbTltSUdoNVpISnZiSGx6YVhOY2JpQXFMMXh1WEc0dktpcGNiaUFxSUdWemNISmxaU2R6SUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUdFZ2NHRnljMlZrSUdoMGJXd2daRzlqZFcxbGJuUmNiaUFxSUVCMGVYQmxaR1ZtSUh0UFltcGxZM1I5SUVwVFFWTlVYRzRnS2lCQWJXVnRZbVZ5YjJZZ2FIbGtjbTlzZVhOcGMxeHVJQ292WEc1Y2JpOHFLbHh1SUNvZ1VHRmphMkZuWlNCdlppQmhJSEJoY25ObFpDQktVeUJ6WTNKcGNIUmNiaUFxSUVCMGVYQmxaR1ZtSUh0UFltcGxZM1I5SUZCaGNuTmxaRXBUWEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMHBUUVZOVWZTQmhjM1FnVkdobElITmpjbWx3ZENkeklFRlRWRnh1SUNvZ1FIQnliM0JsY25SNUlIdEViMk4xYldWdWRFRlRWSDBnYzJOeWFYQjBSV3hsYldWdWRDQkpaaUJwYm14cGJtVXNJSFJvWlNCelkzSnBjSFFuY3lCamIyNTBZV2x1YVc1bklIUmhaeTVjYmlBcUlFQnRaVzFpWlhKdlppQm9lV1J5YjJ4NWMybHpYRzRnS2k5Y2JseHVMeW9xWEc0Z0tpQlVhR1VnYldWMFlXUmhkR0VnWm05eUlHRWdjMmx1WjJ4bElIQnZiSGx0WlhJZ1pXeGxiV1Z1ZEZ4dUlDb2dRSFI1Y0dWa1pXWWdlMDlpYW1WamRIMGdSV3hsYldWdWRFUmxjMk55YVhCMGIzSmNiaUFxSUVCdFpXMWlaWEp2WmlCb2VXUnliMng1YzJselhHNGdLaTljYmx4dUx5b3FYRzRnS2lCVWFHVWdiV1YwWVdSaGRHRWdabTl5SUdFZ1VHOXNlVzFsY2lCbVpXRjBkWEpsTGx4dUlDb2dRSFI1Y0dWa1pXWWdlMDlpYW1WamRIMGdSbVZoZEhWeVpVUmxjMk55YVhCMGIzSmNiaUFxSUVCdFpXMWlaWEp2WmlCb2VXUnliMng1YzJselhHNGdLaTljYmx4dUx5b3FYRzRnS2lCVWFHVWdiV1YwWVdSaGRHRWdabTl5SUdFZ1VHOXNlVzFsY2lCaVpXaGhkbWx2Y2lCdGFYaHBiaTVjYmlBcUlFQjBlWEJsWkdWbUlIdFBZbXBsWTNSOUlFSmxhR0YyYVc5eVJHVnpZM0pwY0hSdmNseHVJQ29nUUcxbGJXSmxjbTltSUdoNVpISnZiSGx6YVhOY2JpQXFMMXh1WEc0dktpcGNiaUFxSUZSb1pTQnRaWFJoWkdGMFlTQm1iM0lnWVd4c0lHWmxZWFIxY21WeklHRnVaQ0JsYkdWdFpXNTBjeUJrWldacGJtVmtJR2x1SUc5dVpTQmtiMk4xYldWdWRGeHVJQ29nUUhSNWNHVmtaV1lnZTA5aWFtVmpkSDBnUkc5amRXMWxiblJFWlhOamNtbHdkRzl5WEc0Z0tpQkFiV1Z0WW1WeWIyWWdhSGxrY205c2VYTnBjMXh1SUNvZ1FIQnliM0JsY25SNUlIdEJjbkpoZVR4RmJHVnRaVzUwUkdWelkzSnBjSFJ2Y2o1OUlHVnNaVzFsYm5SeklGUm9aU0JsYkdWdFpXNTBjeUJtY205dElIUm9aU0JrYjJOMWJXVnVkRnh1SUNvZ1FIQnliM0JsY25SNUlIdEJjbkpoZVR4R1pXRjBkWEpsUkdWelkzSnBjSFJ2Y2o1OUlDQm1aV0YwZFhKbGN5QlVhR1VnWm1WaGRIVnlaWE1nWm5KdmJTQjBhR1VnWkc5amRXMWxiblJjYmlBcUlFQndjbTl3WlhKMGVTQjdRWEp5WVhrOFJtVmhkSFZ5WlVSbGMyTnlhWEIwYjNJK2ZTQWdZbVZvWVhacGIzSnpJRlJvWlNCaVpXaGhkbWx2Y25NZ1puSnZiU0IwYUdVZ1pHOWpkVzFsYm5SY2JpQXFMMXh1WEc0dktpcGNiaUFxSUZSb1pTQnRaWFJoWkdGMFlTQnZaaUJoYmlCbGJuUnBjbVVnU0ZSTlRDQmtiMk4xYldWdWRDd2dhVzRnY0hKdmJXbHpaWE11WEc0Z0tpQkFkSGx3WldSbFppQjdUMkpxWldOMGZTQkJibUZzZVhwbFpFUnZZM1Z0Wlc1MFhHNGdLaUJBYldWdFltVnliMllnYUhsa2NtOXNlWE5wYzF4dUlDb2dRSEJ5YjNCbGNuUjVJSHR6ZEhKcGJtZDlJR2h5WldZZ1ZHaGxJSFZ5YkNCdlppQjBhR1VnWkc5amRXMWxiblF1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMUJ5YjIxcGMyVThVR0Z5YzJWa1NXMXdiM0owUG4wZ0lHaDBiV3hNYjJGa1pXUWdWR2hsSUhCaGNuTmxaQ0J5WlhCeVpYTmxiblJoZEdsdmJpQnZabHh1SUNvZ0lDQWdJSFJvWlNCa2IyTXVJRlZ6WlNCMGFHVWdZR0Z6ZEdBZ2NISnZjR1Z5ZEhrZ2RHOGdaMlYwSUhSb1pTQm1kV3hzSUdCd1lYSnpaVFZnSUdGemRGeHVJQ3BjYmlBcUlFQndjbTl3WlhKMGVTQjdVSEp2YldselpUeEJjbkpoZVR4emRISnBibWMrUG4wZ1pHVndjMHh2WVdSbFpDQlNaWE52YkhabGN5QjBieUIwYUdVZ2JHbHpkQ0J2WmlCMGFHbHpYRzRnS2lBZ0lDQWdSRzlqZFcxbGJuUW5jeUIwY21GdWMybDBhWFpsSUdsdGNHOXlkQ0JrWlhCbGJtUmxibU5wWlhOY2JpQXFYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UwRnljbUY1UEhOMGNtbHVaejU5SUdSbGNFaHlaV1p6SUZSb1pTQmthWEpsWTNRZ1pHVndaVzVrWlc1amFXVnpJRzltSUhSb1pTQmtiMk4xYldWdWRDNWNiaUFxWEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMUJ5YjIxcGMyVThSRzlqZFcxbGJuUkVaWE5qY21sd2RHOXlQbjBnYldWMFlXUmhkR0ZNYjJGa1pXUWdVbVZ6YjJ4MlpYTWdkRzhnZEdobElHeHBjM1FnYjJaY2JpQXFJQ0FnSUNCMGFHbHpJRVJ2WTNWdFpXNTBKM01nYVcxd2IzSjBJR1JsY0dWdVpHVnVZMmxsYzF4dUlDb3ZYRzVjYmk4cUtseHVJQ29nUVNCa1lYUmhZbUZ6WlNCdlppQlFiMng1YldWeUlHMWxkR0ZrWVhSaElHUmxabWx1WldRZ2FXNGdTRlJOVEZ4dUlDcGNiaUFxSUVCamIyNXpkSEoxWTNSdmNseHVJQ29nUUcxbGJXSmxjazltSUdoNVpISnZiSGx6YVhOY2JpQXFJRUJ3WVhKaGJTQWdlMkp2YjJ4bFlXNTlJR0YwZEdGamFFRlRWQ0FnU1dZZ2RISjFaU3dnWVhSMFlXTm9JR0VnY0dGeWMyVTFJR052YlhCc2FXRnVkQ0JCVTFSY2JpQXFJRUJ3WVhKaGJTQWdlMFpwYkdWTWIyRmtaWEk5ZlNCc2IyRmtaWElnUVc0Z2IzQjBhVzl1WVd3Z1lFWnBiR1ZNYjJGa1pYSmdJSFZ6WldRZ2RHOGdiRzloWkNCbGVIUmxjbTVoYkZ4dUlDb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmRYSmpaWE5jYmlBcUwxeHVkbUZ5SUVGdVlXeDVlbVZ5SUQwZ1puVnVZM1JwYjI0Z1FXNWhiSGw2WlhJb1lYUjBZV05vUVZOVUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHOWhaR1Z5S1NCN1hHNGdJSFJvYVhNdWJHOWhaR1Z5SUQwZ2JHOWhaR1Z5TzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJCSUd4cGMzUWdiMllnWVd4c0lHVnNaVzFsYm5SeklIUm9aU0JnUVc1aGJIbDZaWEpnSUdoaGN5QnRaWFJoWkdGMFlTQm1iM0l1WEc0Z0lDQXFJRUJ0WlcxaVpYSWdlMEZ5Y21GNUxqeEZiR1Z0Wlc1MFJHVnpZM0pwY0hSdmNqNTlYRzRnSUNBcUwxeHVJQ0IwYUdsekxtVnNaVzFsYm5SeklEMGdXMTA3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUVnZG1sbGR5QnBiblJ2SUdCbGJHVnRaVzUwYzJBc0lHdGxlV1ZrSUdKNUlIUmhaeUJ1WVcxbExseHVJQ0FnS2lCQWJXVnRZbVZ5SUh0UFltcGxZM1F1UEhOMGNtbHVaeXhGYkdWdFpXNTBSR1Z6WTNKcGNIUnZjajU5WEc0Z0lDQXFMMXh1SUNCMGFHbHpMbVZzWlcxbGJuUnpRbmxVWVdkT1lXMWxJRDBnZTMwN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVFZ2JHbHpkQ0J2WmlCQlVFa2dabVZoZEhWeVpYTWdZV1JrWldRZ2RHOGdZRkJ2YkhsdFpYSXVRbUZ6WldBZ1pXNWpiM1Z1ZEdWeVpXUWdZbmtnZEdobFhHNGdJQ0FxSUdGdVlXeDVlbVZ5TGx4dUlDQWdLaUJBYldWdFltVnlJSHRCY25KaGVUeEdaV0YwZFhKbFJHVnpZM0pwY0hSdmNqNTlYRzRnSUNBcUwxeHVJQ0IwYUdsekxtWmxZWFIxY21WeklEMGdXMTA3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRlJvWlNCaVpXaGhkbWx2Y25NZ1kyOXNiR1ZqZEdWa0lHSjVJSFJvWlNCaGJtRnNlWE5wY3lCd1lYTnpMbHh1SUNBZ0tseHVJQ0FnS2lCQWJXVnRZbVZ5SUh0QmNuSmhlVHhDWldoaGRtbHZja1JsYzJOeWFYQjBiM0krZlZ4dUlDQWdLaTljYmlBZ2RHaHBjeTVpWldoaGRtbHZjbk1nUFNCYlhUdGNibHh1SUNBdktpcGNiaUFnSUNvZ1ZHaGxJR0psYUdGMmFXOXljeUJqYjJ4c1pXTjBaV1FnWW5rZ2RHaGxJR0Z1WVd4NWMybHpJSEJoYzNNZ1lua2dibUZ0WlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRRzFsYldKbGNpQjdUMkpxWldOMFBITjBjbWx1Wnl4Q1pXaGhkbWx2Y2tSbGMyTnlhWEIwYjNJK2ZWeHVJQ0FnS2k5Y2JpQWdkR2hwY3k1aVpXaGhkbWx2Y25OQ2VVNWhiV1VnUFNCN2ZUdGNibHh1SUNBdktpcGNiaUFnSUNvZ1FTQnRZWEFzSUd0bGVXVmtJR0o1SUdGaWMyOXNkWFJsSUhCaGRHZ3NJRzltSUVSdlkzVnRaVzUwSUcxbGRHRmtZWFJoTGx4dUlDQWdLaUJBYldWdFltVnlJSHRQWW1wbFkzUThjM1J5YVc1bkxFRnVZV3g1ZW1Wa1JHOWpkVzFsYm5RK2ZWeHVJQ0FnS2k5Y2JpQWdkR2hwY3k1b2RHMXNJRDBnZTMwN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVFZ2JXRndMQ0JyWlhsbFpDQmllU0J3WVhSb0xDQnZaaUJJVkUxTUlHUnZZM1Z0Wlc1MElFRlRWSE11WEc0Z0lDQXFJRUIwZVhCbElIdFBZbXBsWTNSOVhHNGdJQ0FxTDF4dUlDQjBhR2x6TG5CaGNuTmxaRVJ2WTNWdFpXNTBjeUE5SUh0OU8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQklHMWhjQ3dnYTJWNVpXUWdZbmtnY0dGMGFDd2diMllnU2xNZ2MyTnlhWEIwSUVGVFZITXVYRzRnSUNBcVhHNGdJQ0FxSUVsbUlIUm9aU0J3WVhSb0lHbHpJR0Z1SUVoVVRVd2dabWxzWlNCM2FYUm9JRzExYkhScGNHeGxJSE5qY21sd2RITXNJSFJvWlNCbGJuUnllU0IzYVd4c0lHSmxJR0Z1SUdGeWNtRjVJRzltSUhOamNtbHdkSE11WEc0Z0lDQXFYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1E4YzNSeWFXNW5MRUZ5Y21GNVBGQmhjbk5sWkVwVFBqNTlYRzRnSUNBcUwxeHVJQ0IwYUdsekxuQmhjbk5sWkZOamNtbHdkSE1nUFNCN2ZUdGNibHh1SUNCY2JseHVJQ0F2S2lwY2JpQWdJQ29nUVNCdFlYQXNJR3RsZVdWa0lHSjVJSEJoZEdnc0lHOW1JR1J2WTNWdFpXNTBJR052Ym5SbGJuUXVYRzRnSUNBcUlFQjBlWEJsSUh0UFltcGxZM1I5WEc0Z0lDQXFMMXh1SUNCMGFHbHpMbDlqYjI1MFpXNTBJRDBnZTMwN1hHNTlPMXh1WEc0dktpcGNiaUFxSUU5d2RHbHZibk1nWm05eUlHQkJibUZzZVhwbGNpNWhibUZzZW5sbFlGeHVJQ29nUUhSNWNHVmtaV1lnZTA5aWFtVmpkSDBnVEc5aFpFOXdkR2x2Ym5OY2JpQXFJRUJ0WlcxaVpYSnZaaUJvZVdSeWIyeDVjMmx6WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMkp2YjJ4bFlXNTlJRzV2UVc1dWIzUmhkR2x2Ym5NZ1YyaGxkR2hsY2lCZ1lXNXViM1JoZEdVb0tXQWdjMmh2ZFd4a0lHSmxJSE5yYVhCd1pXUXVYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UySnZiMnhsWVc1OUlHTnNaV0Z1SUZkb1pYUm9aWElnZEdobElHZGxibVZ5WVhSbFpDQmtaWE5qY21sd2RHOXljeUJ6YUc5MWJHUWdZbVVnWTJ4bFlXNWxaRnh1SUNvZ0lDQWdJRzltSUhKbFpIVnVaR0Z1ZENCa1lYUmhMbHh1SUNvZ1FIQnliM0JsY25SNUlIdG1kVzVqZEdsdmJpaHpkSEpwYm1jcE9pQmliMjlzWldGdWZTQm1hV3gwWlhJZ1FTQndjbVZrYVdOaGRHVWdablZ1WTNScGIyNGdkR2hoZEZ4dUlDb2dJQ0FnSUdsdVpHbGpZWFJsY3lCM2FHbGphQ0JtYVd4bGN5QnphRzkxYkdRZ1ltVWdhV2R1YjNKbFpDQmllU0IwYUdVZ2JHOWhaR1Z5TGlCQ2VTQmtaV1poZFd4MElHRnNiRnh1SUNvZ0lDQWdJR1pwYkdWeklHNXZkQ0JzYjJOaGRHVmtJSFZ1WkdWeUlIUm9aU0JrYVhKdVlXMWxJRzltSUdCb2NtVm1ZQ0IzYVd4c0lHSmxJR2xuYm05eVpXUXVYRzRnS2k5Y2JseHVMeW9xWEc0Z0tpQlRhRzl5ZEdoaGJtUWdabTl5SUhSeVlXNXphWFJwZG1Wc2VTQnNiMkZrYVc1bklHRnVaQ0J3Y205alpYTnphVzVuSUdGc2JDQnBiWEJ2Y25SeklHSmxaMmx1Ym1sdVp5QmhkRnh1SUNvZ1lHaHlaV1pnTGx4dUlDcGNiaUFxSUVsdUlHOXlaR1Z5SUhSdklIQnliM0JsY214NUlHWnBiSFJsY2lCd1lYUm9jeXdnWUdoeVpXWmdJRjl0ZFhOMFh5QmlaU0JoYmlCaFluTnZiSFYwWlNCVlVra3VYRzRnS2x4dUlDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHaHlaV1lnVkdobElISnZiM1FnYVcxd2IzSjBJSFJ2SUdKbFoybHVJR3h2WVdScGJtY2dabkp2YlM1Y2JpQXFJRUJ3WVhKaGJTQjdURzloWkU5d2RHbHZibk05ZlNCdmNIUnBiMjV6SUVGdWVTQmhaR1JwZEdsdmJtRnNJRzl3ZEdsdmJuTWdabTl5SUhSb1pTQnNiMkZrTGx4dUlDb2dRSEpsZEhWeWJpQjdVSEp2YldselpUeEJibUZzZVhwbGNqNTlJRUVnY0hKdmJXbHpaU0IwYUdGMElIZHBiR3dnY21WemIyeDJaU0J2Ym1ObElHQm9jbVZtWUNCaGJtUWdhWFJ6WEc0Z0tpQWdJQ0FnWkdWd1pXNWtaVzVqYVdWeklHaGhkbVVnWW1WbGJpQnNiMkZrWldRZ1lXNWtJR0Z1WVd4NWVtVmtMbHh1SUNvdlhHNUJibUZzZVhwbGNpNWhibUZzZVhwbElEMGdablZ1WTNScGIyNGdZVzVoYkhsNlpTaG9jbVZtTENCdmNIUnBiMjV6S1NCN1hHNGdJRzl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpJSHg4SUh0OU8xeHVJQ0J2Y0hScGIyNXpMbVpwYkhSbGNpQTlJRzl3ZEdsdmJuTXVabWxzZEdWeUlIeDhJRjlrWldaaGRXeDBSbWxzZEdWeUtHaHlaV1lwTzF4dVhHNGdJSFpoY2lCc2IyRmtaWElnUFNCdVpYY2dSbWxzWlV4dllXUmxjaWdwTzF4dUlDQjJZWElnVUhKcGJXRnllVkpsYzI5c2RtVnlJRDBnZEhsd1pXOW1JSGRwYm1SdmR5QTlQVDBnSjNWdVpHVm1hVzVsWkNjZ1AxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVnhkV2x5WlNnbkxpOXNiMkZrWlhJdlpuTXRjbVZ6YjJ4MlpYSW5LU0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhGMWFYSmxLQ2N1TDJ4dllXUmxjaTk0YUhJdGNtVnpiMngyWlhJbktUdGNiaUFnYkc5aFpHVnlMbUZrWkZKbGMyOXNkbVZ5S0c1bGR5QlFjbWx0WVhKNVVtVnpiMngyWlhJb2IzQjBhVzl1Y3lrcE8xeHVJQ0JzYjJGa1pYSXVZV1JrVW1WemIyeDJaWElvYm1WM0lFNXZiM0JTWlhOdmJIWmxjaWg3ZEdWemREb2diM0IwYVc5dWN5NW1hV3gwWlhKOUtTazdYRzVjYmlBZ2RtRnlJR0Z1WVd4NWVtVnlJRDBnYm1WM0lIUm9hWE1vYm5Wc2JDd2diRzloWkdWeUtUdGNiaUFnY21WMGRYSnVJR0Z1WVd4NWVtVnlMbTFsZEdGa1lYUmhWSEpsWlNob2NtVm1LUzUwYUdWdUtHWjFibU4wYVc5dUtISnZiM1FwSUh0Y2JpQWdJQ0JwWmlBb0lXOXdkR2x2Ym5NdWJtOUJibTV2ZEdGMGFXOXVjeWtnZTF4dUlDQWdJQ0FnWVc1aGJIbDZaWEl1WVc1dWIzUmhkR1VvS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0c5d2RHbHZibk11WTJ4bFlXNHBJSHRjYmlBZ0lDQWdJR0Z1WVd4NWVtVnlMbU5zWldGdUtDazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJRY205dGFYTmxMbkpsYzI5c2RtVW9ZVzVoYkhsNlpYSXBPMXh1SUNCOUtUdGNibjA3WEc1Y2JpOHFLbHh1SUNvZ1FIQnlhWFpoZEdWY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQm9jbVZtWEc0Z0tpQkFjbVYwZFhKdUlIdG1kVzVqZEdsdmJpaHpkSEpwYm1jcE9pQmliMjlzWldGdWZWeHVJQ292WEc1bWRXNWpkR2x2YmlCZlpHVm1ZWFZzZEVacGJIUmxjaWhvY21WbUtTQjdYRzRnSUM4dklFVjJaWEo1ZEdocGJtY2dkWEFnZEc4Z2RHaGxJR3hoYzNRZ1lDOWdJRzl5SUdCY1hHQXVYRzRnSUhaaGNpQmlZWE5sSUQwZ2FISmxaaTV0WVhSamFDZ3ZYaWd1S2o4cFcxNWNYQzljWEZ4Y1hTb2tMeWxiTVYwN1hHNGdJSEpsZEhWeWJpQm1kVzVqZEdsdmJpaDFjbWtwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkWEpwTG1sdVpHVjRUMllvWW1GelpTa2dJVDA5SURBN1hHNGdJSDA3WEc1OVhHNWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzVzYjJGa0lEMGdablZ1WTNScGIyNGdiRzloWkNob2NtVm1LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbXh2WVdSbGNpNXlaWEYxWlhOMEtHaHlaV1lwTG5Sb1pXNG9ablZ1WTNScGIyNG9ZMjl1ZEdWdWRDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTaG1kVzVqZEdsdmJpaHlaWE52YkhabExDQnlaV3BsWTNRcElIdGNiaUFnSUNBZ0lITmxkRlJwYldWdmRYUW9ablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVYMk52Ym5SbGJuUmJhSEpsWmwwZ1BTQmpiMjUwWlc1ME8xeHVJQ0FnSUNBZ0lDQnlaWE52YkhabEtIUm9hWE11WDNCaGNuTmxTRlJOVENoamIyNTBaVzUwTENCb2NtVm1LU2s3WEc0Z0lDQWdJQ0I5TG1KcGJtUW9kR2hwY3lrc0lEQXBPMXh1SUNBZ0lIMHVZbWx1WkNoMGFHbHpLU2t1WTJGMFkyZ29ablZ1WTNScGIyNG9aWEp5S1h0Y2JpQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9YQ0pGY25KdmNpQndjbTlqWlhOemFXNW5JR1J2WTNWdFpXNTBJR0YwSUZ3aUlDc2dhSEpsWmlrN1hHNGdJQ0FnSUNCMGFISnZkeUJsY25JN1hHNGdJQ0FnZlNrN1hHNGdJSDB1WW1sdVpDaDBhR2x6S1NrN1hHNTlPMXh1WEc0dktpcGNiaUFxSUZKbGRIVnlibk1nWVc0Z1lFRnVZV3g1ZW1Wa1JHOWpkVzFsYm5SZ0lISmxjSEpsYzJWdWRHbHVaeUIwYUdVZ2NISnZkbWxrWldRZ1pHOWpkVzFsYm5SY2JpQXFJRUJ3Y21sMllYUmxYRzRnS2lCQWNHRnlZVzBnSUh0emRISnBibWQ5SUdoMGJXeEpiWEJ2Y25RZ1VtRjNJSFJsZUhRZ2IyWWdZVzRnU0ZSTlRDQmtiMk4xYldWdWRGeHVJQ29nUUhCaGNtRnRJQ0I3YzNSeWFXNW5mU0JvY21WbUlDQWdJQ0FnSUZSb1pTQmtiMk4xYldWdWRDZHpJRlZTVEM1Y2JpQXFJRUJ5WlhSMWNtNGdlMEZ1WVd4NWVtVmtSRzlqZFcxbGJuUjlJQ0FnSUNBZ0lFRnVJQ0JnUVc1aGJIbDZaV1JFYjJOMWJXVnVkR0JjYmlBcUwxeHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbDl3WVhKelpVaFVUVXdnUFNCbWRXNWpkR2x2YmlCZmNHRnljMlZJVkUxTUtHaDBiV3hKYlhCdmNuUXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHaHlaV1lwSUh0Y2JpQWdhV1lnS0doeVpXWWdhVzRnZEdocGN5NW9kRzFzS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWFIUnRiRnRvY21WbVhUdGNiaUFnZlZ4dUlDQjJZWElnWkdWd2MweHZZV1JsWkNBOUlGdGRPMXh1SUNCMllYSWdaR1Z3U0hKbFpuTWdQU0JiWFR0Y2JpQWdkbUZ5SUcxbGRHRmtZWFJoVEc5aFpHVmtJRDBnVUhKdmJXbHpaUzV5WlhOdmJIWmxLRVZOVUZSWlgwMUZWRUZFUVZSQktUdGNiaUFnZG1GeUlIQmhjbk5sWkR0Y2JpQWdkSEo1SUh0Y2JpQWdJQ0J3WVhKelpXUWdQU0JwYlhCdmNuUlFZWEp6WlNob2RHMXNTVzF3YjNKMExDQm9jbVZtS1R0Y2JpQWdmU0JqWVhSamFDQW9aWEp5S1NCN1hHNGdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpZ25SWEp5YjNJZ2NHRnljMmx1WnlFbktUdGNiaUFnSUNCMGFISnZkeUJsY25JN1hHNGdJSDFjYmlBZ2RtRnlJR2gwYld4TWIyRmtaV1FnUFNCUWNtOXRhWE5sTG5KbGMyOXNkbVVvY0dGeWMyVmtLVHRjYmlBZ2FXWWdLSEJoY25ObFpDNXpZM0pwY0hRcElIdGNiaUFnSUNCdFpYUmhaR0YwWVV4dllXUmxaQ0E5SUhSb2FYTXVYM0J5YjJObGMzTlRZM0pwY0hSektIQmhjbk5sWkM1elkzSnBjSFFzSUdoeVpXWXBPMXh1SUNCOVhHNGdJSFpoY2lCamIyMXRaVzUwVkdWNGRDQTlJSEJoY25ObFpDNWpiMjF0Wlc1MExtMWhjQ2htZFc1amRHbHZiaWhqYjIxdFpXNTBLWHRjYmlBZ0lDQnlaWFIxY200Z1pHOXROUzVuWlhSVVpYaDBRMjl1ZEdWdWRDaGpiMjF0Wlc1MEtUdGNiaUFnZlNrN1hHNGdJSFpoY2lCd2MyVjFaRzlGYkdWdFpXNTBjeUE5SUdSdlkzTXVjR0Z5YzJWUWMyVjFaRzlGYkdWdFpXNTBjeWhqYjIxdFpXNTBWR1Y0ZENrN1hHNGdJSEJ6WlhWa2IwVnNaVzFsYm5SekxtWnZja1ZoWTJnb1puVnVZM1JwYjI0b1pXeGxiV1Z1ZENsN1hHNGdJQ0FnWld4bGJXVnVkQzVqYjI1MFpXNTBTSEpsWmlBOUlHaHlaV1k3WEc0Z0lDQWdkR2hwY3k1bGJHVnRaVzUwY3k1d2RYTm9LR1ZzWlcxbGJuUXBPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkSE5DZVZSaFowNWhiV1ZiWld4bGJXVnVkQzVwYzEwZ1BTQmxiR1Z0Wlc1ME8xeHVJQ0I5TG1KcGJtUW9kR2hwY3lrcE8xeHVJQ0J0WlhSaFpHRjBZVXh2WVdSbFpDQTlJRzFsZEdGa1lYUmhURzloWkdWa0xuUm9aVzRvWm5WdVkzUnBiMjRvYldWMFlXUmhkR0VwZTF4dUlDQWdJSFpoY2lCdFpYUmhaR0YwWVVWdWRISjVJRDBnZTF4dUlDQWdJQ0FnWld4bGJXVnVkSE02SUhCelpYVmtiMFZzWlcxbGJuUnpMRnh1SUNBZ0lDQWdabVZoZEhWeVpYTTZJRnRkTEZ4dUlDQWdJQ0FnWW1Wb1lYWnBiM0p6T2lCYlhWeHVJQ0FnSUgwN1hHNGdJQ0FnY21WMGRYSnVJRnR0WlhSaFpHRjBZU3dnYldWMFlXUmhkR0ZGYm5SeWVWMHVjbVZrZFdObEtISmxaSFZqWlUxbGRHRmtZWFJoS1R0Y2JpQWdmU2s3WEc0Z0lHUmxjSE5NYjJGa1pXUXVjSFZ6YUNodFpYUmhaR0YwWVV4dllXUmxaQ2s3WEc1Y2JseHVJQ0JwWmlBb2RHaHBjeTVzYjJGa1pYSXBJSHRjYmlBZ0lDQjJZWElnWW1GelpWVnlhU0E5SUdoeVpXWTdYRzRnSUNBZ2FXWWdLSEJoY25ObFpDNWlZWE5sTG14bGJtZDBhQ0ErSURFcElIdGNiaUFnSUNBZ0lHTnZibk52YkdVdVpYSnliM0lvWENKUGJteDVJRzl1WlNCaVlYTmxJSFJoWnlCd1pYSWdaRzlqZFcxbGJuUWhYQ0lwTzF4dUlDQWdJQ0FnZEdoeWIzY2dYQ0pOZFd4MGFYQnNaU0JpWVhObElIUmhaM01nYVc0Z1hDSWdLeUJvY21WbU8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2NHRnljMlZrTG1KaGMyVXViR1Z1WjNSb0lEMDlJREVwSUh0Y2JpQWdJQ0FnSUhaaGNpQmlZWE5sU0hKbFppQTlJR1J2YlRVdVoyVjBRWFIwY21saWRYUmxLSEJoY25ObFpDNWlZWE5sV3pCZExDQmNJbWh5WldaY0lpazdYRzRnSUNBZ0lDQnBaaUFvWW1GelpVaHlaV1lwSUh0Y2JpQWdJQ0FnSUNBZ1ltRnpaVWh5WldZZ1BTQmlZWE5sU0hKbFppQXJJRndpTDF3aU8xeHVJQ0FnSUNBZ0lDQmlZWE5sVlhKcElEMGdkWEpzTG5KbGMyOXNkbVVvWW1GelpWVnlhU3dnWW1GelpVaHlaV1lwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQndZWEp6WldRdWFXMXdiM0owTG1admNrVmhZMmdvWm5WdVkzUnBiMjRvYkdsdWF5a2dlMXh1SUNBZ0lDQWdkbUZ5SUd4cGJtdDFjbXdnUFNCa2IyMDFMbWRsZEVGMGRISnBZblYwWlNoc2FXNXJMQ0FuYUhKbFppY3BPMXh1SUNBZ0lDQWdhV1lnS0d4cGJtdDFjbXdwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJSEpsYzI5c2RtVmtWWEpzSUQwZ2RYSnNMbkpsYzI5c2RtVW9ZbUZ6WlZWeWFTd2diR2x1YTNWeWJDazdYRzRnSUNBZ0lDQWdJR1JsY0VoeVpXWnpMbkIxYzJnb2NtVnpiMngyWldSVmNtd3BPMXh1SUNBZ0lDQWdJQ0JrWlhCelRHOWhaR1ZrTG5CMWMyZ29kR2hwY3k1ZlpHVndaVzVrWlc1amFXVnpURzloWkdWa1JtOXlLSEpsYzI5c2RtVmtWWEpzTENCb2NtVm1LU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmUzVpYVc1a0tIUm9hWE1wS1R0Y2JpQWdJQ0J3WVhKelpXUXVjM1I1YkdVdVptOXlSV0ZqYUNobWRXNWpkR2x2YmloemRIbHNaVVZzWlcxbGJuUXBJSHRjYmlBZ0lDQWdJR2xtSUNod2IyeDViV1Z5UlhoMFpYSnVZV3hUZEhsc1pTaHpkSGxzWlVWc1pXMWxiblFwS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ6ZEhsc1pVaHlaV1lnUFNCa2IyMDFMbWRsZEVGMGRISnBZblYwWlNoemRIbHNaVVZzWlcxbGJuUXNJQ2RvY21WbUp5azdYRzRnSUNBZ0lDQWdJR2xtSUNob2NtVm1LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2MzUjViR1ZJY21WbUlEMGdkWEpzTG5KbGMyOXNkbVVvWW1GelpWVnlhU3dnYzNSNWJHVkljbVZtS1R0Y2JpQWdJQ0FnSUNBZ0lDQmtaWEJ6VEc5aFpHVmtMbkIxYzJnb2RHaHBjeTVzYjJGa1pYSXVjbVZ4ZFdWemRDaHpkSGxzWlVoeVpXWXBMblJvWlc0b1puVnVZM1JwYjI0b1kyOXVkR1Z1ZENsN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxsOWpiMjUwWlc1MFczTjBlV3hsU0hKbFpsMGdQU0JqYjI1MFpXNTBPMXh1SUNBZ0lDQWdJQ0FnSUgwdVltbHVaQ2gwYUdsektTa3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmUzVpYVc1a0tIUm9hWE1wS1R0Y2JpQWdmVnh1SUNCa1pYQnpURzloWkdWa0lEMGdVSEp2YldselpTNWhiR3dvWkdWd2MweHZZV1JsWkNsY2JpQWdJQ0FnSUNBZ0xuUm9aVzRvWm5WdVkzUnBiMjRvS1NCN2NtVjBkWEp1SUdSbGNFaHlaV1p6TzMwcFhHNGdJQ0FnSUNBZ0lDNWpZWFJqYUNobWRXNWpkR2x2YmlobGNuSXBJSHQwYUhKdmR5Qmxjbkk3ZlNrN1hHNGdJSFJvYVhNdWNHRnljMlZrUkc5amRXMWxiblJ6VzJoeVpXWmRJRDBnY0dGeWMyVmtMbUZ6ZER0Y2JpQWdkR2hwY3k1b2RHMXNXMmh5WldaZElEMGdlMXh1SUNBZ0lDQWdhSEpsWmpvZ2FISmxaaXhjYmlBZ0lDQWdJR2gwYld4TWIyRmtaV1E2SUdoMGJXeE1iMkZrWldRc1hHNGdJQ0FnSUNCdFpYUmhaR0YwWVV4dllXUmxaRG9nYldWMFlXUmhkR0ZNYjJGa1pXUXNYRzRnSUNBZ0lDQmtaWEJJY21WbWN6b2daR1Z3U0hKbFpuTXNYRzRnSUNBZ0lDQmtaWEJ6VEc5aFpHVmtPaUJrWlhCelRHOWhaR1ZrWEc0Z0lIMDdYRzRnSUhKbGRIVnliaUIwYUdsekxtaDBiV3hiYUhKbFpsMDdYRzU5TzF4dVhHNUJibUZzZVhwbGNpNXdjbTkwYjNSNWNHVXVYM0J5YjJObGMzTlRZM0pwY0hSeklEMGdablZ1WTNScGIyNGdYM0J5YjJObGMzTlRZM0pwY0hSektITmpjbWx3ZEhNc0lHaHlaV1lwSUh0Y2JpQWdkbUZ5SUhOamNtbHdkRkJ5YjIxcGMyVnpJRDBnVzEwN1hHNGdJSE5qY21sd2RITXVabTl5UldGamFDaG1kVzVqZEdsdmJpaHpZM0pwY0hRcElIdGNiaUFnSUNCelkzSnBjSFJRY205dGFYTmxjeTV3ZFhOb0tIUm9hWE11WDNCeWIyTmxjM05UWTNKcGNIUW9jMk55YVhCMExDQm9jbVZtS1NrN1hHNGdJSDB1WW1sdVpDaDBhR2x6S1NrN1hHNGdJSEpsZEhWeWJpQlFjbTl0YVhObExtRnNiQ2h6WTNKcGNIUlFjbTl0YVhObGN5a3VkR2hsYmlobWRXNWpkR2x2YmlodFpYUmhaR0YwWVV4cGMzUXBJSHRjYmlBZ0lDQnlaWFIxY200Z2JXVjBZV1JoZEdGTWFYTjBMbkpsWkhWalpTaHlaV1IxWTJWTlpYUmhaR0YwWVN3Z1JVMVFWRmxmVFVWVVFVUkJWRUVwTzF4dUlDQjlLVHRjYm4wN1hHNWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzVmY0hKdlkyVnpjMU5qY21sd2RDQTlJR1oxYm1OMGFXOXVJRjl3Y205alpYTnpVMk55YVhCMEtITmpjbWx3ZEN3Z2FISmxaaWtnZTF4dUlDQjJZWElnYzNKaklEMGdaRzl0TlM1blpYUkJkSFJ5YVdKMWRHVW9jMk55YVhCMExDQW5jM0pqSnlrN1hHNGdJSFpoY2lCd1lYSnpaV1JLY3p0Y2JpQWdhV1lnS0NGemNtTXBJSHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnY0dGeWMyVmtTbk1nUFNCcWMxQmhjbk5sS0NoelkzSnBjSFF1WTJocGJHUk9iMlJsY3k1c1pXNW5kR2dwSUQ4Z2MyTnlhWEIwTG1Ob2FXeGtUbTlrWlhOYk1GMHVkbUZzZFdVZ09pQW5KeWs3WEc0Z0lDQWdmU0JqWVhSamFDQW9aWEp5S1NCN1hHNGdJQ0FnSUNBdkx5QkdhV2QxY21VZ2IzVjBJSFJvWlNCamIzSnlaV04wSUd4cGJtVWdiblZ0WW1WeUlHWnZjaUIwYUdVZ1pYSnliM0l1WEc0Z0lDQWdJQ0IyWVhJZ2JHbHVaU0E5SURBN1hHNGdJQ0FnSUNCMllYSWdZMjlzSUQwZ01EdGNiaUFnSUNBZ0lHbG1JQ2h6WTNKcGNIUXVYMTl2ZDI1bGNrUnZZM1Z0Wlc1MElDWW1JSE5qY21sd2RDNWZYMjkzYm1WeVJHOWpkVzFsYm5RZ1BUMGdhSEpsWmlrZ2UxeHVJQ0FnSUNBZ0lDQnNhVzVsSUQwZ2MyTnlhWEIwTGw5ZmJHOWpZWFJwYjI1RVpYUmhhV3d1YkdsdVpTQXRJREU3WEc0Z0lDQWdJQ0FnSUdOdmJDQTlJSE5qY21sd2RDNWZYMnh2WTJGMGFXOXVSR1YwWVdsc0xteHBibVVnTFNBeE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2JHbHVaU0FyUFNCbGNuSXViR2x1WlU1MWJXSmxjanRjYmlBZ0lDQWdJR052YkNBclBTQmxjbkl1WTI5c2RXMXVPMXh1SUNBZ0lDQWdkbUZ5SUcxbGMzTmhaMlVnUFNCY0lrVnljbTl5SUhCaGNuTnBibWNnYzJOeWFYQjBJR2x1SUZ3aUlDc2dhSEpsWmlBcklGd2lJR0YwSUZ3aUlDc2diR2x1WlNBcklGd2lPbHdpSUNzZ1kyOXNPMXh1SUNBZ0lDQWdiV1Z6YzJGblpTQXJQU0JjSWx4Y2Jsd2lJQ3NnWlhKeUxtUmxjMk55YVhCMGFXOXVPMXh1SUNBZ0lDQWdjbVYwZFhKdUlGQnliMjFwYzJVdWNtVnFaV04wS0c1bGR5QkZjbkp2Y2lodFpYTnpZV2RsS1NrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNod1lYSnpaV1JLY3k1bGJHVnRaVzUwY3lrZ2UxeHVJQ0FnSUNBZ2NHRnljMlZrU25NdVpXeGxiV1Z1ZEhNdVptOXlSV0ZqYUNobWRXNWpkR2x2YmlobGJHVnRaVzUwS1NCN1hHNGdJQ0FnSUNBZ0lHVnNaVzFsYm5RdWMyTnlhWEIwUld4bGJXVnVkQ0E5SUhOamNtbHdkRHRjYmlBZ0lDQWdJQ0FnWld4bGJXVnVkQzVqYjI1MFpXNTBTSEpsWmlBOUlHaHlaV1k3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaV3hsYldWdWRITXVjSFZ6YUNobGJHVnRaVzUwS1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1ZzWlcxbGJuUXVhWE1nYVc0Z2RHaHBjeTVsYkdWdFpXNTBjMEo1VkdGblRtRnRaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk52YkdVdWQyRnliaWduU1dkdWIzSnBibWNnWkhWd2JHbGpZWFJsSUdWc1pXMWxiblFnWkdWbWFXNXBkR2x2YmpvZ0p5QXJJR1ZzWlcxbGJuUXVhWE1wTzF4dUlDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11Wld4bGJXVnVkSE5DZVZSaFowNWhiV1ZiWld4bGJXVnVkQzVwYzEwZ1BTQmxiR1Z0Wlc1ME8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlMbUpwYm1Rb2RHaHBjeWtwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvY0dGeWMyVmtTbk11Wm1WaGRIVnlaWE1wSUh0Y2JpQWdJQ0FnSUhCaGNuTmxaRXB6TG1abFlYUjFjbVZ6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvWm1WaGRIVnlaU2w3WEc0Z0lDQWdJQ0FnSUdabFlYUjFjbVV1WTI5dWRHVnVkRWh5WldZZ1BTQm9jbVZtTzF4dUlDQWdJQ0FnSUNCbVpXRjBkWEpsTG5OamNtbHdkRVZzWlcxbGJuUWdQU0J6WTNKcGNIUTdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJSFJvYVhNdVptVmhkSFZ5WlhNZ1BTQjBhR2x6TG1abFlYUjFjbVZ6TG1OdmJtTmhkQ2h3WVhKelpXUktjeTVtWldGMGRYSmxjeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2h3WVhKelpXUktjeTVpWldoaGRtbHZjbk1wSUh0Y2JpQWdJQ0FnSUhCaGNuTmxaRXB6TG1KbGFHRjJhVzl5Y3k1bWIzSkZZV05vS0daMWJtTjBhVzl1S0dKbGFHRjJhVzl5S1h0Y2JpQWdJQ0FnSUNBZ1ltVm9ZWFpwYjNJdVkyOXVkR1Z1ZEVoeVpXWWdQU0JvY21WbU8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1KbGFHRjJhVzl5YzBKNVRtRnRaVnRpWldoaGRtbHZjaTVwYzEwZ1BTQmlaV2hoZG1sdmNqdGNiaUFnSUNBZ0lDQWdkR2hwY3k1aVpXaGhkbWx2Y25OQ2VVNWhiV1ZiWW1Wb1lYWnBiM0l1YzNsdFltOXNYU0E5SUdKbGFHRjJhVzl5TzF4dUlDQWdJQ0FnZlM1aWFXNWtLSFJvYVhNcEtUdGNiaUFnSUNBZ0lIUm9hWE11WW1Wb1lYWnBiM0p6SUQwZ2RHaHBjeTVpWldoaGRtbHZjbk11WTI5dVkyRjBLSEJoY25ObFpFcHpMbUpsYUdGMmFXOXljeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2doVDJKcVpXTjBMbWhoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvZEdocGN5NXdZWEp6WldSVFkzSnBjSFJ6TENCb2NtVm1LU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXdZWEp6WldSVFkzSnBjSFJ6VzJoeVpXWmRJRDBnVzEwN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCelkzSnBjSFJGYkdWdFpXNTBPMXh1SUNBZ0lHbG1JQ2h6WTNKcGNIUXVYMTl2ZDI1bGNrUnZZM1Z0Wlc1MElDWW1JSE5qY21sd2RDNWZYMjkzYm1WeVJHOWpkVzFsYm5RZ1BUMGdhSEpsWmlrZ2UxeHVJQ0FnSUNBZ2MyTnlhWEIwUld4bGJXVnVkQ0E5SUhOamNtbHdkRHRjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjeTV3WVhKelpXUlRZM0pwY0hSelcyaHlaV1pkTG5CMWMyZ29lMXh1SUNBZ0lDQWdZWE4wT2lCd1lYSnpaV1JLY3k1d1lYSnpaV1JUWTNKcGNIUXNYRzRnSUNBZ0lDQnpZM0pwY0hSRmJHVnRaVzUwT2lCelkzSnBjSFJGYkdWdFpXNTBYRzRnSUNBZ2ZTazdYRzRnSUNBZ2NtVjBkWEp1SUhCaGNuTmxaRXB6TzF4dUlDQjlYRzRnSUdsbUlDaDBhR2x6TG14dllXUmxjaWtnZTF4dUlDQWdJSFpoY2lCeVpYTnZiSFpsWkZOeVl5QTlJSFZ5YkM1eVpYTnZiSFpsS0doeVpXWXNJSE55WXlrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWJHOWhaR1Z5TG5KbGNYVmxjM1FvY21WemIyeDJaV1JUY21NcExuUm9aVzRvWm5WdVkzUnBiMjRvWTI5dWRHVnVkQ2tnZTF4dUlDQWdJQ0FnZEdocGN5NWZZMjl1ZEdWdWRGdHlaWE52YkhabFpGTnlZMTBnUFNCamIyNTBaVzUwTzF4dUlDQWdJQ0FnZG1GeUlISmxjMjlzZG1Wa1UyTnlhWEIwSUQwZ1QySnFaV04wTG1OeVpXRjBaU2h6WTNKcGNIUXBPMXh1SUNBZ0lDQWdjbVZ6YjJ4MlpXUlRZM0pwY0hRdVkyaHBiR1JPYjJSbGN5QTlJRnQ3ZG1Gc2RXVTZJR052Ym5SbGJuUjlYVHRjYmlBZ0lDQWdJSEpsYzI5c2RtVmtVMk55YVhCMExtRjBkSEp6SUQwZ2NtVnpiMngyWldSVFkzSnBjSFF1WVhSMGNuTXVjMnhwWTJVb0tUdGNiaUFnSUNBZ0lHUnZiVFV1Y21WdGIzWmxRWFIwY21saWRYUmxLSEpsYzI5c2RtVmtVMk55YVhCMExDQW5jM0pqSnlrN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NWZjSEp2WTJWemMxTmpjbWx3ZENoeVpYTnZiSFpsWkZOamNtbHdkQ3dnY21WemIyeDJaV1JUY21NcE8xeHVJQ0FnSUgwdVltbHVaQ2gwYUdsektTa3VZMkYwWTJnb1puVnVZM1JwYjI0b1pYSnlLU0I3ZEdoeWIzY2daWEp5TzMwcE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCUWNtOXRhWE5sTG5KbGMyOXNkbVVvUlUxUVZGbGZUVVZVUVVSQlZFRXBPMXh1SUNCOVhHNTlPMXh1WEc1QmJtRnNlWHBsY2k1d2NtOTBiM1I1Y0dVdVgyUmxjR1Z1WkdWdVkybGxjMHh2WVdSbFpFWnZjaUE5SUdaMWJtTjBhVzl1SUY5a1pYQmxibVJsYm1OcFpYTk1iMkZrWldSR2IzSW9hSEpsWml3Z2NtOXZkQ2tnZTF4dUlDQjJZWElnWm05MWJtUWdQU0I3ZlR0Y2JpQWdhV1lnS0hKdmIzUWdJVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUdadmRXNWtXM0p2YjNSZElEMGdkSEoxWlR0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnZEdocGN5NWZaMlYwUkdWd1pXNWtaVzVqYVdWektHaHlaV1lzSUdadmRXNWtLUzUwYUdWdUtHWjFibU4wYVc5dUtHUmxjSE1wSUh0Y2JpQWdJQ0IyWVhJZ1pHVndUV1YwWVdSaGRHRk1iMkZrWldRZ1BTQmJYVHRjYmlBZ0lDQjJZWElnWkdWd1VISnZiV2x6WlhNZ1BTQmtaWEJ6TG0xaGNDaG1kVzVqZEdsdmJpaGtaWEJJY21WbUtYdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbXh2WVdRb1pHVndTSEpsWmlrdWRHaGxiaWhtZFc1amRHbHZiaWhvZEcxc1RXOXViMjFsY2lrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2FIUnRiRTF2Ym05dFpYSXViV1YwWVdSaGRHRk1iMkZrWldRN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOUxtSnBibVFvZEdocGN5a3BPMXh1SUNBZ0lISmxkSFZ5YmlCUWNtOXRhWE5sTG1Gc2JDaGtaWEJRY205dGFYTmxjeWs3WEc0Z0lIMHVZbWx1WkNoMGFHbHpLU2s3WEc1OU8xeHVYRzR2S2lwY2JpQXFJRXhwYzNRZ1lXeHNJSFJvWlNCb2RHMXNJR1JsY0dWdVpHVnVZMmxsY3lCbWIzSWdkR2hsSUdSdlkzVnRaVzUwSUdGMElHQm9jbVZtWUM1Y2JpQXFJRUJ3WVhKaGJTQWdlM04wY21sdVozMGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhSEpsWmlBZ0lDQWdJRlJvWlNCb2NtVm1JSFJ2SUdkbGRDQmtaWEJsYm1SbGJtTnBaWE1nWm05eUxseHVJQ29nUUhCaGNtRnRJQ0I3VDJKcVpXTjBManh6ZEhKcGJtY3NZbTl2YkdWaGJqNDlmU0JtYjNWdVpDQWdJQ0FnUVc0Z2IySnFaV04wSUd0bGVXVmtJR0o1SUZWU1RDQnZaaUIwYUdWY2JpQXFJQ0FnSUNCaGJISmxZV1I1SUhKbGMyOXNkbVZrSUdSbGNHVnVaR1Z1WTJsbGN5NWNiaUFxSUVCd1lYSmhiU0FnZTJKdmIyeGxZVzQ5ZlNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwY21GdWMybDBhWFpsSUZkb1pYUm9aWElnZEc4Z2JHOWhaQ0IwY21GdWMybDBhWFpsWEc0Z0tpQWdJQ0FnWkdWd1pXNWtaVzVqYVdWekxpQkVaV1poZFd4MGN5QjBieUIwY25WbExseHVJQ29nUUhKbGRIVnliaUI3UVhKeVlYa3VQSE4wY21sdVp6NTlJQ0JCSUd4cGMzUWdiMllnWVd4c0lIUm9aU0JvZEcxc0lHUmxjR1Z1WkdWdVkybGxjeTVjYmlBcUwxeHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbDluWlhSRVpYQmxibVJsYm1OcFpYTWdQU0JtZFc1amRHbHZiaUJmWjJWMFJHVndaVzVrWlc1amFXVnpLR2h5WldZc0lHWnZkVzVrTENCMGNtRnVjMmwwYVhabEtTQjdYRzRnSUdsbUlDaG1iM1Z1WkNBOVBUMGdkVzVrWldacGJtVmtLU0I3WEc0Z0lDQWdabTkxYm1RZ1BTQjdmVHRjYmlBZ0lDQm1iM1Z1WkZ0b2NtVm1YU0E5SUhSeWRXVTdYRzRnSUgxY2JpQWdhV1lnS0hSeVlXNXphWFJwZG1VZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJSFJ5WVc1emFYUnBkbVVnUFNCMGNuVmxPMXh1SUNCOVhHNGdJSFpoY2lCa1pYQnpJRDBnVzEwN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG14dllXUW9hSEpsWmlrdWRHaGxiaWhtZFc1amRHbHZiaWhvZEcxc1RXOXViMjFsY2lrZ2UxeHVJQ0FnSUhaaGNpQjBjbUZ1YzJsMGFYWmxSR1Z3Y3lBOUlGdGRPMXh1SUNBZ0lHaDBiV3hOYjI1dmJXVnlMbVJsY0VoeVpXWnpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9aR1Z3U0hKbFppbDdYRzRnSUNBZ0lDQnBaaUFvWm05MWJtUmJaR1Z3U0hKbFpsMHBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdaR1Z3Y3k1d2RYTm9LR1JsY0VoeVpXWXBPMXh1SUNBZ0lDQWdabTkxYm1SYlpHVndTSEpsWmwwZ1BTQjBjblZsTzF4dUlDQWdJQ0FnYVdZZ0tIUnlZVzV6YVhScGRtVXBJSHRjYmlBZ0lDQWdJQ0FnZEhKaGJuTnBkR2wyWlVSbGNITXVjSFZ6YUNoMGFHbHpMbDluWlhSRVpYQmxibVJsYm1OcFpYTW9aR1Z3U0hKbFppd2dabTkxYm1RcEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOUxtSnBibVFvZEdocGN5a3BPMXh1SUNBZ0lISmxkSFZ5YmlCUWNtOXRhWE5sTG1Gc2JDaDBjbUZ1YzJsMGFYWmxSR1Z3Y3lrN1hHNGdJSDB1WW1sdVpDaDBhR2x6S1NrdWRHaGxiaWhtZFc1amRHbHZiaWgwY21GdWMybDBhWFpsUkdWd2N5a2dlMXh1SUNBZ0lIWmhjaUJoYkd4a1pYQnpJRDBnZEhKaGJuTnBkR2wyWlVSbGNITXVjbVZrZFdObEtHWjFibU4wYVc5dUtHRXNJR0lwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJoTG1OdmJtTmhkQ2hpS1R0Y2JpQWdJQ0I5TENCYlhTa3VZMjl1WTJGMEtHUmxjSE1wTzF4dUlDQWdJSEpsZEhWeWJpQmhiR3hrWlhCek8xeHVJQ0I5S1R0Y2JuMDdYRzVjYm1aMWJtTjBhVzl1SUcxaGRHTm9aWE5FYjJOMWJXVnVkRVp2YkdSbGNpaGtaWE5qY21sd2RHOXlMQ0JvY21WbUtTQjdYRzRnSUdsbUlDZ2haR1Z6WTNKcGNIUnZjaTVqYjI1MFpXNTBTSEpsWmlrZ2UxeHVJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnZlZ4dUlDQjJZWElnWkdWelkzSnBjSFJ2Y2tSdll5QTlJSFZ5YkM1d1lYSnpaU2hrWlhOamNtbHdkRzl5TG1OdmJuUmxiblJJY21WbUtUdGNiaUFnYVdZZ0tDRmtaWE5qY21sd2RHOXlSRzlqSUh4OElDRmtaWE5qY21sd2RHOXlSRzlqTG5CaGRHaHVZVzFsS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0I5WEc0Z0lIWmhjaUJ6WldGeVkyaEViMk1nUFNCMWNtd3VjR0Z5YzJVb2FISmxaaWs3WEc0Z0lHbG1JQ2doYzJWaGNtTm9SRzlqSUh4OElDRnpaV0Z5WTJoRWIyTXVjR0YwYUc1aGJXVXBJSHRjYmlBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lIMWNiaUFnZG1GeUlITmxZWEpqYUZCaGRHZ2dQU0J6WldGeVkyaEViMk11Y0dGMGFHNWhiV1U3WEc0Z0lIWmhjaUJzWVhOMFUyeGhjMmdnUFNCelpXRnlZMmhRWVhSb0xteGhjM1JKYm1SbGVFOW1LRndpTDF3aUtUdGNiaUFnYVdZZ0tHeGhjM1JUYkdGemFDQStJREFwSUh0Y2JpQWdJQ0J6WldGeVkyaFFZWFJvSUQwZ2MyVmhjbU5vVUdGMGFDNXpiR2xqWlNnd0xDQnNZWE4wVTJ4aGMyZ3BPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQmtaWE5qY21sd2RHOXlSRzlqTG5CaGRHaHVZVzFsTG1sdVpHVjRUMllvYzJWaGNtTm9VR0YwYUNrZ1BUMDlJREE3WEc1OVhHNWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzVsYkdWdFpXNTBjMFp2Y2tadmJHUmxjaUE5SUdaMWJtTjBhVzl1SUdWc1pXMWxiblJ6Um05eVJtOXNaR1Z5S0doeVpXWXBJSHRjYmlBZ2NtVjBkWEp1SUhSb2FYTXVaV3hsYldWdWRITXVabWxzZEdWeUtHWjFibU4wYVc5dUtHVnNaVzFsYm5RcGUxeHVJQ0FnSUhKbGRIVnliaUJ0WVhSamFHVnpSRzlqZFcxbGJuUkdiMnhrWlhJb1pXeGxiV1Z1ZEN3Z2FISmxaaWs3WEc0Z0lIMHBPMXh1ZlR0Y2JseHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbUpsYUdGMmFXOXljMFp2Y2tadmJHUmxjaUE5SUdaMWJtTjBhVzl1SUdKbGFHRjJhVzl5YzBadmNrWnZiR1JsY2lob2NtVm1LU0I3WEc0Z0lISmxkSFZ5YmlCMGFHbHpMbUpsYUdGMmFXOXljeTVtYVd4MFpYSW9ablZ1WTNScGIyNG9ZbVZvWVhacGIzSXBlMXh1SUNBZ0lISmxkSFZ5YmlCdFlYUmphR1Z6Ukc5amRXMWxiblJHYjJ4a1pYSW9ZbVZvWVhacGIzSXNJR2h5WldZcE8xeHVJQ0I5S1R0Y2JuMDdYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJoSUhCeWIyMXBjMlVnZEdoaGRDQnlaWE52YkhabGN5QjBieUJoSUZCUFNrOGdjbVZ3Y21WelpXNTBZWFJwYjI0Z2IyWWdkR2hsSUdsdGNHOXlkRnh1SUNvZ2RISmxaU3dnYVc0Z1lTQm1iM0p0WVhRZ2RHaGhkQ0J0WVdsdWRHRnBibk1nZEdobElHOXlaR1Z5YVc1bklHOW1JSFJvWlNCSVZFMU1JR2x0Y0c5eWRITWdjM0JsWXk1Y2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQm9jbVZtSUhSb1pTQnBiWEJ2Y25RZ2RHOGdaMlYwSUcxbGRHRmtZWFJoSUdadmNpNWNiaUFxSUVCeVpYUjFjbTRnZTFCeWIyMXBjMlY5WEc0Z0tpOWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzV0WlhSaFpHRjBZVlJ5WldVZ1BTQm1kVzVqZEdsdmJpQnRaWFJoWkdGMFlWUnlaV1VvYUhKbFppa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXNiMkZrS0doeVpXWXBMblJvWlc0b1puVnVZM1JwYjI0b2JXOXViMjFsY2lsN1hHNGdJQ0FnZG1GeUlHeHZZV1JsWkVoeVpXWnpJRDBnZTMwN1hHNGdJQ0FnYkc5aFpHVmtTSEpsWm5OYmFISmxabDBnUFNCMGNuVmxPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDl0WlhSaFpHRjBZVlJ5WldVb2JXOXViMjFsY2l3Z2JHOWhaR1ZrU0hKbFpuTXBPMXh1SUNCOUxtSnBibVFvZEdocGN5a3BPMXh1ZlR0Y2JseHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbDl0WlhSaFpHRjBZVlJ5WldVZ1BTQm1kVzVqZEdsdmJpQmZiV1YwWVdSaGRHRlVjbVZsS0doMGJXeE5iMjV2YldWeUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUd4dllXUmxaRWh5WldaektTQjdYRzRnSUdsbUlDaHNiMkZrWldSSWNtVm1jeUE5UFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ2JHOWhaR1ZrU0hKbFpuTWdQU0I3ZlR0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYUhSdGJFMXZibTl0WlhJdWJXVjBZV1JoZEdGTWIyRmtaV1F1ZEdobGJpaG1kVzVqZEdsdmJpaHRaWFJoWkdGMFlTa2dlMXh1SUNBZ0lHMWxkR0ZrWVhSaElEMGdlMXh1SUNBZ0lDQWdaV3hsYldWdWRITTZJRzFsZEdGa1lYUmhMbVZzWlcxbGJuUnpMRnh1SUNBZ0lDQWdabVZoZEhWeVpYTTZJRzFsZEdGa1lYUmhMbVpsWVhSMWNtVnpMRnh1SUNBZ0lDQWdhSEpsWmpvZ2FIUnRiRTF2Ym05dFpYSXVhSEpsWmx4dUlDQWdJSDA3WEc0Z0lDQWdjbVYwZFhKdUlHaDBiV3hOYjI1dmJXVnlMbVJsY0hOTWIyRmtaV1F1ZEdobGJpaG1kVzVqZEdsdmJpaG9jbVZtY3lrZ2UxeHVJQ0FnSUNBZ2RtRnlJR1JsY0UxbGRHRmtZWFJoSUQwZ1cxMDdYRzRnSUNBZ0lDQm9jbVZtY3k1bWIzSkZZV05vS0daMWJtTjBhVzl1S0doeVpXWXBJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHMWxkR0ZrWVhSaFVISnZiV2x6WlNBOUlGQnliMjFwYzJVdWNtVnpiMngyWlNoMGNuVmxLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHUmxjRTFsZEdGa1lYUmhMbXhsYm1kMGFDQStJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnRaWFJoWkdGMFlWQnliMjFwYzJVZ1BTQmtaWEJOWlhSaFpHRjBZVnRrWlhCTlpYUmhaR0YwWVM1c1pXNW5kR2dnTFNBeFhUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J0WlhSaFpHRjBZVkJ5YjIxcGMyVWdQU0J0WlhSaFpHRjBZVkJ5YjIxcGMyVXVkR2hsYmlobWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb0lXeHZZV1JsWkVoeVpXWnpXMmh5WldaZEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc2IyRmtaV1JJY21WbWMxdG9jbVZtWFNBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVmYldWMFlXUmhkR0ZVY21WbEtIUm9hWE11YUhSdGJGdG9jbVZtWFN3Z2JHOWhaR1ZrU0hKbFpuTXBPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1VISnZiV2x6WlM1eVpYTnZiSFpsS0h0OUtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgwdVltbHVaQ2gwYUdsektTazdYRzRnSUNBZ0lDQWdJR1JsY0UxbGRHRmtZWFJoTG5CMWMyZ29iV1YwWVdSaGRHRlFjbTl0YVhObEtUdGNiaUFnSUNBZ0lIMHVZbWx1WkNoMGFHbHpLU2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdVSEp2YldselpTNWhiR3dvWkdWd1RXVjBZV1JoZEdFcExuUm9aVzRvWm5WdVkzUnBiMjRvYVcxd2IzSjBUV1YwWVdSaGRHRXBJSHRjYmlBZ0lDQWdJQ0FnYldWMFlXUmhkR0V1YVcxd2IzSjBjeUE5SUdsdGNHOXlkRTFsZEdGa1lYUmhPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdhSFJ0YkUxdmJtOXRaWEl1YUhSdGJFeHZZV1JsWkM1MGFHVnVLR1oxYm1OMGFXOXVLSEJoY25ObFpFaDBiV3dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnRaWFJoWkdGMFlTNW9kRzFzSUQwZ2NHRnljMlZrU0hSdGJEdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2JXVjBZV1JoZEdFdVpXeGxiV1Z1ZEhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUcxbGRHRmtZWFJoTG1Wc1pXMWxiblJ6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvWld4bGJXVnVkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JoZEhSaFkyaEViMjFOYjJSMWJHVW9jR0Z5YzJWa1NIUnRiQ3dnWld4bGJXVnVkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHMWxkR0ZrWVhSaE8xeHVJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDB1WW1sdVpDaDBhR2x6S1NrN1hHNGdJSDB1WW1sdVpDaDBhR2x6S1NrN1hHNTlPMXh1WEc1bWRXNWpkR2x2YmlCdFlYUmphR2x1WjBsdGNHOXlkQ2hwYlhCdmNuUkZiR1Z0Wlc1MEtTQjdYRzRnSUhaaGNpQnRZWFJqYUdWelZHRm5JRDBnWkc5dE5TNXdjbVZrYVdOaGRHVnpMbWhoYzFSaFowNWhiV1VvYVcxd2IzSjBSV3hsYldWdWRDNTBZV2RPWVcxbEtUdGNiaUFnZG1GeUlHMWhkR05vWlhOSWNtVm1JRDBnWkc5dE5TNXdjbVZrYVdOaGRHVnpMbWhoYzBGMGRISldZV3gxWlNnbmFISmxaaWNzSUdSdmJUVXVaMlYwUVhSMGNtbGlkWFJsS0dsdGNHOXlkRVZzWlcxbGJuUXNJQ2RvY21WbUp5a3BPMXh1SUNCMllYSWdiV0YwWTJobGMxSmxiQ0E5SUdSdmJUVXVjSEpsWkdsallYUmxjeTVvWVhOQmRIUnlWbUZzZFdVb0ozSmxiQ2NzSUdSdmJUVXVaMlYwUVhSMGNtbGlkWFJsS0dsdGNHOXlkRVZzWlcxbGJuUXNJQ2R5Wld3bktTazdYRzRnSUhKbGRIVnliaUJrYjIwMUxuQnlaV1JwWTJGMFpYTXVRVTVFS0cxaGRHTm9aWE5VWVdjc0lHMWhkR05vWlhOSWNtVm1MQ0J0WVhSamFHVnpVbVZzS1R0Y2JuMWNibHh1THk4Z1ZFOUVUeWhoYW04cE9pQlNaV1poWTNSdmNpQnZkWFFnYjJZZ2RuVnNZMkZ1YVhwbElHbHVkRzhnWkc5dE5TNWNiblpoY2lCd2IyeDViV1Z5UlhoMFpYSnVZV3hUZEhsc1pTQTlJR1J2YlRVdWNISmxaR2xqWVhSbGN5NUJUa1FvWEc0Z0lHUnZiVFV1Y0hKbFpHbGpZWFJsY3k1b1lYTlVZV2RPWVcxbEtDZHNhVzVySnlrc1hHNGdJR1J2YlRVdWNISmxaR2xqWVhSbGN5NW9ZWE5CZEhSeVZtRnNkV1VvSjNKbGJDY3NJQ2RwYlhCdmNuUW5LU3hjYmlBZ1pHOXROUzV3Y21Wa2FXTmhkR1Z6TG1oaGMwRjBkSEpXWVd4MVpTZ25kSGx3WlNjc0lDZGpjM01uS1Z4dUtUdGNibHh1ZG1GeUlHVjRkR1Z5Ym1Gc1UyTnlhWEIwSUQwZ1pHOXROUzV3Y21Wa2FXTmhkR1Z6TGtGT1JDaGNiaUFnWkc5dE5TNXdjbVZrYVdOaGRHVnpMbWhoYzFSaFowNWhiV1VvSjNOamNtbHdkQ2NwTEZ4dUlDQmtiMjAxTG5CeVpXUnBZMkYwWlhNdWFHRnpRWFIwY2lnbmMzSmpKeWxjYmlrN1hHNWNiblpoY2lCcGMwaDBiV3hKYlhCdmNuUk9iMlJsSUQwZ1pHOXROUzV3Y21Wa2FXTmhkR1Z6TGtGT1JDaGNiaUFnWkc5dE5TNXdjbVZrYVdOaGRHVnpMbWhoYzFSaFowNWhiV1VvSjJ4cGJtc25LU3hjYmlBZ1pHOXROUzV3Y21Wa2FXTmhkR1Z6TG1oaGMwRjBkSEpXWVd4MVpTZ25jbVZzSnl3Z0oybHRjRzl5ZENjcExGeHVJQ0JrYjIwMUxuQnlaV1JwWTJGMFpYTXVUazlVS0Z4dUlDQWdJR1J2YlRVdWNISmxaR2xqWVhSbGN5NW9ZWE5CZEhSeVZtRnNkV1VvSjNSNWNHVW5MQ0FuWTNOekp5bGNiaUFnS1Z4dUtUdGNibHh1UVc1aGJIbDZaWEl1Y0hKdmRHOTBlWEJsTGw5cGJteHBibVZUZEhsc1pYTWdQU0JtZFc1amRHbHZiaUJmYVc1c2FXNWxVM1I1YkdWektHRnpkQ3dnYUhKbFppa2dlMXh1SUNCMllYSWdZM056VEdsdWEzTWdQU0JrYjIwMUxuRjFaWEo1UVd4c0tHRnpkQ3dnY0c5c2VXMWxja1Y0ZEdWeWJtRnNVM1I1YkdVcE8xeHVJQ0JqYzNOTWFXNXJjeTVtYjNKRllXTm9LR1oxYm1OMGFXOXVLR3hwYm1zcElIdGNiaUFnSUNCMllYSWdiR2x1YTBoeVpXWWdQU0JrYjIwMUxtZGxkRUYwZEhKcFluVjBaU2hzYVc1ckxDQW5hSEpsWmljcE8xeHVJQ0FnSUhaaGNpQjFjbWtnUFNCMWNtd3VjbVZ6YjJ4MlpTaG9jbVZtTENCc2FXNXJTSEpsWmlrN1hHNGdJQ0FnZG1GeUlHTnZiblJsYm5RZ1BTQjBhR2x6TGw5amIyNTBaVzUwVzNWeWFWMDdYRzRnSUNBZ2RtRnlJSE4wZVd4bElEMGdaRzl0TlM1amIyNXpkSEoxWTNSdmNuTXVaV3hsYldWdWRDZ25jM1I1YkdVbktUdGNiaUFnSUNCa2IyMDFMbk5sZEZSbGVIUkRiMjUwWlc1MEtITjBlV3hsTENBblhGeHVKeUFySUdOdmJuUmxiblFnS3lBblhGeHVKeWs3WEc0Z0lDQWdaRzl0TlM1eVpYQnNZV05sS0d4cGJtc3NJSE4wZVd4bEtUdGNiaUFnZlM1aWFXNWtLSFJvYVhNcEtUdGNiaUFnY21WMGRYSnVJR056YzB4cGJtdHpMbXhsYm1kMGFDQStJREE3WEc1OU8xeHVYRzVCYm1Gc2VYcGxjaTV3Y205MGIzUjVjR1V1WDJsdWJHbHVaVk5qY21sd2RITWdQU0JtZFc1amRHbHZiaUJmYVc1c2FXNWxVMk55YVhCMGN5aGhjM1FzSUdoeVpXWXBJSHRjYmlBZ2RtRnlJSE5qY21sd2RITWdQU0JrYjIwMUxuRjFaWEo1UVd4c0tHRnpkQ3dnWlhoMFpYSnVZV3hUWTNKcGNIUXBPMXh1SUNCelkzSnBjSFJ6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvYzJOeWFYQjBLU0I3WEc0Z0lDQWdkbUZ5SUhOamNtbHdkRWh5WldZZ1BTQmtiMjAxTG1kbGRFRjBkSEpwWW5WMFpTaHpZM0pwY0hRc0lDZHpjbU1uS1R0Y2JpQWdJQ0IyWVhJZ2RYSnBJRDBnZFhKc0xuSmxjMjlzZG1Vb2FISmxaaXdnYzJOeWFYQjBTSEpsWmlrN1hHNGdJQ0FnZG1GeUlHTnZiblJsYm5RZ1BTQjBhR2x6TGw5amIyNTBaVzUwVzNWeWFWMDdYRzRnSUNBZ2RtRnlJR2x1YkdsdVpXUWdQU0JrYjIwMUxtTnZibk4wY25WamRHOXljeTVsYkdWdFpXNTBLQ2R6WTNKcGNIUW5LVHRjYmlBZ0lDQmtiMjAxTG5ObGRGUmxlSFJEYjI1MFpXNTBLR2x1YkdsdVpXUXNJQ2RjWEc0bklDc2dZMjl1ZEdWdWRDQXJJQ2RjWEc0bktUdGNiaUFnSUNCa2IyMDFMbkpsY0d4aFkyVW9jMk55YVhCMExDQnBibXhwYm1Wa0tUdGNiaUFnZlM1aWFXNWtLSFJvYVhNcEtUdGNiaUFnY21WMGRYSnVJSE5qY21sd2RITXViR1Z1WjNSb0lENGdNRHRjYm4wN1hHNWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzVmYVc1c2FXNWxTVzF3YjNKMGN5QTlJR1oxYm1OMGFXOXVJRjlwYm14cGJtVkpiWEJ2Y25SektHRnpkQ3dnYUhKbFppd2diRzloWkdWa0tTQjdYRzRnSUhaaGNpQnBiWEJ2Y25SeklEMGdaRzl0TlM1eGRXVnllVUZzYkNoaGMzUXNJR2x6U0hSdGJFbHRjRzl5ZEU1dlpHVXBPMXh1SUNCcGJYQnZjblJ6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRvYUhSdGJFbHRjRzl5ZENrZ2UxeHVJQ0FnSUhaaGNpQnBiWEJ2Y25SSWNtVm1JRDBnWkc5dE5TNW5aWFJCZEhSeWFXSjFkR1VvYUhSdGJFbHRjRzl5ZEN3Z0oyaHlaV1luS1R0Y2JpQWdJQ0IyWVhJZ2RYSnBJRDBnZFhKc0xuSmxjMjlzZG1Vb2FISmxaaXdnYVcxd2IzSjBTSEpsWmlrN1hHNGdJQ0FnYVdZZ0tHeHZZV1JsWkZ0MWNtbGRLU0I3WEc0Z0lDQWdJQ0JrYjIwMUxuSmxiVzkyWlNob2RHMXNTVzF3YjNKMEtUdGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUdOdmJuUmxiblFnUFNCMGFHbHpMbWRsZEV4dllXUmxaRUZ6ZENoMWNta3NJR3h2WVdSbFpDazdYRzRnSUNBZ1pHOXROUzV5WlhCc1lXTmxLR2gwYld4SmJYQnZjblFzSUdOdmJuUmxiblFwTzF4dUlDQjlMbUpwYm1Rb2RHaHBjeWtwTzF4dUlDQnlaWFIxY200Z2FXMXdiM0owY3k1c1pXNW5kR2dnUGlBd08xeHVmVHRjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUdFZ2NISnZiV2x6WlNCeVpYTnZiSFpwYm1jZ2RHOGdZU0JtYjNKdElHOW1JSFJvWlNCQlUxUWdkMmwwYUNCaGJHd2diR2x1YTNNZ2NtVndiR0ZqWldSY2JpQXFJSGRwZEdnZ2RHaGxJR1J2WTNWdFpXNTBJSFJvWlhrZ2JHbHVheUIwYnk0Z0xtTnpjeUJoYm1RZ0xuTmpjbWx3ZENCbWFXeGxjeUJpWldOdmJXVWdKbXgwTzNOMGVXeGxKbWQwT3lCaGJtUmNiaUFxSUNac2REdHpZM0pwY0hRbVozUTdMQ0J5WlhOd1pXTjBhWFpsYkhrdVhHNGdLbHh1SUNvZ1ZHaGxJR1ZzWlcxbGJuUnpJR2x1SUhSb1pTQnNiMkZrWldRZ1pHOWpkVzFsYm5RZ1lYSmxJSFZ1Ylc5a2FXWnBaV1FnWm5KdmJTQjBhR1ZwY2lCdmNtbG5hVzVoYkZ4dUlDb2daRzlqZFcxbGJuUnpMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQm9jbVZtSUZSb1pTQmtiMk4xYldWdWRDQjBieUJzYjJGa0xseHVJQ29nUUhCaGNtRnRJSHRQWW1wbFkzUXVQSE4wY21sdVp5eGliMjlzWldGdVBqMTlJR3h2WVdSbFpDQkJiaUJ2WW1wbFkzUWdhMlY1WldRZ1lua2dZV3h5WldGa2VTQnNiMkZrWldRZ1pHOWpkVzFsYm5SekxseHVJQ29nUUhKbGRIVnliaUI3VUhKdmJXbHpaUzQ4Ukc5amRXMWxiblJCVTFRK2ZWeHVJQ292WEc1QmJtRnNlWHBsY2k1d2NtOTBiM1I1Y0dVdVoyVjBURzloWkdWa1FYTjBJRDBnWm5WdVkzUnBiMjRnWjJWMFRHOWhaR1ZrUVhOMEtHaHlaV1lzSUd4dllXUmxaQ2tnZTF4dUlDQnBaaUFvSVd4dllXUmxaQ2tnZTF4dUlDQWdJR3h2WVdSbFpDQTlJSHQ5TzF4dUlDQjlYRzRnSUd4dllXUmxaRnRvY21WbVhTQTlJSFJ5ZFdVN1hHNGdJSFpoY2lCd1lYSnpaV1JFYjJOMWJXVnVkQ0E5SUhSb2FYTXVjR0Z5YzJWa1JHOWpkVzFsYm5SelcyaHlaV1pkTzF4dUlDQjJZWElnWVc1aGJIbDZaV1JFYjJOMWJXVnVkQ0E5SUhSb2FYTXVhSFJ0YkZ0b2NtVm1YVHRjYmlBZ2RtRnlJR0Z6ZEVOdmNIa2dQU0JrYjIwMUxuQmhjbk5sS0dSdmJUVXVjMlZ5YVdGc2FYcGxLSEJoY25ObFpFUnZZM1Z0Wlc1MEtTazdYRzRnSUM4dklGZG9aVzVsZG1WeUlIZGxJR2x1YkdsdVpTQnpiMjFsZEdocGJtY3NJSEpsYzJWMElHbHViR2x1WldRZ2RHOGdkSEoxWlNCMGJ5QnJibTkzSUhSb1lYUWdZVzV2WVhSb1pYSmNiaUFnTHk4Z2FXNXNhVzVwYm1jZ2NHRnpjeUJwY3lCdVpXVmtaV1E3WEc0Z0lIUm9hWE11WDJsdWJHbHVaVk4wZVd4bGN5aGhjM1JEYjNCNUxDQm9jbVZtS1R0Y2JpQWdkR2hwY3k1ZmFXNXNhVzVsVTJOeWFYQjBjeWhoYzNSRGIzQjVMQ0JvY21WbUtUdGNiaUFnZEdocGN5NWZhVzVzYVc1bFNXMXdiM0owY3loaGMzUkRiM0I1TENCb2NtVm1MQ0JzYjJGa1pXUXBPMXh1SUNCeVpYUjFjbTRnWVhOMFEyOXdlVHRjYm4wN1hHNWNiaThxS2x4dUlDb2dRMkZzYkhNZ1lHUnZiVFV1Ym05a1pWZGhiR3RCYkd4Z0lHOXVJR1ZoWTJnZ1pHOWpkVzFsYm5RZ2RHaGhkQ0JnUVc1aGVYcHNaWEpnSUdoaGN5QnNZVzlrWldRdVhHNGdLaUJBY0dGeVlXMGdJSHRQWW1wbFkzUjlJSEJ5WldScFkyRjBaU0JCSUdSdmJUVWdjSEpsWkdsallYUmxMbHh1SUNvZ1FISmxkSFZ5YmlCN1QySnFaV04wZlZ4dUlDb3ZYRzVCYm1Gc2VYcGxjaTV3Y205MGIzUjVjR1V1Ym05a1pWZGhiR3RFYjJOMWJXVnVkSE1nUFNCbWRXNWpkR2x2YmlCdWIyUmxWMkZzYTBSdlkzVnRaVzUwY3lod2NtVmthV05oZEdVcElIdGNiaUFnWm05eUlDaDJZWElnYUhKbFppQnBiaUIwYUdsekxuQmhjbk5sWkVSdlkzVnRaVzUwY3lrZ2UxeHVJQ0FnSUhaaGNpQnRZWFJqYUNBOUlHUnZiVFV1Ym05a1pWZGhiR3NvZEdocGN5NXdZWEp6WldSRWIyTjFiV1Z1ZEhOYmFISmxabDBzSUhCeVpXUnBZMkYwWlNrN1hHNGdJQ0FnYVdZZ0tHMWhkR05vS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYldGMFkyZzdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdWRXeHNPMXh1ZlR0Y2JseHVMeW9xWEc0Z0tpQkRZV3hzY3lCZ1pHOXROUzV1YjJSbFYyRnNhMEZzYkdBZ2IyNGdaV0ZqYUNCa2IyTjFiV1Z1ZENCMGFHRjBJR0JCYm1GNWVteGxjbUFnYUdGeklHeGhiMlJsWkM1Y2JpQXFJRUJ3WVhKaGJTQWdlMDlpYW1WamRIMGdjSEpsWkdsallYUmxJRUVnWkc5dE5TQndjbVZrYVdOaGRHVXVYRzRnS2lCQWNtVjBkWEp1SUh0UFltcGxZM1I5WEc0Z0tpOWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzV1YjJSbFYyRnNhMEZzYkVSdlkzVnRaVzUwY3lBOUlHWjFibU4wYVc5dUlHNXZaR1ZYWVd4clJHOWpkVzFsYm5SektIQnlaV1JwWTJGMFpTa2dlMXh1SUNCMllYSWdjbVZ6ZFd4MGN5QTlJRnRkTzF4dUlDQm1iM0lnS0haaGNpQm9jbVZtSUdsdUlIUm9hWE11Y0dGeWMyVmtSRzlqZFcxbGJuUnpLU0I3WEc0Z0lDQWdkbUZ5SUc1bGQwNXZaR1Z6SUQwZ1pHOXROUzV1YjJSbFYyRnNhMEZzYkNoMGFHbHpMbkJoY25ObFpFUnZZM1Z0Wlc1MGMxdG9jbVZtWFN3Z2NISmxaR2xqWVhSbEtUdGNiaUFnSUNCeVpYTjFiSFJ6SUQwZ2NtVnpkV3gwY3k1amIyNWpZWFFvYm1WM1RtOWtaWE1wTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ5WlhOMWJIUnpPMXh1ZlR0Y2JseHVMeW9xSUVGdWJtOTBZWFJsY3lCaGJHd2diRzloWkdWa0lHMWxkR0ZrWVhSaElIZHBkR2dnYVhSeklHUnZZM1Z0Wlc1MFlYUnBiMjR1SUNvdlhHNUJibUZzZVhwbGNpNXdjbTkwYjNSNWNHVXVZVzV1YjNSaGRHVWdQU0JtZFc1amRHbHZiaUJoYm01dmRHRjBaU2dwSUh0Y2JpQWdhV1lnS0hSb2FYTXVabVZoZEhWeVpYTXViR1Z1WjNSb0lENGdNQ2tnZTF4dUlDQWdJSFpoY2lCbVpXRjBkWEpsUld3Z1BTQmtiMk56TG1abFlYUjFjbVZGYkdWdFpXNTBLSFJvYVhNdVptVmhkSFZ5WlhNcE8xeHVJQ0FnSUhSb2FYTXVaV3hsYldWdWRITXVkVzV6YUdsbWRDaG1aV0YwZFhKbFJXd3BPMXh1SUNBZ0lIUm9hWE11Wld4bGJXVnVkSE5DZVZSaFowNWhiV1ZiWm1WaGRIVnlaVVZzTG1selhTQTlJR1psWVhSMWNtVkZiRHRjYmlBZ2ZWeHVJQ0IyWVhJZ1ltVm9ZWFpwYjNKelFubE9ZVzFsSUQwZ2RHaHBjeTVpWldoaGRtbHZjbk5DZVU1aGJXVTdYRzRnSUhaaGNpQmxiR1Z0Wlc1MFNHVnNjR1Z5SUQwZ1puVnVZM1JwYjI0b1pHVnpZM0pwY0hSdmNpbDdYRzRnSUNBZ1pHOWpjeTVoYm01dmRHRjBaVVZzWlcxbGJuUW9aR1Z6WTNKcGNIUnZjaXdnWW1Wb1lYWnBiM0p6UW5sT1lXMWxLVHRjYmlBZ2ZUdGNiaUFnZEdocGN5NWxiR1Z0Wlc1MGN5NW1iM0pGWVdOb0tHVnNaVzFsYm5SSVpXeHdaWElwTzF4dUlDQjBhR2x6TG1KbGFHRjJhVzl5Y3k1bWIzSkZZV05vS0dWc1pXMWxiblJJWld4d1pYSXBPeUF2THlCVFlXMWxJSE5vWVhCbExseHVJQ0IwYUdsekxtSmxhR0YyYVc5eWN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtHSmxhR0YyYVc5eUtYdGNiaUFnSUNCcFppQW9ZbVZvWVhacGIzSXVhWE1nSVQwOUlHSmxhR0YyYVc5eUxuTjViV0p2YkNBbUppQmlaV2hoZG1sdmNpNXplVzFpYjJ3cElIdGNiaUFnSUNBZ0lIUm9hWE11WW1Wb1lYWnBiM0p6UW5sT1lXMWxXMkpsYUdGMmFXOXlMbk41YldKdmJGMGdQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdmVnh1SUNCOUxtSnBibVFvZEdocGN5a3BPMXh1ZlR0Y2JseHVablZ1WTNScGIyNGdZWFIwWVdOb1JHOXRUVzlrZFd4bEtIQmhjbk5sWkVsdGNHOXlkQ3dnWld4bGJXVnVkQ2tnZTF4dUlDQjJZWElnWkc5dFRXOWtkV3hsY3lBOUlIQmhjbk5sWkVsdGNHOXlkRnNuWkc5dExXMXZaSFZzWlNkZE8xeHVJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Dd2daRzl0VFc5a2RXeGxPeUJwSUR3Z1pHOXRUVzlrZFd4bGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR1J2YlUxdlpIVnNaU0E5SUdSdmJVMXZaSFZzWlhOYmFWMDdYRzRnSUNBZ2FXWWdLR1J2YlRVdVoyVjBRWFIwY21saWRYUmxLR1J2YlUxdlpIVnNaU3dnSjJsa0p5a2dQVDA5SUdWc1pXMWxiblF1YVhNcElIdGNiaUFnSUNBZ0lHVnNaVzFsYm5RdVpHOXRUVzlrZFd4bElEMGdaRzl0VFc5a2RXeGxPMXh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dVhHNHZLaW9nVW1WdGIzWmxjeUJ5WldSMWJtUmhiblFnY0hKdmNHVnlkR2xsY3lCbWNtOXRJSFJvWlNCamIyeHNaV04wWldRZ1pHVnpZM0pwY0hSdmNuTXVJQ292WEc1QmJtRnNlWHBsY2k1d2NtOTBiM1I1Y0dVdVkyeGxZVzRnUFNCbWRXNWpkR2x2YmlCamJHVmhiaWdwSUh0Y2JpQWdkR2hwY3k1bGJHVnRaVzUwY3k1bWIzSkZZV05vS0dSdlkzTXVZMnhsWVc1RmJHVnRaVzUwS1R0Y2JuMDdYRzVjYm0xdlpIVnNaUzVsZUhCdmNuUnpJRDBnUVc1aGJIbDZaWEk3WEc0aVhYMD0iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlc3V0aWwgICAgPSByZXF1aXJlKCcuL2VzdXRpbCcpO1xudmFyIGFzdFZhbHVlID0gcmVxdWlyZSgnLi9hc3QtdmFsdWUnKTtcblxudmFyIGFuYWx5emVQcm9wZXJ0aWVzID0gZnVuY3Rpb24obm9kZSkge1xuXG4gIHZhciBhbmFseXplZFByb3BzID0gW107XG5cbiAgaWYgKG5vZGUudHlwZSAhPSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICByZXR1cm4gYW5hbHl6ZWRQcm9wcztcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwcm9wZXJ0eSA9IG5vZGUucHJvcGVydGllc1tpXTtcbiAgICB2YXIgcHJvcCA9IGVzdXRpbC50b1Byb3BlcnR5RGVzY3JpcHRvcihwcm9wZXJ0eSk7XG4gICAgcHJvcC5wdWJsaXNoZWQgPSB0cnVlO1xuXG4gICAgaWYgKHByb3BlcnR5LnZhbHVlLnR5cGUgPT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgICAvKipcbiAgICAgICAqIFBhcnNlIHRoZSBleHByZXNzaW9uIGluc2lkZSBhIHByb3BlcnR5IG9iamVjdCBibG9jay5cbiAgICAgICAqIHByb3BlcnR5OiB7XG4gICAgICAgKiAgIGtleToge1xuICAgICAgICogICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAqICAgICBub3RpZnk6IHRydWUsXG4gICAgICAgKiAgICAgdmFsdWU6IC0xLFxuICAgICAgICogICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgICogICAgIHJlZmxlY3RUb0F0dHJpYnV0ZTogdHJ1ZVxuICAgICAgICogICB9XG4gICAgICAgKiB9XG4gICAgICAgKi9cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcHJvcGVydHkudmFsdWUucHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgcHJvcGVydHlBcmcgPSBwcm9wZXJ0eS52YWx1ZS5wcm9wZXJ0aWVzW2pdO1xuICAgICAgICB2YXIgcHJvcGVydHlLZXkgPSBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcocHJvcGVydHlBcmcua2V5KTtcblxuICAgICAgICBzd2l0Y2gocHJvcGVydHlLZXkpIHtcbiAgICAgICAgICBjYXNlICd0eXBlJzoge1xuICAgICAgICAgICAgcHJvcC50eXBlID0gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKHByb3BlcnR5QXJnLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgdHlwZSBpbiBwcm9wZXJ0eSBvYmplY3QuJyxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogcHJvcGVydHlBcmcubG9jLnN0YXJ0XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ25vdGlmeSc6IHtcbiAgICAgICAgICAgIHByb3Aubm90aWZ5ID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHByb3Aubm90aWZ5ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHByb3Aubm90aWZ5ID0gYXN0VmFsdWUuQ0FOVF9DT05WRVJUO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdvYnNlcnZlcic6IHtcbiAgICAgICAgICAgIHByb3Aub2JzZXJ2ZXIgPSBhc3RWYWx1ZS5leHByZXNzaW9uVG9WYWx1ZShwcm9wZXJ0eUFyZy52YWx1ZSk7XG4gICAgICAgICAgICBwcm9wLm9ic2VydmVyTm9kZSA9IHByb3BlcnR5QXJnLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHByb3Aub2JzZXJ2ZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgcHJvcC5vYnNlcnZlciA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVhZE9ubHknOiB7XG4gICAgICAgICAgICBwcm9wLnJlYWRPbmx5ID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHByb3AucmVhZE9ubHkgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgcHJvcC5yZWFkT25seSA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVmbGVjdFRvQXR0cmlidXRlJzoge1xuICAgICAgICAgICAgcHJvcC5yZWZsZWN0VG9BdHRyaWJ1dGUgPSBhc3RWYWx1ZS5leHByZXNzaW9uVG9WYWx1ZShwcm9wZXJ0eUFyZyk7XG4gICAgICAgICAgICBpZiAocHJvcC5yZWZsZWN0VG9BdHRyaWJ1dGUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgcHJvcC5yZWZsZWN0VG9BdHRyaWJ1dGUgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3ZhbHVlJzoge1xuICAgICAgICAgICAgcHJvcC5kZWZhdWx0ID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcudmFsdWUpO1xuICAgICAgICAgICAgaWYgKHByb3AuZGVmYXVsdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBwcm9wLmRlZmF1bHQgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXByb3AudHlwZSkge1xuICAgICAgdGhyb3cge1xuICAgICAgICBtZXNzYWdlOiAnVW5hYmxlIHRvIGRldGVybWluZSBuYW1lIGZvciBwcm9wZXJ0eSBrZXkuJyxcbiAgICAgICAgbG9jYXRpb246IG5vZGUubG9jLnN0YXJ0XG4gICAgICB9O1xuICAgIH1cblxuICAgIGFuYWx5emVkUHJvcHMucHVzaChwcm9wKTtcbiAgfVxuICByZXR1cm4gYW5hbHl6ZWRQcm9wcztcbn07XG5cblxubW9kdWxlLmV4cG9ydHMgPSBhbmFseXplUHJvcGVydGllcztcblxuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG4vLyB1c2VmdWwgdG9vbCB0byB2aXN1YWxpemUgQVNUOiBodHRwOi8vZXNwcmltYS5vcmcvZGVtby9wYXJzZS5odG1sXG5cbi8qKlxuICogY29udmVydHMgbGl0ZXJhbDoge1widHlwZVwiOiBcIkxpdGVyYWxcIiwgXCJ2YWx1ZVwiOiA1LCAgXCJyYXdcIjogXCI1XCIgfVxuICogdG8gc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGxpdGVyYWxUb1ZhbHVlKGxpdGVyYWwpIHtcbiAgcmV0dXJuIGxpdGVyYWwudmFsdWU7XG59XG5cbi8qKlxuICogY29udmVydHMgdW5hcnkgdG8gc3RyaW5nXG4gKiB1bmFyeTogeyB0eXBlOiAnVW5hcnlFeHByZXNzaW9uJywgb3BlcmF0b3I6ICctJywgYXJndW1lbnQ6IHsgLi4uIH0gfVxuICovXG5mdW5jdGlvbiB1bmFyeVRvVmFsdWUodW5hcnkpIHtcbiAgdmFyIGFyZ1ZhbHVlID0gZXhwcmVzc2lvblRvVmFsdWUodW5hcnkuYXJndW1lbnQpO1xuICBpZiAoYXJnVmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm47XG4gIHJldHVybiB1bmFyeS5vcGVyYXRvciArIGFyZ1ZhbHVlO1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIGlkZW50aWZpZXIgdG8gaXRzIHZhbHVlXG4gKiBpZGVudGlmaWVyIHsgXCJ0eXBlXCI6IFwiSWRlbnRpZmllclwiLCBcIm5hbWVcIjogXCJOdW1iZXIgfVxuICovXG5mdW5jdGlvbiBpZGVudGlmaWVyVG9WYWx1ZShpZGVudGlmaWVyKSB7XG4gIHJldHVybiBpZGVudGlmaWVyLm5hbWU7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gaXMgYSBibG9jayBzdGF0ZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGZ1bmN0aW9uRGVjbGFyYXRpb25Ub1ZhbHVlKGZuKSB7XG4gIGlmIChmbi5ib2R5LnR5cGUgPT0gXCJCbG9ja1N0YXRlbWVudFwiKVxuICAgIHJldHVybiBibG9ja1N0YXRlbWVudFRvVmFsdWUoZm4uYm9keSk7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uRXhwcmVzc2lvblRvVmFsdWUoZm4pIHtcbiAgaWYgKGZuLmJvZHkudHlwZSA9PSBcIkJsb2NrU3RhdGVtZW50XCIpXG4gICAgcmV0dXJuIGJsb2NrU3RhdGVtZW50VG9WYWx1ZShmbi5ib2R5KTtcbn1cbi8qKlxuICogQmxvY2sgc3RhdGVtZW50OiBmaW5kIGxhc3QgcmV0dXJuIHN0YXRlbWVudCwgYW5kIHJldHVybiBpdHMgdmFsdWVcbiAqL1xuZnVuY3Rpb24gYmxvY2tTdGF0ZW1lbnRUb1ZhbHVlKGJsb2NrKSB7XG4gIGZvciAodmFyIGk9YmxvY2suYm9keS5sZW5ndGggLSAxOyBpPj0gMDsgaS0tKSB7XG4gICAgaWYgKGJsb2NrLmJvZHlbaV0udHlwZSA9PT0gXCJSZXR1cm5TdGF0ZW1lbnRcIilcbiAgICAgIHJldHVybiByZXR1cm5TdGF0ZW1lbnRUb1ZhbHVlKGJsb2NrLmJvZHlbaV0pO1xuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIHJldHVybidzIGFyZ3VtZW50XG4gKi9cbmZ1bmN0aW9uIHJldHVyblN0YXRlbWVudFRvVmFsdWUocmV0KSB7XG4gIHJldHVybiBleHByZXNzaW9uVG9WYWx1ZShyZXQuYXJndW1lbnQpO1xufVxuXG4vKipcbiAqIEVuY2xvc2UgY29udGFpbmluZyB2YWx1ZXMgaW4gW11cbiAqL1xuZnVuY3Rpb24gYXJyYXlFeHByZXNzaW9uVG9WYWx1ZShhcnJ5KSB7XG4gIHZhciB2YWx1ZSA9ICdbJztcbiAgZm9yICh2YXIgaT0wOyBpPGFycnkuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdiA9IGV4cHJlc3Npb25Ub1ZhbHVlKGFycnkuZWxlbWVudHNbaV0pO1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQpXG4gICAgICBjb250aW51ZTtcbiAgICBpZiAoaSAhPT0gMClcbiAgICAgIHZhbHVlICs9ICcsICc7XG4gICAgdmFsdWUgKz0gdjtcbiAgfVxuICB2YWx1ZSArPSAnXSc7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBNYWtlIGl0IGxvb2sgbGlrZSBhbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gb2JqZWN0RXhwcmVzc2lvblRvVmFsdWUob2JqKSB7XG4gIHZhciB2YWx1ZSA9ICd7JztcbiAgZm9yICh2YXIgaT0wOyBpPG9iai5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGsgPSBleHByZXNzaW9uVG9WYWx1ZShvYmoucHJvcGVydGllc1tpXS5rZXkpO1xuICAgIHZhciB2ID0gZXhwcmVzc2lvblRvVmFsdWUob2JqLnByb3BlcnRpZXNbaV0udmFsdWUpO1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQpXG4gICAgICBjb250aW51ZTtcbiAgICBpZiAoaSAhPT0gMClcbiAgICAgIHZhbHVlICs9ICcsICc7XG4gICAgdmFsdWUgKz0gJ1wiJyArIGsgKyAnXCI6ICcgKyB2O1xuICB9XG4gIHZhbHVlICs9ICd9JztcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIE1lbWJlckV4cHJlc3Npb24gcmVmZXJlbmNlcyBhIHZhcmlhYmxlIHdpdGggbmFtZVxuICovXG5mdW5jdGlvbiBtZW1iZXJFeHByZXNzaW9uVG9WYWx1ZShtZW1iZXIpIHtcbiAgcmV0dXJuIGV4cHJlc3Npb25Ub1ZhbHVlKG1lbWJlci5vYmplY3QpICsgXCIuXCIgKyBleHByZXNzaW9uVG9WYWx1ZShtZW1iZXIucHJvcGVydHkpO1xufVxuXG4vKipcbiAqIFRyaWVzIHRvIGdldCBhIHZhbHVlIGZyb20gZXhwcmVzc2lvbi4gSGFuZGxlcyBMaXRlcmFsLCBVbmFyeUV4cHJlc3Npb25cbiAqIHJldHVybnMgdW5kZWZpbmVkIG9uIGZhaWx1cmVcbiAqIHZhbHVlRXhwcmVzc2lvbiBleGFtcGxlOlxuICogeyB0eXBlOiBcIkxpdGVyYWxcIixcbiAqL1xuZnVuY3Rpb24gZXhwcmVzc2lvblRvVmFsdWUodmFsdWVFeHByZXNzaW9uKSB7XG4gIHN3aXRjaCh2YWx1ZUV4cHJlc3Npb24udHlwZSkge1xuICAgIGNhc2UgJ0xpdGVyYWwnOlxuICAgICAgcmV0dXJuIGxpdGVyYWxUb1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiB1bmFyeVRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiBpZGVudGlmaWVyVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ0Z1bmN0aW9uRGVjbGFyYXRpb24nOlxuICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVjbGFyYXRpb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnRnVuY3Rpb25FeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiBmdW5jdGlvbkV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnQXJyYXlFeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiBhcnJheUV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnT2JqZWN0RXhwcmVzc2lvbic6XG4gICAgICByZXR1cm4gb2JqZWN0RXhwcmVzc2lvblRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdJZGVudGlmaWVyJzpcbiAgICAgIHJldHVybiBpZGVudGlmaWVyVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ01lbWJlckV4cHJlc3Npb24nOlxuICAgICAgcmV0dXJuIG1lbWJlckV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG52YXIgQ0FOVF9DT05WRVJUID0gJ1VOS05PV04nO1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENBTlRfQ09OVkVSVDogQ0FOVF9DT05WRVJULFxuICBleHByZXNzaW9uVG9WYWx1ZTogZXhwcmVzc2lvblRvVmFsdWVcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGRvY3MgICA9IHJlcXVpcmUoJy4vZG9jcycpO1xudmFyIGVzdXRpbCA9IHJlcXVpcmUoJy4vZXN1dGlsJyk7XG52YXIganNkb2MgID0gcmVxdWlyZSgnLi9qc2RvYycpO1xudmFyIGFuYWx5emVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi9hbmFseXplLXByb3BlcnRpZXMnKTtcbnZhciBhc3RWYWx1ZSA9IHJlcXVpcmUoJy4vYXN0LXZhbHVlLmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmVoYXZpb3JGaW5kZXIoKSB7XG4gIC8qKiBAdHlwZSB7IUFycmF5PEJlaGF2aW9yRGVzY3JpcHRvcj59IFRoZSBiZWhhdmlvcnMgd2UndmUgZm91bmQuICovXG4gIHZhciBiZWhhdmlvcnMgPSBbXTtcblxuICB2YXIgY3VycmVudEJlaGF2aW9yID0gbnVsbDtcblxuICAvKipcbiAgICogc3BlY2lhbC1jYXNlIHByb3BlcnRpZXNcbiAgICovXG4gIHZhciBwcm9wZXJ0eUhhbmRsZXJzID0ge1xuICAgIHByb3BlcnRpZXM6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBwcm9wcyA9IGFuYWx5emVQcm9wZXJ0aWVzKG5vZGUpO1xuXG4gICAgICBmb3IgKHZhciBpPTA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjdXJyZW50QmVoYXZpb3IucHJvcGVydGllcy5wdXNoKHByb3BzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIG1lcmdlcyBiZWhhdmlvciB3aXRoIHByZWV4aXN0aW5nIGJlaGF2aW9yIHdpdGggdGhlIHNhbWUgbmFtZS5cbiAgICogaGVyZSB0byBzdXBwb3J0IG11bHRpcGxlIEBwb2x5bWVyQmVoYXZpb3IgdGFncyByZWZlcnJpbmdcbiAgICogdG8gc2FtZSBiZWhhdmlvci4gU2VlIGlyb24tbXVsdGktc2VsZWN0YWJsZSBmb3IgZXhhbXBsZS5cbiAgICovXG4gIGZ1bmN0aW9uIG1lcmdlQmVoYXZpb3IobmV3QmVoYXZpb3IpIHtcbiAgICB2YXIgaXNCZWhhdmlvckltcGwgPSBmdW5jdGlvbihiKSB7IC8vIGZpbHRlciBvdXQgQmVoYXZpb3JJbXBsXG4gICAgICByZXR1cm4gYi5pbmRleE9mKG5ld0JlaGF2aW9yLmlzKSA9PT0gLTE7XG4gICAgfTtcbiAgICBmb3IgKHZhciBpPTA7IGk8YmVoYXZpb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmV3QmVoYXZpb3IuaXMgIT09IGJlaGF2aW9yc1tpXS5pcylcbiAgICAgICAgY29udGludWU7XG4gICAgICAvLyBtZXJnZSBkZXNjLCBsb25nZXN0IGRlc2Mgd2luc1xuICAgICAgaWYgKG5ld0JlaGF2aW9yLmRlc2MpIHtcbiAgICAgICAgaWYgKGJlaGF2aW9yc1tpXS5kZXNjKSB7XG4gICAgICAgICAgaWYgKG5ld0JlaGF2aW9yLmRlc2MubGVuZ3RoID4gYmVoYXZpb3JzW2ldLmRlc2MubGVuZ3RoKVxuICAgICAgICAgICAgYmVoYXZpb3JzW2ldLmRlc2MgPSBuZXdCZWhhdmlvci5kZXNjO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGJlaGF2aW9yc1tpXS5kZXNjID0gbmV3QmVoYXZpb3IuZGVzYztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gbWVyZ2UgZGVtb3NcbiAgICAgIGJlaGF2aW9yc1tpXS5kZW1vcyA9IChiZWhhdmlvcnNbaV0uZGVtb3MgfHwgW10pLmNvbmNhdChuZXdCZWhhdmlvci5kZW1vcyB8fCBbXSk7XG4gICAgICAvLyBtZXJnZSBldmVudHMsXG4gICAgICBiZWhhdmlvcnNbaV0uZXZlbnRzID0gKGJlaGF2aW9yc1tpXS5ldmVudHMgfHwgW10pLmNvbmNhdChuZXdCZWhhdmlvci5ldmVudHMgfHwgW10pO1xuICAgICAgLy8gbWVyZ2UgcHJvcGVydGllc1xuICAgICAgYmVoYXZpb3JzW2ldLnByb3BlcnRpZXMgPSAoYmVoYXZpb3JzW2ldLnByb3BlcnRpZXMgfHwgW10pLmNvbmNhdChuZXdCZWhhdmlvci5wcm9wZXJ0aWVzIHx8IFtdKTtcbiAgICAgIC8vIG1lcmdlIGJlaGF2aW9yc1xuICAgICAgYmVoYXZpb3JzW2ldLmJlaGF2aW9ycyA9XG4gICAgICAgIChiZWhhdmlvcnNbaV0uYmVoYXZpb3JzIHx8IFtdKS5jb25jYXQobmV3QmVoYXZpb3IuYmVoYXZpb3JzIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKGlzQmVoYXZpb3JJbXBsKTtcbiAgICAgIHJldHVybiBiZWhhdmlvcnNbaV07XG4gICAgfVxuICAgIHJldHVybiBuZXdCZWhhdmlvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRzIHRoZSBleHByZXNzaW9uIHJlcHJlc2VudGluZyBhIGJlaGF2aW9yIGZyb20gYSBub2RlLlxuICAgKi9cbiAgZnVuY3Rpb24gYmVoYXZpb3JFeHByZXNzaW9uKG5vZGUpIHtcbiAgICBzd2l0Y2gobm9kZS50eXBlKSB7XG4gICAgICBjYXNlICdFeHByZXNzaW9uU3RhdGVtZW50JzpcbiAgICAgICAgcmV0dXJuIG5vZGUuZXhwcmVzc2lvbi5yaWdodDtcbiAgICAgIGNhc2UgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nOlxuICAgICAgICByZXR1cm4gbm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoID4gMCA/IG5vZGUuZGVjbGFyYXRpb25zWzBdLmluaXQgOiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja3Mgd2hldGhlciBhbiBleHByZXNzaW9uIGlzIGEgc2ltcGxlIGFycmF5IGNvbnRhaW5pbmcgb25seSBtZW1iZXJcbiAgICogZXhwcmVzc2lvbnMgb3IgaWRlbnRpZmllcnMuXG4gICAqL1xuICBmdW5jdGlvbiBpc1NpbXBsZUJlaGF2aW9yQXJyYXkoZXhwcmVzc2lvbikge1xuICAgIGlmICghZXhwcmVzc2lvbiB8fCBleHByZXNzaW9uLnR5cGUgIT09ICdBcnJheUV4cHJlc3Npb24nKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaT0wOyBpIDwgZXhwcmVzc2lvbi5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGV4cHJlc3Npb24uZWxlbWVudHNbaV0udHlwZSAhPT0gJ01lbWJlckV4cHJlc3Npb24nICYmXG4gICAgICAgICAgZXhwcmVzc2lvbi5lbGVtZW50c1tpXS50eXBlICE9PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhciB0ZW1wbGF0aXplciA9IFwiUG9seW1lci5UZW1wbGF0aXplclwiO1xuXG4gIHZhciB2aXNpdG9ycyA9IHtcblxuICAgIC8qKlxuICAgICAqIExvb2sgZm9yIG9iamVjdCBkZWNsYXJhdGlvbnMgd2l0aCBAYmVoYXZpb3IgaW4gdGhlIGRvY3MuXG4gICAgICovXG4gICAgZW50ZXJWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggIT09IDEpIHJldHVybjsgIC8vIEFtYmlndW91cy5cbiAgICAgIHRoaXMuX2luaXRCZWhhdmlvcihub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcobm9kZS5kZWNsYXJhdGlvbnNbMF0uaWQpO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIExvb2sgZm9yIG9iamVjdCBhc3NpZ25tZW50cyB3aXRoIEBwb2x5bWVyQmVoYXZpb3IgaW4gdGhlIGRvY3MuXG4gICAgICovXG4gICAgZW50ZXJBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSwgcGFyZW50KSB7XG4gICAgICB0aGlzLl9pbml0QmVoYXZpb3IocGFyZW50LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcobm9kZS5sZWZ0KTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBfcGFyc2VDaGFpbmVkQmVoYXZpb3JzOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAvLyBpZiBjdXJyZW50IGJlaGF2aW9yIGlzIHBhcnQgb2YgYW4gYXJyYXksIGl0IGdldHMgZXh0ZW5kZWQgYnkgb3RoZXIgYmVoYXZpb3JzXG4gICAgICAvLyBpbnNpZGUgdGhlIGFycmF5LiBFeDpcbiAgICAgIC8vIFBvbHltZXIuSXJvbk11bHRpU2VsZWN0YWJsZUJlaGF2aW9yID0gWyB7Li4uLn0sIFBvbHltZXIuSXJvblNlbGVjdGFibGVCZWhhdmlvcl1cbiAgICAgIC8vIFdlIGFkZCB0aGVzZSB0byBiZWhhdmlvcnMgYXJyYXlcbiAgICAgIHZhciBleHByZXNzaW9uID0gYmVoYXZpb3JFeHByZXNzaW9uKG5vZGUpO1xuICAgICAgdmFyIGNoYWluZWQgPSBbXTtcbiAgICAgIGlmIChleHByZXNzaW9uICYmIGV4cHJlc3Npb24udHlwZSA9PT0gJ0FycmF5RXhwcmVzc2lvbicpIHtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgZXhwcmVzc2lvbi5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChleHByZXNzaW9uLmVsZW1lbnRzW2ldLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyB8fFxuICAgICAgICAgICAgICBleHByZXNzaW9uLmVsZW1lbnRzW2ldLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICAgICAgY2hhaW5lZC5wdXNoKGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKGV4cHJlc3Npb24uZWxlbWVudHNbaV0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYWluZWQubGVuZ3RoID4gMClcbiAgICAgICAgICBjdXJyZW50QmVoYXZpb3IuYmVoYXZpb3JzID0gY2hhaW5lZDtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRCZWhhdmlvcjogZnVuY3Rpb24obm9kZSwgZ2V0TmFtZSkge1xuICAgICAgdmFyIGNvbW1lbnQgPSBlc3V0aWwuZ2V0QXR0YWNoZWRDb21tZW50KG5vZGUpO1xuICAgICAgdmFyIHN5bWJvbCA9IGdldE5hbWUoKTtcbiAgICAgIC8vIFF1aWNrbHkgZmlsdGVyIGRvd24gdG8gcG90ZW50aWFsIGNhbmRpZGF0ZXMuXG4gICAgICBpZiAoIWNvbW1lbnQgfHwgY29tbWVudC5pbmRleE9mKCdAcG9seW1lckJlaGF2aW9yJykgPT09IC0xKSB7XG4gICAgICAgIGlmIChzeW1ib2wgIT09IHRlbXBsYXRpemVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cblxuICAgICAgY3VycmVudEJlaGF2aW9yID0ge1xuICAgICAgICB0eXBlOiAnYmVoYXZpb3InLFxuICAgICAgICBkZXNjOiBjb21tZW50LFxuICAgICAgICBldmVudHM6IGVzdXRpbC5nZXRFdmVudENvbW1lbnRzKG5vZGUpLm1hcCggZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4geyBkZXNjOiBldmVudH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuXG4gICAgICBkb2NzLmFubm90YXRlQmVoYXZpb3IoY3VycmVudEJlaGF2aW9yKTtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGFjdHVhbGx5IHBhcnNlZCBhIGJlaGF2aW9yIHRhZyFcbiAgICAgIGlmICghanNkb2MuaGFzVGFnKGN1cnJlbnRCZWhhdmlvci5qc2RvYywgJ3BvbHltZXJCZWhhdmlvcicpICYmXG4gICAgICAgICAgc3ltYm9sICE9PSB0ZW1wbGF0aXplcikge1xuICAgICAgICBjdXJyZW50QmVoYXZpb3IgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBuYW1lID0ganNkb2MuZ2V0VGFnKGN1cnJlbnRCZWhhdmlvci5qc2RvYywgJ3BvbHltZXJCZWhhdmlvcicsICduYW1lJyk7XG4gICAgICBjdXJyZW50QmVoYXZpb3Iuc3ltYm9sID0gc3ltYm9sO1xuICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIG5hbWUgPSBjdXJyZW50QmVoYXZpb3Iuc3ltYm9sO1xuICAgICAgfVxuICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGRldGVybWluZSBuYW1lIGZvciBAcG9seW1lckJlaGF2aW9yOicsIGNvbW1lbnQpO1xuICAgICAgfVxuICAgICAgY3VycmVudEJlaGF2aW9yLmlzID0gbmFtZTtcblxuICAgICAgdGhpcy5fcGFyc2VDaGFpbmVkQmVoYXZpb3JzKG5vZGUpO1xuXG4gICAgICBjdXJyZW50QmVoYXZpb3IgPSBtZXJnZUJlaGF2aW9yKGN1cnJlbnRCZWhhdmlvcik7XG5cbiAgICAgIC8vIFNvbWUgYmVoYXZpb3JzIGFyZSBqdXN0IGxpc3RzIG9mIG90aGVyIGJlaGF2aW9ycy4gSWYgdGhpcyBpcyBvbmUgdGhlblxuICAgICAgLy8gYWRkIGl0IHRvIGJlaGF2aW9ycyByaWdodCBhd2F5LlxuICAgICAgaWYgKGlzU2ltcGxlQmVoYXZpb3JBcnJheShiZWhhdmlvckV4cHJlc3Npb24obm9kZSkpKSB7XG4gICAgICAgIC8vIFRPRE8oYWpvKTogQWRkIGEgdGVzdCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBgcHJvcGVydGllc2AuXG4gICAgICAgIGlmICghY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMpIGN1cnJlbnRCZWhhdmlvci5wcm9wZXJ0aWVzID0gW107XG4gICAgICAgIGlmIChiZWhhdmlvcnMuaW5kZXhPZihjdXJyZW50QmVoYXZpb3IpID09PSAtMSlcbiAgICAgICAgICBiZWhhdmlvcnMucHVzaChjdXJyZW50QmVoYXZpb3IpO1xuICAgICAgICBjdXJyZW50QmVoYXZpb3IgPSBudWxsO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgb2JqZWN0IGV4cHJlc3Npb24gYWZ0ZXIgc3VjaCBhbiBhc3NpZ25tZW50IGlzIHRoZVxuICAgICAqIGJlaGF2aW9yJ3MgZGVjbGFyYXRpb24uIFNlZW1zIHRvIGJlIGEgZGVjZW50IGFzc3VtcHRpb24gZm9yIG5vdy5cbiAgICAgKi9cbiAgICBlbnRlck9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgaWYgKCFjdXJyZW50QmVoYXZpb3IgfHwgY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMpIHJldHVybjtcblxuICAgICAgY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMgPSBjdXJyZW50QmVoYXZpb3IucHJvcGVydGllcyB8fCBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wID0gbm9kZS5wcm9wZXJ0aWVzW2ldO1xuICAgICAgICB2YXIgbmFtZSA9IGVzdXRpbC5vYmplY3RLZXlUb1N0cmluZyhwcm9wLmtleSk7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDYW50IGRldGVybWluZSBuYW1lIGZvciBwcm9wZXJ0eSBrZXkuJyxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBub2RlLmxvYy5zdGFydFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgaW4gcHJvcGVydHlIYW5kbGVycykge1xuICAgICAgICAgIHByb3BlcnR5SGFuZGxlcnNbbmFtZV0ocHJvcC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMucHVzaChlc3V0aWwudG9Qcm9wZXJ0eURlc2NyaXB0b3IocHJvcCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiZWhhdmlvcnMucHVzaChjdXJyZW50QmVoYXZpb3IpO1xuICAgICAgY3VycmVudEJlaGF2aW9yID0gbnVsbDtcbiAgICB9LFxuXG4gIH07XG5cbiAgcmV0dXJuIHt2aXNpdG9yczogdmlzaXRvcnMsIGJlaGF2aW9yczogYmVoYXZpb3JzfTtcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbid1c2Ugc3RyaWN0JztcblxuLy8ganNoaW50IG5vZGU6dHJ1ZVxuXG52YXIganNkb2MgPSByZXF1aXJlKCcuL2pzZG9jJyk7XG5cbnZhciBkb201ID0gcmVxdWlyZSgnZG9tNScpO1xuXG4vKiogUHJvcGVydGllcyBvbiBlbGVtZW50IHByb3RvdHlwZXMgdGhhdCBhcmUgcHVyZWx5IGNvbmZpZ3VyYXRpb24uICovXG52YXIgRUxFTUVOVF9DT05GSUdVUkFUSU9OID0gW1xuICAnYXR0YWNoZWQnLFxuICAnYXR0cmlidXRlQ2hhbmdlZCcsXG4gICdjb25maWd1cmUnLFxuICAnY29uc3RydWN0b3InLFxuICAnY3JlYXRlZCcsXG4gICdkZXRhY2hlZCcsXG4gICdlbmFibGVDdXN0b21TdHlsZVByb3BlcnRpZXMnLFxuICAnZXh0ZW5kcycsXG4gICdob3N0QXR0cmlidXRlcycsXG4gICdpcycsXG4gICdsaXN0ZW5lcnMnLFxuICAnbWl4aW5zJyxcbiAgJ29ic2VydmVycycsXG4gICdwcm9wZXJ0aWVzJyxcbiAgJ3JlYWR5JyxcbiAgJ3JlZ2lzdGVyZWQnXG5dO1xuXG4vKiogVGFncyB1bmRlcnN0b29kIGJ5IHRoZSBhbm5vdGF0aW9uIHByb2Nlc3MsIHRvIGJlIHJlbW92ZWQgZHVyaW5nIGBjbGVhbmAuICovXG52YXIgSEFORExFRF9UQUdTID0gW1xuICAncGFyYW0nLFxuICAncmV0dXJuJyxcbiAgJ3R5cGUnLFxuXTtcblxuLyoqXG4gKiBBbm5vdGF0ZXMgSHlkcm9seXNpcyBkZXNjcmlwdG9ycywgcHJvY2Vzc2luZyBhbnkgYGRlc2NgIHByb3BlcnRpZXMgYXMgSlNEb2MuXG4gKlxuICogWW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIGEgbW9yZSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIHRoaXMsIHN1Y2ggYXNcbiAqIGBhbm5vdGF0ZUVsZW1lbnRgLlxuICpcbiAqIFByb2Nlc3NlZCBKU0RvYyB2YWx1ZXMgd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSB2aWEgdGhlIGBqc2RvY2AgcHJvcGVydHkgb24gYVxuICogZGVzY3JpcHRvciBub2RlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG5vZGUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGRlc2NyaXB0b3IgdGhhdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlKGRlc2NyaXB0b3IpIHtcbiAgaWYgKCFkZXNjcmlwdG9yIHx8IGRlc2NyaXB0b3IuanNkb2MpIHJldHVybiBkZXNjcmlwdG9yO1xuXG4gIGlmICh0eXBlb2YgZGVzY3JpcHRvci5kZXNjID09PSAnc3RyaW5nJykge1xuICAgIGRlc2NyaXB0b3IuanNkb2MgPSBqc2RvYy5wYXJzZUpzZG9jKGRlc2NyaXB0b3IuZGVzYyk7XG4gICAgLy8gV2Ugd2FudCB0byBwcmVzZW50IHRoZSBub3JtYWxpemVkIGZvcm0gb2YgYSBkZXNjcmlwdG9yLlxuICAgIGRlc2NyaXB0b3IuanNkb2Mub3JpZyA9IGRlc2NyaXB0b3IuZGVzYztcbiAgICBkZXNjcmlwdG9yLmRlc2MgICAgICAgPSBkZXNjcmlwdG9yLmpzZG9jLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIEBldmVudCwgQGhlcm8sICYgQGRlbW8gdGFnc1xuICovXG5mdW5jdGlvbiBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIoZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5ldmVudHMpIHtcbiAgICBkZXNjcmlwdG9yLmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBfYW5ub3RhdGVFdmVudChldmVudCk7XG4gICAgfSk7XG4gICAgZGVzY3JpcHRvci5ldmVudHMuc29ydCggZnVuY3Rpb24oYSxiKSB7XG4gICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICB9KTtcbiAgfVxuICBkZXNjcmlwdG9yLmRlbW9zID0gW107XG4gIGlmIChkZXNjcmlwdG9yLmpzZG9jICYmIGRlc2NyaXB0b3IuanNkb2MudGFncykge1xuICAgIGRlc2NyaXB0b3IuanNkb2MudGFncy5mb3JFYWNoKCBmdW5jdGlvbih0YWcpIHtcbiAgICAgIHN3aXRjaCh0YWcudGFnKSB7XG4gICAgICAgIGNhc2UgJ2hlcm8nOlxuICAgICAgICAgIGRlc2NyaXB0b3IuaGVybyA9IHRhZy5uYW1lIHx8ICdoZXJvLnBuZyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RlbW8nOlxuICAgICAgICAgIGRlc2NyaXB0b3IuZGVtb3MucHVzaCh7XG4gICAgICAgICAgICBkZXNjOiB0YWcuZGVzY3JpcHRpb24gfHwgJ2RlbW8nLFxuICAgICAgICAgICAgcGF0aDogdGFnLm5hbWUgfHwgJ2RlbW8vaW5kZXguaHRtbCdcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXRjaEJ5TmFtZShwcm9wYSwgcHJvcGIpIHtcbiAgcmV0dXJuIHByb3BhLm5hbWUgPT0gcHJvcGIubmFtZTtcbn1cblxuZnVuY3Rpb24gY29weVByb3BlcnRpZXMoZnJvbSwgdG8sIGJlaGF2aW9yc0J5TmFtZSkge1xuICBpZiAoZnJvbS5wcm9wZXJ0aWVzKSB7XG4gICAgZnJvbS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24oZnJvbVByb3Ape1xuICAgICAgZm9yICh2YXIgdG9Qcm9wLCBpID0gMDsgaSA8IHRvLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdG9Qcm9wID0gdG8ucHJvcGVydGllc1tpXTtcbiAgICAgICAgaWYgKGZyb21Qcm9wLm5hbWUgPT09IHRvUHJvcC5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgbmV3UHJvcCA9IHtfX2Zyb21CZWhhdmlvcjogZnJvbS5pc307XG4gICAgICBpZiAoZnJvbVByb3AuX19mcm9tQmVoYXZpb3IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmtleXMoZnJvbVByb3ApLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHlGaWVsZCl7XG4gICAgICAgIG5ld1Byb3BbcHJvcGVydHlGaWVsZF0gPSBmcm9tUHJvcFtwcm9wZXJ0eUZpZWxkXTtcbiAgICAgIH0pO1xuICAgICAgdG8ucHJvcGVydGllcy5wdXNoKG5ld1Byb3ApO1xuICAgIH0pO1xuICB9XG4gIGlmICghZnJvbS5iZWhhdmlvcnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZnJvbS5iZWhhdmlvcnMuZm9yRWFjaChmdW5jdGlvbihiZWhhdmlvcil7XG4gICAgdmFyIGRlZmluZWRCZWhhdmlvciA9IGJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvcl0gfHwgYmVoYXZpb3JzQnlOYW1lW2JlaGF2aW9yLnN5bWJvbF07XG4gICAgaWYgKCFkZWZpbmVkQmVoYXZpb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29weVByb3BlcnRpZXMoZGVmaW5lZEJlaGF2aW9yLCB0bywgYmVoYXZpb3JzQnlOYW1lKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1peGluQmVoYXZpb3JzKGRlc2NyaXB0b3IsIGJlaGF2aW9yc0J5TmFtZSkge1xuICBpZiAoZGVzY3JpcHRvci5iZWhhdmlvcnMpIHtcbiAgICBkZXNjcmlwdG9yLmJlaGF2aW9ycy5mb3JFYWNoKGZ1bmN0aW9uKGJlaGF2aW9yKXtcbiAgICAgIGlmICghYmVoYXZpb3JzQnlOYW1lW2JlaGF2aW9yXSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJCZWhhdmlvciBcIiArIGJlaGF2aW9yICsgXCIgbm90IGZvdW5kIVwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGRlZmluZWRCZWhhdmlvciA9IGJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvcl07XG4gICAgICBjb3B5UHJvcGVydGllcyhkZWZpbmVkQmVoYXZpb3IsIGRlc2NyaXB0b3IsIGJlaGF2aW9yc0J5TmFtZSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgZG9jdW1lbnRhdGlvbiBmb3VuZCB3aXRoaW4gYSBIeWRyb2x5c2lzIGVsZW1lbnQgZGVzY3JpcHRvci4gQWxzb1xuICogc3VwcG9ydHMgYmVoYXZpb3JzLlxuICpcbiAqIElmIHRoZSBlbGVtZW50IHdhcyBwcm9jZXNzZWQgdmlhIGBoeWRyb2xpemVgLCB0aGUgZWxlbWVudCdzIGRvY3VtZW50YXRpb25cbiAqIHdpbGwgYWxzbyBiZSBleHRyYWN0ZWQgdmlhIGl0cyA8ZG9tLW1vZHVsZT4uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgVGhlIGVsZW1lbnQgZGVzY3JpcHRvci5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGRlc2NyaXB0b3IgdGhhdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlRWxlbWVudChkZXNjcmlwdG9yLCBiZWhhdmlvcnNCeU5hbWUpIHtcbiAgaWYgKCFkZXNjcmlwdG9yLmRlc2MgJiYgZGVzY3JpcHRvci50eXBlID09PSAnZWxlbWVudCcpIHtcbiAgICBkZXNjcmlwdG9yLmRlc2MgPSBfZmluZEVsZW1lbnREb2NzKGRlc2NyaXB0b3IuaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmRvbU1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iuc2NyaXB0RWxlbWVudCk7XG4gIH1cbiAgYW5ub3RhdGUoZGVzY3JpcHRvcik7XG5cbiAgLy8gVGhlIGA8ZG9tLW1vZHVsZT5gIGlzIHRvbyBsb3cgbGV2ZWwgZm9yIG1vc3QgbmVlZHMsIGFuZCBpdCBpcyBfbm90X1xuICAvLyBzZXJpYWxpemFibGUuIFNvIHdlIGRyb3AgaXQgbm93IHRoYXQgd2UndmUgZXh0cmFjdGVkIGFsbCB0aGUgdXNlZnVsIGJpdHNcbiAgLy8gZnJvbSBpdC5cbiAgLy8gVE9ETzogRG9uJ3Qgd29ycnkgYWJvdXQgc2VyaWFsaXphYmlsaXR5IGhlcmUsIHByb3ZpZGUgYW4gQVBJIHRvIGdldCBKU09OLlxuICBkZWxldGUgZGVzY3JpcHRvci5kb21Nb2R1bGU7XG5cbiAgbWl4aW5CZWhhdmlvcnMoZGVzY3JpcHRvciwgYmVoYXZpb3JzQnlOYW1lKTtcblxuICAvLyBEZXNjcmlwdG9ycyB0aGF0IHNob3VsZCBoYXZlIHRoZWlyIGBkZXNjYCBwcm9wZXJ0aWVzIHBhcnNlZCBhcyBKU0RvYy5cbiAgZGVzY3JpcHRvci5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgICAvLyBGZWF0dXJlIHByb3BlcnRpZXMgYXJlIHNwZWNpYWwsIGNvbmZpZ3VyYXRpb24gaXMgcmVhbGx5IGp1c3QgYSBtYXR0ZXIgb2ZcbiAgICAvLyBpbmhlcml0YW5jZS4uLlxuICAgIGFubm90YXRlUHJvcGVydHkocHJvcGVydHksIGRlc2NyaXB0b3IuYWJzdHJhY3QpO1xuICB9KTtcblxuICAvLyBJdCBtYXkgc2VlbSBsaWtlIG92ZXJraWxsIHRvIGFsd2F5cyBzb3J0LCBidXQgd2UgaGF2ZSBhbiBhc3N1bXB0aW9uIHRoYXRcbiAgLy8gdGhlc2UgcHJvcGVydGllcyBhcmUgdHlwaWNhbGx5IGJlaW5nIGNvbnN1bWVkIGJ5IHVzZXItdmlzaWJsZSB0b29saW5nLlxuICAvLyBBcyBzdWNoLCBpdCdzIGdvb2QgdG8gaGF2ZSBjb25zaXN0ZW50IG91dHB1dC9vcmRlcmluZyB0byBhaWQgdGhlIHVzZXIuXG4gIGRlc2NyaXB0b3IucHJvcGVydGllcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAvLyBQcml2YXRlIHByb3BlcnRpZXMgYXJlIGFsd2F5cyBsYXN0LlxuICAgIGlmIChhLnByaXZhdGUgJiYgIWIucHJpdmF0ZSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmICghYS5wcml2YXRlICYmIGIucHJpdmF0ZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIC8vIE90aGVyd2lzZSwgd2UncmUganVzdCBzb3J0aW5nIGFscGhhYmV0aWNhbGx5LlxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIGFubm90YXRlRWxlbWVudEhlYWRlcihkZXNjcmlwdG9yKTtcblxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgYmVoYXZpb3IgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIGJlaGF2aW9yIGRlc2NyaXB0b3JcbiAqIEByZXR1cm4ge09iamVjdH0gZGVzY3JpcHRvciBwYXNzZWQgaW4gYXMgcGFyYW1cbiAqL1xuZnVuY3Rpb24gYW5ub3RhdGVCZWhhdmlvcihkZXNjcmlwdG9yLCBiZWhhdmlvcnNCeU5hbWUpIHtcbiAgYW5ub3RhdGUoZGVzY3JpcHRvcik7XG4gIGFubm90YXRlRWxlbWVudEhlYWRlcihkZXNjcmlwdG9yKTtcblxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBBbm5vdGF0ZXMgZXZlbnQgZG9jdW1lbnRhdGlvblxuICovXG5mdW5jdGlvbiBfYW5ub3RhdGVFdmVudChkZXNjcmlwdG9yKSB7XG4gIGFubm90YXRlKGRlc2NyaXB0b3IpO1xuICAvLyBwcm9jZXNzIEBldmVudFxuICB2YXIgZXZlbnRUYWcgPSBqc2RvYy5nZXRUYWcoZGVzY3JpcHRvci5qc2RvYywgJ2V2ZW50Jyk7XG4gIGRlc2NyaXB0b3IubmFtZSA9IGV2ZW50VGFnID8gZXZlbnRUYWcuZGVzY3JpcHRpb24gOiBcIk4vQVwiO1xuXG4gIC8vIHByb2Nlc3MgQHBhcmFtc1xuICBkZXNjcmlwdG9yLnBhcmFtcyA9IChkZXNjcmlwdG9yLmpzZG9jLnRhZ3MgfHwgW10pXG4gICAgLmZpbHRlciggZnVuY3Rpb24odGFnKSB7XG4gICAgICByZXR1cm4gdGFnLnRhZyA9PT0gJ3BhcmFtJztcbiAgICB9KVxuICAgIC5tYXAoIGZ1bmN0aW9uKHRhZykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdGFnLnR5cGUgfHwgXCJOL0FcIixcbiAgICAgICAgZGVzYzogdGFnLmRlc2NyaXB0aW9uLFxuICAgICAgICBuYW1lOiB0YWcubmFtZSB8fCBcIk4vQVwiXG4gICAgICB9O1xuICAgIH0pO1xuICAvLyBwcm9jZXNzIEBwYXJhbXNcbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIGRvY3VtZW50YXRpb24gZm91bmQgYWJvdXQgYSBIeWRyb2x5c2lzIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgVGhlIHByb3BlcnR5IGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUNvbmZpZ3VyYXRpb24gSWYgdHJ1ZSwgYGNvbmZpZ3VyYXRpb25gIGlzIG5vdCBzZXQuXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBkZXNjcmlwdGlvciB0aGF0IHdhcyBnaXZlbi5cbiAqL1xuZnVuY3Rpb24gYW5ub3RhdGVQcm9wZXJ0eShkZXNjcmlwdG9yLCBpZ25vcmVDb25maWd1cmF0aW9uKSB7XG4gIGFubm90YXRlKGRlc2NyaXB0b3IpO1xuICBpZiAoZGVzY3JpcHRvci5uYW1lWzBdID09PSAnXycgfHwganNkb2MuaGFzVGFnKGRlc2NyaXB0b3IuanNkb2MsICdwcml2YXRlJykpIHtcbiAgICBkZXNjcmlwdG9yLnByaXZhdGUgPSB0cnVlO1xuICB9XG5cbiAgaWYgKCFpZ25vcmVDb25maWd1cmF0aW9uICYmIEVMRU1FTlRfQ09ORklHVVJBVElPTi5pbmRleE9mKGRlc2NyaXB0b3IubmFtZSkgIT09IC0xKSB7XG4gICAgZGVzY3JpcHRvci5wcml2YXRlICAgICAgID0gdHJ1ZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYXRpb24gPSB0cnVlO1xuICB9XG5cbiAgLy8gQHR5cGUgSlNEb2Mgd2luc1xuICBkZXNjcmlwdG9yLnR5cGUgPSBqc2RvYy5nZXRUYWcoZGVzY3JpcHRvci5qc2RvYywgJ3R5cGUnLCAndHlwZScpIHx8IGRlc2NyaXB0b3IudHlwZTtcblxuICBpZiAoZGVzY3JpcHRvci50eXBlLm1hdGNoKC9eZnVuY3Rpb24vaSkpIHtcbiAgICBfYW5ub3RhdGVGdW5jdGlvblByb3BlcnR5KGRlc2NyaXB0b3IpO1xuICB9XG5cbiAgLy8gQGRlZmF1bHQgSlNEb2Mgd2luc1xuICB2YXIgZGVmYXVsdFRhZyA9IGpzZG9jLmdldFRhZyhkZXNjcmlwdG9yLmpzZG9jLCAnZGVmYXVsdCcpO1xuICBpZiAoZGVmYXVsdFRhZyAhPT0gbnVsbCkge1xuICAgIHZhciBuZXdEZWZhdWx0ID0gKGRlZmF1bHRUYWcubmFtZSB8fCAnJykgKyAoZGVmYXVsdFRhZy5kZXNjcmlwdGlvbiB8fCAnJyk7XG4gICAgaWYgKG5ld0RlZmF1bHQgIT09ICcnKSB7XG4gICAgICBkZXNjcmlwdG9yLmRlZmF1bHQgPSBuZXdEZWZhdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG4vKiogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3IgKi9cbmZ1bmN0aW9uIF9hbm5vdGF0ZUZ1bmN0aW9uUHJvcGVydHkoZGVzY3JpcHRvcikge1xuICBkZXNjcmlwdG9yLmZ1bmN0aW9uID0gdHJ1ZTtcblxuICB2YXIgcmV0dXJuVGFnID0ganNkb2MuZ2V0VGFnKGRlc2NyaXB0b3IuanNkb2MsICdyZXR1cm4nKTtcbiAgaWYgKHJldHVyblRhZykge1xuICAgIGRlc2NyaXB0b3IucmV0dXJuID0ge1xuICAgICAgdHlwZTogcmV0dXJuVGFnLnR5cGUsXG4gICAgICBkZXNjOiByZXR1cm5UYWcuZGVzY3JpcHRpb24sXG4gICAgfTtcbiAgfVxuXG4gIHZhciBwYXJhbXNCeU5hbWUgPSB7fTtcbiAgKGRlc2NyaXB0b3IucGFyYW1zIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgcGFyYW1zQnlOYW1lW3BhcmFtLm5hbWVdID0gcGFyYW07XG4gIH0pO1xuICAoZGVzY3JpcHRvci5qc2RvYyAmJiBkZXNjcmlwdG9yLmpzZG9jLnRhZ3MgfHwgW10pLmZvckVhY2goZnVuY3Rpb24odGFnKSB7XG4gICAgaWYgKHRhZy50YWcgIT09ICdwYXJhbScpIHJldHVybjtcbiAgICB2YXIgcGFyYW0gPSBwYXJhbXNCeU5hbWVbdGFnLm5hbWVdO1xuICAgIGlmICghcGFyYW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXJhbS50eXBlID0gdGFnLnR5cGUgfHwgcGFyYW0udHlwZTtcbiAgICBwYXJhbS5kZXNjID0gdGFnLmRlc2NyaXB0aW9uO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyByYXcgZmVhdHVyZXMgaW50byBhbiBhYnN0cmFjdCBgUG9seW1lci5CYXNlYCBlbGVtZW50LlxuICpcbiAqIE5vdGUgdGhhdCBkb2NzIG9uIHRoaXMgZWxlbWVudCBfYXJlIG5vdCBwcm9jZXNzZWRfLiBZb3UgbXVzdCBjYWxsXG4gKiBgYW5ub3RhdGVFbGVtZW50YCBvbiBpdCB5b3Vyc2VsZiBpZiB5b3Ugd2lzaCB0aGF0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fSBmZWF0dXJlc1xuICogQHJldHVybiB7RWxlbWVudERlc2NyaXB0b3J9XG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVFbGVtZW50KGZlYXR1cmVzKSB7XG4gIHZhciBwcm9wZXJ0aWVzID0gZmVhdHVyZXMucmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgZmVhdHVyZSkge1xuICAgIHJldHVybiByZXN1bHQuY29uY2F0KGZlYXR1cmUucHJvcGVydGllcyk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICAgICAgICdlbGVtZW50JyxcbiAgICBpczogICAgICAgICAnUG9seW1lci5CYXNlJyxcbiAgICBhYnN0cmFjdDogICB0cnVlLFxuICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG4gICAgZGVzYzogJ2BQb2x5bWVyLkJhc2VgIGFjdHMgYXMgYSBiYXNlIHByb3RvdHlwZSBmb3IgYWxsIFBvbHltZXIgJyArXG4gICAgICAgICAgJ2VsZW1lbnRzLiBJdCBpcyBjb21wb3NlZCB2aWEgdmFyaW91cyBjYWxscyB0byAnICtcbiAgICAgICAgICAnYFBvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSgpYC5cXG4nICtcbiAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgJ1RoZSBwcm9wZXJ0aWVzIHJlZmxlY3RlZCBoZXJlIGFyZSB0aGUgY29tYmluZWQgdmlldyBvZiBhbGwgJyArXG4gICAgICAgICAgJ2ZlYXR1cmVzIGZvdW5kIGluIHRoaXMgbGlicmFyeS4gVGhlcmUgbWF5IGJlIG1vcmUgcHJvcGVydGllcyAnICtcbiAgICAgICAgICAnYWRkZWQgdmlhIG90aGVyIGxpYnJhcmllcywgYXMgd2VsbC4nLFxuICB9O1xufVxuXG4vKipcbiAqIENsZWFucyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIGEgZGVzY3JpcHRvciwgYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5XG4gKiBjYWxsZWQgYGFubm90YXRlYC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzY3JpcHRvclxuICovXG5mdW5jdGlvbiBjbGVhbihkZXNjcmlwdG9yKSB7XG4gIGlmICghZGVzY3JpcHRvci5qc2RvYykgcmV0dXJuO1xuICAvLyBUaGUgZG9jdGV4dCB3YXMgd3JpdHRlbiB0byBgZGVzY3JpcHRvci5kZXNjYFxuICBkZWxldGUgZGVzY3JpcHRvci5qc2RvYy5kZXNjcmlwdGlvbjtcbiAgZGVsZXRlIGRlc2NyaXB0b3IuanNkb2Mub3JpZztcblxuICB2YXIgY2xlYW5UYWdzID0gW107XG4gIChkZXNjcmlwdG9yLmpzZG9jLnRhZ3MgfHwgW10pLmZvckVhY2goZnVuY3Rpb24odGFnKSB7XG4gICAgLy8gRHJvcCBhbnkgdGFncyB3ZSd2ZSBjb25zdW1lZC5cbiAgICBpZiAoSEFORExFRF9UQUdTLmluZGV4T2YodGFnLnRhZykgIT09IC0xKSByZXR1cm47XG4gICAgY2xlYW5UYWdzLnB1c2godGFnKTtcbiAgfSk7XG5cbiAgaWYgKGNsZWFuVGFncy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBObyB0YWdzPyBubyBkb2NzIGxlZnQhXG4gICAgZGVsZXRlIGRlc2NyaXB0b3IuanNkb2M7XG4gIH0gZWxzZSB7XG4gICAgZGVzY3JpcHRvci5qc2RvYy50YWdzID0gY2xlYW5UYWdzO1xuICB9XG59XG5cbi8qKlxuICogQ2xlYW5zIHJlZHVuZGFudCBwcm9wZXJ0aWVzIGZyb20gYW4gZWxlbWVudCwgYXNzdW1pbmcgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5XG4gKiBjYWxsZWQgYGFubm90YXRlRWxlbWVudGAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50RGVzY3JpcHRvcnxCZWhhdmlvckRlc2NyaXB0b3J9IGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gY2xlYW5FbGVtZW50KGVsZW1lbnQpIHtcbiAgY2xlYW4oZWxlbWVudCk7XG4gIGVsZW1lbnQucHJvcGVydGllcy5mb3JFYWNoKGNsZWFuUHJvcGVydHkpO1xufVxuXG4vKipcbiAqIENsZWFucyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIGEgcHJvcGVydHksIGFzc3VtaW5nIHRoYXQgeW91IGhhdmUgYWxyZWFkeVxuICogY2FsbGVkIGBhbm5vdGF0ZVByb3BlcnR5YC5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5RGVzY3JpcHRvcn0gcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gY2xlYW5Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICBjbGVhbihwcm9wZXJ0eSk7XG59XG5cbi8qKlxuICogUGFyc2UgZWxlbWVudHMgZGVmaW5lZCBvbmx5IGluIGNvbW1lbnRzLlxuICogQHBhcmFtICB7Y29tbWVudHN9IEFycmF5PHN0cmluZz4gQSBsaXN0IG9mIGNvbW1lbnRzIHRvIHBhcnNlLlxuICogQHJldHVybiB7RWxlbWVudERlc2NyaXB0b3J9ICAgICAgQSBsaXN0IG9mIHBzZXVkby1lbGVtZW50cy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQc2V1ZG9FbGVtZW50cyhjb21tZW50cykge1xuICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgY29tbWVudHMuZm9yRWFjaChmdW5jdGlvbihjb21tZW50KSB7XG4gICAgdmFyIHBhcnNlZCA9IGpzZG9jLnBhcnNlSnNkb2MoY29tbWVudCk7XG4gICAgdmFyIHBzZXVkb1RhZyA9IGpzZG9jLmdldFRhZyhwYXJzZWQsICdwc2V1ZG9FbGVtZW50JywgJ25hbWUnKTtcbiAgICBpZiAocHNldWRvVGFnKSB7XG4gICAgICBwYXJzZWQuaXMgPSBwc2V1ZG9UYWc7XG4gICAgICBwYXJzZWQuanNkb2MgPSB7ZGVzY3JpcHRpb246IHBhcnNlZC5kZXNjcmlwdGlvbiwgdGFnczogcGFyc2VkLnRhZ3N9O1xuICAgICAgcGFyc2VkLnByb3BlcnRpZXMgPSBbXTtcbiAgICAgIHBhcnNlZC5kZXNjID0gcGFyc2VkLmRlc2NyaXB0aW9uO1xuICAgICAgcGFyc2VkLmRlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgcGFyc2VkLnRhZ3MgPSB1bmRlZmluZWQ7XG4gICAgICBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIocGFyc2VkKTtcbiAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGVsZW1lbnRJZFxuICogQHBhcmFtIHtEb2N1bWVudEFTVH0gZG9tTW9kdWxlXG4gKiBAcGFyYW0ge0RvY3VtZW50QVNUfSBzY3JpcHRFbGVtZW50IFRoZSBzY3JpcHQgdGhhdCB0aGUgZWxlbWVudCB3YXMgZGVmaW5lZCBpbi5cbiAqL1xuZnVuY3Rpb24gX2ZpbmRFbGVtZW50RG9jcyhlbGVtZW50SWQsIGRvbU1vZHVsZSwgc2NyaXB0RWxlbWVudCkge1xuICAvLyBOb3RlIHRoYXQgd2UgY29uY2F0ZW5hdGUgZG9jcyBmcm9tIGFsbCBzb3VyY2VzIGlmIHdlIGZpbmQgdGhlbS5cbiAgLy8gZWxlbWVudCBjYW4gYmUgZGVmaW5lZCBpbjpcbiAgLy8gaHRtbCBjb21tZW50IHJpZ2h0IGJlZm9yZSBkb20tbW9kdWxlXG4gIC8vIGh0bWwgY29tbW5ldCByaWdodCBiZWZvcmUgc2NyaXB0IGRlZmluaW5nIHRoZSBtb2R1bGUsIGlmIGRvbS1tb2R1bGUgaXMgZW1wdHlcblxuICB2YXIgZm91bmQgPSBbXTtcblxuICAvLyBEbyB3ZSBoYXZlIGEgSFRNTCBjb21tZW50IG9uIHRoZSBgPGRvbS1tb2R1bGU+YCBvciBgPHNjcmlwdD5gP1xuICAvL1xuICAvLyBDb25mdXNpbmdseSwgd2l0aCBvdXIgY3VycmVudCBzdHlsZSwgdGhlIGNvbW1lbnQgd2lsbCBiZSBhdHRhY2hlZCB0b1xuICAvLyBgPGhlYWQ+YCwgcmF0aGVyIHRoYW4gYmVpbmcgYSBzaWJsaW5nIHRvIHRoZSBgPGRvbS1tb2R1bGU+YFxuICB2YXIgc2VhcmNoUm9vdCA9IGRvbU1vZHVsZSB8fCBzY3JpcHRFbGVtZW50O1xuICB2YXIgcGFyZW50cyA9IGRvbTUubm9kZVdhbGtBbGxQcmlvcihzZWFyY2hSb290LCBkb201LmlzQ29tbWVudE5vZGUpO1xuICB2YXIgY29tbWVudCA9IHBhcmVudHMubGVuZ3RoID4gMCA/IHBhcmVudHNbMF0gOiBudWxsO1xuICBpZiAoY29tbWVudCAmJiBjb21tZW50LmRhdGEpIHtcbiAgICBmb3VuZC5wdXNoKGNvbW1lbnQuZGF0YSk7XG4gIH1cbiAgaWYgKGZvdW5kLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBmb3VuZFxuICAgIC5maWx0ZXIoZnVuY3Rpb24oY29tbWVudCkge1xuICAgICAgLy8gc2tpcCBAbGljZW5zZSBjb21tZW50c1xuICAgICAgaWYgKGNvbW1lbnQgJiYgY29tbWVudC5pbmRleE9mKCdAbGljZW5zZScgPT09IC0xKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSlcbiAgICAubWFwKGpzZG9jLnVuaW5kZW50KS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRMYXN0Q2hpbGROYW1lZChuYW1lLCBwYXJlbnQpIHtcbiAgdmFyIGNoaWxkcmVuID0gcGFyZW50LmNoaWxkTm9kZXM7XG4gIGZvciAodmFyIGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxLCBjaGlsZDsgaSA+PSAwOyBpLS0pIHtcbiAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIGlmIChjaGlsZC5ub2RlTmFtZSA9PT0gbmFtZSkgcmV0dXJuIGNoaWxkO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBUT0RPKG5ldmlyKTogcGFyc2U1LXV0aWxzIVxuZnVuY3Rpb24gX2dldE5vZGVBdHRyaWJ1dGUobm9kZSwgbmFtZSkge1xuICBmb3IgKHZhciBpID0gMCwgYXR0cjsgaSA8IG5vZGUuYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICBhdHRyID0gbm9kZS5hdHRyc1tpXTtcbiAgICBpZiAoYXR0ci5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYXR0ci52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFubm90YXRlOiAgICAgICAgYW5ub3RhdGUsXG4gIGFubm90YXRlRWxlbWVudDogYW5ub3RhdGVFbGVtZW50LFxuICBhbm5vdGF0ZUJlaGF2aW9yOiBhbm5vdGF0ZUJlaGF2aW9yLFxuICBjbGVhbjogICAgICAgICAgIGNsZWFuLFxuICBjbGVhbkVsZW1lbnQ6ICAgIGNsZWFuRWxlbWVudCxcbiAgZmVhdHVyZUVsZW1lbnQ6ICBmZWF0dXJlRWxlbWVudCxcbiAgcGFyc2VQc2V1ZG9FbGVtZW50czogcGFyc2VQc2V1ZG9FbGVtZW50c1xufTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBlc3RyYXZlcnNlID0gcmVxdWlyZSgnZXN0cmF2ZXJzZScpO1xuXG52YXIgZXN1dGlsICAgID0gcmVxdWlyZSgnLi9lc3V0aWwnKTtcbnZhciBmaW5kQWxpYXMgPSByZXF1aXJlKCcuL2ZpbmQtYWxpYXMnKTtcbnZhciBhbmFseXplUHJvcGVydGllcyA9IHJlcXVpcmUoJy4vYW5hbHl6ZS1wcm9wZXJ0aWVzJyk7XG52YXIgYXN0VmFsdWUgPSByZXF1aXJlKCcuL2FzdC12YWx1ZScpO1xuXG52YXIgZWxlbWVudEZpbmRlciA9IGZ1bmN0aW9uIGVsZW1lbnRGaW5kZXIoKSB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBlbGVtZW50cyBleHBvcnRlZCBieSBlYWNoIHRyYXZlcnNlZCBzY3JpcHQuXG4gICAqL1xuICB2YXIgZWxlbWVudHMgPSBbXTtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgYmVpbmcgYnVpbHQgZHVyaW5nIGEgdHJhdmVyc2FsO1xuICAgKi9cbiAgdmFyIGVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIGEgc2V0IG9mIHNwZWNpYWwgY2FzZSBwcm9wZXJ0aWVzLiB0aGVzZSBzaG91bGQgb25seSBiZSBjYWxsZWRcbiAgICogd2hlbiB3ZSBrbm93IHdlJ3JlIGluc2lkZSBhbiBlbGVtZW50IGRlZmluaXRpb24uXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgcHJvcGVydHlIYW5kbGVycyA9IHtcbiAgICBpczogZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKG5vZGUudHlwZSA9PSAnTGl0ZXJhbCcpIHtcbiAgICAgICAgZWxlbWVudC5pcyA9IG5vZGUudmFsdWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBwcm9wZXJ0aWVzOiBmdW5jdGlvbihub2RlKSB7XG5cbiAgICAgIHZhciBwcm9wcyA9IGFuYWx5emVQcm9wZXJ0aWVzKG5vZGUpO1xuXG4gICAgICBmb3IgKHZhciBpPTA7IGk8cHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzLnB1c2gocHJvcHNbaV0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgYmVoYXZpb3JzOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICBpZiAobm9kZS50eXBlICE9ICdBcnJheUV4cHJlc3Npb24nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaT0wOyBpPG5vZGUuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHYgPSBhc3RWYWx1ZS5leHByZXNzaW9uVG9WYWx1ZShub2RlLmVsZW1lbnRzW2ldKTtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICB2ID0gYXN0VmFsdWUuQ0FOVF9DT05WRVJUO1xuICAgICAgICBlbGVtZW50LmJlaGF2aW9ycy5wdXNoKHYpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2YXIgdmlzaXRvcnMgPSB7XG4gICAgZW50ZXJDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gZW50ZXJDYWxsRXhwcmVzc2lvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZhciBjYWxsZWUgPSBub2RlLmNhbGxlZTtcbiAgICAgIGlmIChjYWxsZWUudHlwZSA9PSAnSWRlbnRpZmllcicpIHtcblxuICAgICAgICBpZiAoY2FsbGVlLm5hbWUgPT0gJ1BvbHltZXInKSB7XG4gICAgICAgICAgZWxlbWVudCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdlbGVtZW50JyxcbiAgICAgICAgICAgIGRlc2M6IGVzdXRpbC5nZXRBdHRhY2hlZENvbW1lbnQocGFyZW50KSxcbiAgICAgICAgICAgIGV2ZW50czogZXN1dGlsLmdldEV2ZW50Q29tbWVudHMocGFyZW50KS5tYXAoIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiB7ZGVzYzogZXZlbnR9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsZWF2ZUNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBsZWF2ZUNhbGxFeHByZXNzaW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgdmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICAgICAgaWYgKGNhbGxlZS50eXBlID09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBpZiAoY2FsbGVlLm5hbWUgPT0gJ1BvbHltZXInKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICBlbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZW50ZXJPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbiBlbnRlck9iamVjdEV4cHJlc3Npb24obm9kZSwgcGFyZW50KSB7XG4gICAgICBpZiAoZWxlbWVudCAmJiAhZWxlbWVudC5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGVsZW1lbnQucHJvcGVydGllcyA9IFtdO1xuICAgICAgICBlbGVtZW50LmJlaGF2aW9ycyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBwcm9wID0gbm9kZS5wcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgIHZhciBuYW1lID0gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKHByb3Aua2V5KTtcbiAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0NhbnQgZGV0ZXJtaW5lIG5hbWUgZm9yIHByb3BlcnR5IGtleS4nLFxuICAgICAgICAgICAgICBsb2NhdGlvbjogbm9kZS5sb2Muc3RhcnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5hbWUgaW4gcHJvcGVydHlIYW5kbGVycykge1xuICAgICAgICAgICAgcHJvcGVydHlIYW5kbGVyc1tuYW1lXShwcm9wLnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbGVtZW50LnByb3BlcnRpZXMucHVzaChlc3V0aWwudG9Qcm9wZXJ0eURlc2NyaXB0b3IocHJvcCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlc3RyYXZlcnNlLlZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiB7dmlzaXRvcnM6IHZpc2l0b3JzLCBlbGVtZW50czogZWxlbWVudHN9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbGVtZW50RmluZGVyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xudmFyIGVzdHJhdmVyc2UgPSByZXF1aXJlKFwiZXN0cmF2ZXJzZVwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYW4gRXNwcmVlIG5vZGUgbWF0Y2hlcyBhIHBhcnRpY3VsYXIgb2JqZWN0IHBhdGguXG4gKlxuICogZS5nLiB5b3UgaGF2ZSBhIE1lbWJlckV4cHJlc3Npb24gbm9kZSwgYW5kIHdhbnQgdG8gc2VlIHdoZXRoZXIgaXQgcmVwcmVzZW50c1xuICogYEZvby5CYXIuQmF6YDpcbiAqXG4gKiAgICAgbWF0Y2hlc0NhbGxFeHByZXNzaW9uKG5vZGUsIFsnRm9vJywgJ0JhcicsICdCYXonXSlcbiAqXG4gKiBAcGFyYW0ge05vZGV9IGV4cHJlc3Npb24gVGhlIEVzcHJlZSBub2RlIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHBhdGggVGhlIHBhdGggdG8gbG9vayBmb3IuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNDYWxsRXhwcmVzc2lvbihleHByZXNzaW9uLCBwYXRoKSB7XG4gIGlmICghZXhwcmVzc2lvbi5wcm9wZXJ0eSB8fCAhZXhwcmVzc2lvbi5vYmplY3QpIHJldHVybjtcbiAgY29uc29sZS5hc3NlcnQocGF0aC5sZW5ndGggPj0gMik7XG5cbiAgLy8gVW5yYXZlbCBiYWNrd2FyZHMsIG1ha2Ugc3VyZSBwcm9wZXJ0aWVzIG1hdGNoIGVhY2ggc3RlcCBvZiB0aGUgd2F5LlxuICBpZiAoZXhwcmVzc2lvbi5wcm9wZXJ0eS5uYW1lICE9PSBwYXRoW3BhdGgubGVuZ3RoIC0gMV0pIHJldHVybiBmYWxzZTtcbiAgLy8gV2UndmUgZ290IG91cnNlbHZlcyBhIGZpbmFsIG1lbWJlciBleHByZXNzaW9uLlxuICBpZiAocGF0aC5sZW5ndGggPT0gMiAmJiBleHByZXNzaW9uLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vYmplY3QubmFtZSA9PT0gcGF0aFswXTtcbiAgfVxuICAvLyBOZXN0ZWQgZXhwcmVzc2lvbnMuXG4gIGlmIChwYXRoLmxlbmd0aCA+IDIgJiYgZXhwcmVzc2lvbi5vYmplY3QudHlwZSA9PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICByZXR1cm4gbWF0Y2hlc0NhbGxFeHByZXNzaW9uKGV4cHJlc3Npb24ub2JqZWN0LCBwYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoIC0gMSkpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0ga2V5IFRoZSBub2RlIHJlcHJlc2VudGluZyBhbiBvYmplY3Qga2V5IG9yIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoYXQga2V5LlxuICovXG5mdW5jdGlvbiBvYmplY3RLZXlUb1N0cmluZyhrZXkpIHtcbiAgaWYgKGtleS50eXBlID09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiBrZXkubmFtZTtcbiAgfVxuICBpZiAoa2V5LnR5cGUgPT0gJ0xpdGVyYWwnKSB7XG4gICAgcmV0dXJuIGtleS52YWx1ZTtcbiAgfVxuICBpZiAoa2V5LnR5cGUgPT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIG9iamVjdEtleVRvU3RyaW5nKGtleS5vYmplY3QpICsgJy4nICsgb2JqZWN0S2V5VG9TdHJpbmcoa2V5LnByb3BlcnR5KTtcbiAgfVxufVxuXG52YXIgQ0xPU1VSRV9DT05TVFJVQ1RPUl9NQVAgPSB7XG4gICdCb29sZWFuJzogJ2Jvb2xlYW4nLFxuICAnTnVtYmVyJzogICdudW1iZXInLFxuICAnU3RyaW5nJzogICdzdHJpbmcnLFxufTtcblxuLyoqXG4gKiBBU1QgZXhwcmVzc2lvbiAtPiBDbG9zdXJlIHR5cGUuXG4gKlxuICogQWNjZXB0cyBsaXRlcmFsIHZhbHVlcywgYW5kIG5hdGl2ZSBjb25zdHJ1Y3RvcnMuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlIEFuIEVzcHJlZSBleHByZXNzaW9uIG5vZGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0eXBlIG9mIHRoYXQgZXhwcmVzc2lvbiwgaW4gQ2xvc3VyZSB0ZXJtcy5cbiAqL1xuZnVuY3Rpb24gY2xvc3VyZVR5cGUobm9kZSkge1xuICBpZiAobm9kZS50eXBlLm1hdGNoKC9FeHByZXNzaW9uJC8pKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZS5zdWJzdHIoMCwgbm9kZS50eXBlLmxlbmd0aCAtIDEwKTtcbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdMaXRlcmFsJykge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS52YWx1ZTtcbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiBDTE9TVVJFX0NPTlNUUlVDVE9SX01BUFtub2RlLm5hbWVdIHx8IG5vZGUubmFtZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB7XG4gICAgICBtZXNzYWdlOiAnVW5rbm93biBDbG9zdXJlIHR5cGUgZm9yIG5vZGU6ICcgKyBub2RlLnR5cGUsXG4gICAgICBsb2NhdGlvbjogbm9kZS5sb2Muc3RhcnQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0QXR0YWNoZWRDb21tZW50KG5vZGUpIHtcbiAgdmFyIGNvbW1lbnRzID0gZ2V0TGVhZGluZ0NvbW1lbnRzKG5vZGUpIHx8IGdldExlYWRpbmdDb21tZW50cyhub2RlLmtleSk7XG4gIGlmICghY29tbWVudHMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIGNvbW1lbnRzW2NvbW1lbnRzLmxlbmd0aCAtIDFdO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNvbW1lbnRzIGZyb20gYSB0cmVlIGRlZmluZWQgd2l0aCBAZXZlbnQuXG4gKiBAcGFyYW0gIHtOb2RlfSBub2RlIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge1t0eXBlXX0gICAgICBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50Q29tbWVudHMobm9kZSkge1xuICB2YXIgZXZlbnRDb21tZW50cyA9IFtdO1xuICBlc3RyYXZlcnNlLnRyYXZlcnNlKG5vZGUsIHtcbiAgICBlbnRlcjogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBjb21tZW50cyA9IChub2RlLmxlYWRpbmdDb21tZW50cyB8fCBbXSkuY29uY2F0KG5vZGUudHJhaWxpbmdDb21tZW50cyB8fCBbXSlcbiAgICAgICAgLm1hcCggZnVuY3Rpb24oY29tbWVudEFTVCkge1xuICAgICAgICAgIHJldHVybiBjb21tZW50QVNULnZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKCBmdW5jdGlvbihjb21tZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1lbnQuaW5kZXhPZihcIkBldmVudFwiKSAhPSAtMTtcbiAgICAgICAgfSk7XG4gICAgICBldmVudENvbW1lbnRzID0gZXZlbnRDb21tZW50cy5jb25jYXQoY29tbWVudHMpO1xuICAgIH1cbiAgfSk7XG4gIC8vIGRlZHVwXG4gIHJldHVybiBldmVudENvbW1lbnRzLmZpbHRlciggZnVuY3Rpb24oZWwsIGluZGV4LCBhcnJheSkge1xuICAgIHJldHVybiBhcnJheS5pbmRleE9mKGVsKSA9PT0gaW5kZXg7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHBhcmFtXG4gKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZ2V0TGVhZGluZ0NvbW1lbnRzKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjb21tZW50cyA9IG5vZGUubGVhZGluZ0NvbW1lbnRzO1xuICBpZiAoIWNvbW1lbnRzIHx8IGNvbW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICByZXR1cm4gY29tbWVudHMubWFwKGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgICByZXR1cm4gY29tbWVudC52YWx1ZTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBwYXJzZTUgUHJvcGVydHkgQVNUIG5vZGUgaW50byBpdHMgSHlkcm9seXNpcyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEByZXR1cm4ge1Byb3BlcnR5RGVzY3JpcHRvcn1cbiAqL1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eURlc2NyaXB0b3Iobm9kZSkge1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIG5hbWU6IG9iamVjdEtleVRvU3RyaW5nKG5vZGUua2V5KSxcbiAgICB0eXBlOiBjbG9zdXJlVHlwZShub2RlLnZhbHVlKSxcbiAgICBkZXNjOiBnZXRBdHRhY2hlZENvbW1lbnQobm9kZSksXG4gICAgamF2YXNjcmlwdE5vZGU6IG5vZGVcbiAgfTtcblxuICBpZiAobm9kZS52YWx1ZS50eXBlID09PSAnRnVuY3Rpb25FeHByZXNzaW9uJykge1xuICAgIHJlc3VsdC5wYXJhbXMgPSAobm9kZS52YWx1ZS5wYXJhbXMgfHwgW10pLm1hcChmdW5jdGlvbihwYXJhbSkge1xuICAgICAgcmV0dXJuIHtuYW1lOiBwYXJhbS5uYW1lfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjbG9zdXJlVHlwZTogICAgICAgICAgIGNsb3N1cmVUeXBlLFxuICBnZXRBdHRhY2hlZENvbW1lbnQ6ICAgIGdldEF0dGFjaGVkQ29tbWVudCxcbiAgZ2V0RXZlbnRDb21tZW50czogICAgICBnZXRFdmVudENvbW1lbnRzLFxuICBtYXRjaGVzQ2FsbEV4cHJlc3Npb246IG1hdGNoZXNDYWxsRXhwcmVzc2lvbixcbiAgb2JqZWN0S2V5VG9TdHJpbmc6ICAgICBvYmplY3RLZXlUb1N0cmluZyxcbiAgdG9Qcm9wZXJ0eURlc2NyaXB0b3I6ICB0b1Byb3BlcnR5RGVzY3JpcHRvcixcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGVzdXRpbCA9IHJlcXVpcmUoJy4vZXN1dGlsJyk7XG5cbnZhciBudW1GZWF0dXJlcyA9IDA7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmVhdHVyZUZpbmRlcigpIHtcbiAgLyoqIEB0eXBlIHshQXJyYXk8RmVhdHVyZURlc2NyaXB0b3I+fSBUaGUgZmVhdHVyZXMgd2UndmUgZm91bmQuICovXG4gIHZhciBmZWF0dXJlcyA9IFtdO1xuXG4gIHZhciB2aXNpdG9ycyA9IHtcblxuICAgIGVudGVyQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIGVudGVyQ2FsbEV4cHJlc3Npb24obm9kZSwgcGFyZW50KSB7XG4gICAgICBpZiAoIWVzdXRpbC5tYXRjaGVzQ2FsbEV4cHJlc3Npb24obm9kZS5jYWxsZWUsIFsnUG9seW1lcicsICdCYXNlJywgJ19hZGRGZWF0dXJlJ10pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8qKiBAdHlwZSB7IUZlYXR1cmVEZXNjcmlwdG9yfSAqL1xuICAgICAgdmFyIGZlYXR1cmUgPSB7fTtcbiAgICAgIHRoaXMuX2V4dHJhY3REZXNjKGZlYXR1cmUsIG5vZGUsIHBhcmVudCk7XG4gICAgICB0aGlzLl9leHRyYWN0UHJvcGVydGllcyhmZWF0dXJlLCBub2RlLCBwYXJlbnQpO1xuXG4gICAgICBmZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgIH0sXG5cbiAgICBfZXh0cmFjdERlc2M6IGZ1bmN0aW9uIF9leHRyYWN0RGVzYyhmZWF0dXJlLCBub2RlLCBwYXJlbnQpIHtcbiAgICAgIGZlYXR1cmUuZGVzYyA9IGVzdXRpbC5nZXRBdHRhY2hlZENvbW1lbnQocGFyZW50KTtcbiAgICB9LFxuXG4gICAgX2V4dHJhY3RQcm9wZXJ0aWVzOiBmdW5jdGlvbiBfZXh0cmFjdFByb3BlcnRpZXMoZmVhdHVyZSwgbm9kZSwgcGFyZW50KSB7XG4gICAgICB2YXIgZmVhdHVyZU5vZGUgPSBub2RlLmFyZ3VtZW50c1swXTtcbiAgICAgIGlmIChmZWF0dXJlTm9kZS50eXBlICE9PSAnT2JqZWN0RXhwcmVzc2lvbicpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgJ0V4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIFBvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSB0byBiZSBhbiBvYmplY3QuJyxcbiAgICAgICAgICAgICdHb3QnLCBmZWF0dXJlTm9kZS50eXBlLCAnaW5zdGVhZC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFmZWF0dXJlTm9kZS5wcm9wZXJ0aWVzKSByZXR1cm47XG5cbiAgICAgIGZlYXR1cmUucHJvcGVydGllcyA9IGZlYXR1cmVOb2RlLnByb3BlcnRpZXMubWFwKGVzdXRpbC50b1Byb3BlcnR5RGVzY3JpcHRvcik7XG4gICAgfSxcblxuICB9O1xuXG4gIHJldHVybiB7dmlzaXRvcnM6IHZpc2l0b3JzLCBmZWF0dXJlczogZmVhdHVyZXN9O1xufTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBmaW5kQWxpYXMgPSBmdW5jdGlvbiBmaW5kQWxpYXMobmFtZXMsIGFsaWFzZXMsIG5hbWUpIHtcbiAgaWYgKCFuYW1lcykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBhbGlhc2VzW25hbWVzLmluZGV4T2YobmFtZSldO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kQWxpYXM7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZG9tNSA9IHJlcXVpcmUoJ2RvbTUnKTtcblxudmFyIHAgPSBkb201LnByZWRpY2F0ZXM7XG5cbnZhciBpc0h0bWxJbXBvcnROb2RlID0gcC5BTkQoXG4gIHAuaGFzVGFnTmFtZSgnbGluaycpLFxuICBwLmhhc0F0dHJWYWx1ZSgncmVsJywgJ2ltcG9ydCcpLFxuICBwLk5PVChcbiAgICBwLmhhc0F0dHJWYWx1ZSgndHlwZScsICdjc3MnKVxuICApXG4pO1xuXG52YXIgaXNTdHlsZU5vZGUgPSBwLk9SKFxuICAvLyBpbmxpbmUgc3R5bGVcbiAgcC5oYXNUYWdOYW1lKCdzdHlsZScpLFxuICAvLyBleHRlcm5hbCBzdHlsZXNoZWV0XG4gIHAuQU5EKFxuICAgIHAuaGFzVGFnTmFtZSgnbGluaycpLFxuICAgIHAuaGFzQXR0clZhbHVlKCdyZWwnLCAnc3R5bGVzaGVldCcpXG4gICksXG4gIC8vIHBvbHltZXIgc3BlY2lmaWMgZXh0ZXJuYWwgc3R5bGVzaGVldFxuICBwLkFORChcbiAgICBwLmhhc1RhZ05hbWUoJ2xpbmsnKSxcbiAgICBwLmhhc0F0dHJWYWx1ZSgncmVsJywgJ2ltcG9ydCcpLFxuICAgIHAuaGFzQXR0clZhbHVlKCd0eXBlJywgJ2NzcycpXG4gIClcbik7XG5cbnZhciBpc0pTU2NyaXB0Tm9kZSA9IHAuQU5EKFxuICBwLmhhc1RhZ05hbWUoJ3NjcmlwdCcpLFxuICBwLk9SKFxuICAgIHAuTk9UKHAuaGFzQXR0cigndHlwZScpKSxcbiAgICBwLmhhc0F0dHJWYWx1ZSgndHlwZScsICd0ZXh0L2phdmFzY3JpcHQnKSxcbiAgICBwLmhhc0F0dHJWYWx1ZSgndHlwZScsICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JylcbiAgKVxuKTtcblxuZnVuY3Rpb24gYWRkTm9kZShub2RlLCByZWdpc3RyeSkge1xuICBpZiAoaXNIdG1sSW1wb3J0Tm9kZShub2RlKSkge1xuICAgIHJlZ2lzdHJ5LmltcG9ydC5wdXNoKG5vZGUpO1xuICB9IGVsc2UgaWYgKGlzU3R5bGVOb2RlKG5vZGUpKSB7XG4gICAgcmVnaXN0cnkuc3R5bGUucHVzaChub2RlKTtcbiAgfSBlbHNlIGlmIChpc0pTU2NyaXB0Tm9kZShub2RlKSkge1xuICAgIHJlZ2lzdHJ5LnNjcmlwdC5wdXNoKG5vZGUpO1xuICB9IGVsc2UgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ2Jhc2UnKSB7XG4gICAgcmVnaXN0cnkuYmFzZS5wdXNoKG5vZGUpO1xuICB9IGVsc2UgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ3RlbXBsYXRlJykge1xuICAgIHJlZ2lzdHJ5LnRlbXBsYXRlLnB1c2gobm9kZSk7XG4gIH0gZWxzZSBpZiAobm9kZS50YWdOYW1lID09PSAnZG9tLW1vZHVsZScpIHtcbiAgICByZWdpc3RyeVsnZG9tLW1vZHVsZSddLnB1c2gobm9kZSk7XG4gIH0gZWxzZSBpZiAoZG9tNS5pc0NvbW1lbnROb2RlKG5vZGUpKSB7XG4gICAgcmVnaXN0cnkuY29tbWVudC5wdXNoKG5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldExpbmVBbmRDb2x1bW4oc3RyaW5nLCBjaGFyTnVtYmVyKSB7XG4gIGlmIChjaGFyTnVtYmVyID4gc3RyaW5nLmxlbmd0aCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVE9ETyhham8pOiBDYWNoaW5nIHRoZSBsaW5lIGxlbmd0aHMgb2YgZWFjaCBkb2N1bWVudCBjb3VsZCBiZSBtdWNoIGZhc3Rlci5cbiAgdmFyIHNsaWNlZCA9IHN0cmluZy5zbGljZSgwLGNoYXJOdW1iZXIrMSk7XG4gIHZhciBzcGxpdCA9IHNsaWNlZC5zcGxpdCgnXFxuJyk7XG4gIHZhciBsaW5lID0gc3BsaXQubGVuZ3RoO1xuICB2YXIgY29sdW1uID0gc3BsaXRbc3BsaXQubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICByZXR1cm4ge2xpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1ufTtcbn1cblxuLyoqXG4qIFBhcnNlNSdzIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyc2VkIGh0bWwgZG9jdW1lbnQuXG4qIEB0eXBlZGVmIHtPYmplY3R9IERvY3VtZW50QVNUXG4qL1xuXG4vKipcbiogVGhlIEFTVHMgb2YgdGhlIEhUTUwgZWxlbWVudHMgbmVlZGVkIHRvIHJlcHJlc2VudCBQb2x5bWVyIGVsZW1lbnRzLlxuKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJzZWRJbXBvcnRcbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IHRlbXBsYXRlIFRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIEFTVCBhdCBlYWNoIG91dGVybW9zdCB0ZW1wbGF0ZSB0YWcuXG4qIEBwcm9wZXJ0eSB7QXJyYXk8RG9jdW1lbnRBU1Q+fSBzY3JpcHQgVGhlIGVudHJ5IHBvaW50cyB0byB0aGUgQVNUIGF0IGVhY2ggc2NyaXB0IHRhZyBub3QgaW5zaWRlIGEgdGVtcGxhdGUuXG4qIEBwcm9wZXJ0eSB7QXJyYXk8RG9jdW1lbnRBU1Q+fSBzdHlsZSBUaGUgZW50cnkgcG9pbnRzIHRvIHRoZSBBU1QgYXQgc3R5bGUgdGFnIG91dHNpZGUgYSB0ZW1wbGF0ZS5cbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IGRvbS1tb2R1bGUgVGhlIGVudHJ5IHBvaW50cyB0byB0aGUgQVNUIGF0IGVhY2ggb3V0ZXJtb3N0IGRvbS1tb2R1bGUgZWxlbWVudC5cbiogQHByb3BlcnR5IHtEb2N1bWVudEFTVH0gYXN0IFRoZSBmdWxsIHBhcnNlNSBhc3QgZm9yIHRoZSBkb2N1bWVudC5cbiovXG5cbi8qKlxuKiBQYXJzZSBodG1sIGludG8gQVNUcy5cbiogQHBhcmFtIHtzdHJpbmd9IGh0bWxTdHJpbmcgQSB1dGY4LCBodG1sNSBkb2N1bWVudCBjb250YWluaW5nIHBvbHltZXIgZWxlbWVudCBvciBtb2R1bGUgZGVmaW5pdG9ucy5cbiogQHBhcmFtIHtzdHJpbmd9IGhyZWYgICAgICAgVGhlIHBhdGggb2YgdGhlIGRvY3VtZW50LlxuKiBAcmV0dXJuIHtQYXJzZWRJbXBvcnR9XG4qL1xudmFyIGltcG9ydFBhcnNlID0gZnVuY3Rpb24gaW1wb3J0UGFyc2UoaHRtbFN0cmluZywgaHJlZikge1xuICB2YXIgZG9jO1xuICB0cnkge1xuICAgIGRvYyA9IGRvbTUucGFyc2UoaHRtbFN0cmluZywge2xvY2F0aW9uSW5mbzogdHJ1ZX0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQWRkIGxpbmUvY29sdW1uIGluZm9ybWF0aW9uXG4gIGRvbTUudHJlZU1hcChkb2MsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAobm9kZS5fX2xvY2F0aW9uICYmIG5vZGUuX19sb2NhdGlvbi5zdGFydCA+PSAwKSB7XG4gICAgICBub2RlLl9fbG9jYXRpb25EZXRhaWwgPSBnZXRMaW5lQW5kQ29sdW1uKGh0bWxTdHJpbmcsIG5vZGUuX19sb2NhdGlvbi5zdGFydCk7XG4gICAgICBpZiAoaHJlZikge1xuICAgICAgICBub2RlLl9fb3duZXJEb2N1bWVudCA9IGhyZWY7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICB2YXIgcmVnaXN0cnkgPSB7XG4gICAgICBiYXNlOiBbXSxcbiAgICAgIHRlbXBsYXRlOiBbXSxcbiAgICAgIHNjcmlwdDogW10sXG4gICAgICBzdHlsZTogW10sXG4gICAgICBpbXBvcnQ6IFtdLFxuICAgICAgJ2RvbS1tb2R1bGUnOiBbXSxcbiAgICAgIGNvbW1lbnQ6IFtdfTtcblxuICB2YXIgcXVldWUgPSBbXS5jb25jYXQoZG9jLmNoaWxkTm9kZXMpO1xuICB2YXIgbmV4dE5vZGU7XG4gIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgbmV4dE5vZGUgPSBxdWV1ZS5zaGlmdCgpO1xuICAgIGlmIChuZXh0Tm9kZSkge1xuICAgICAgcXVldWUgPSBxdWV1ZS5jb25jYXQobmV4dE5vZGUuY2hpbGROb2Rlcyk7XG4gICAgICBhZGROb2RlKG5leHROb2RlLCByZWdpc3RyeSk7XG4gICAgfVxuICB9XG4gIHJlZ2lzdHJ5LmFzdCA9IGRvYztcbiAgcmV0dXJuIHJlZ2lzdHJ5O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbXBvcnRQYXJzZTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLyoqXG4qIEZpbmRzIGFuZCBhbm5vdGF0ZXMgdGhlIFBvbHltZXIoKSBhbmQgbW9kdWxhdGUoKSBjYWxscyBpbiBqYXZhc2NyaXB0LlxuKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXNwcmVlID0gcmVxdWlyZSgnZXNwcmVlJyk7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGJlaGF2aW9yRmluZGVyID0gcmVxdWlyZSgnLi9iZWhhdmlvci1maW5kZXInKTtcbnZhciBlbGVtZW50RmluZGVyICA9IHJlcXVpcmUoJy4vZWxlbWVudC1maW5kZXInKTtcbnZhciBmZWF0dXJlRmluZGVyICA9IHJlcXVpcmUoJy4vZmVhdHVyZS1maW5kZXInKTtcblxuZnVuY3Rpb24gdHJhdmVyc2UodmlzaXRvclJlZ2lzdHJpZXMpIHtcbiAgdmFyIHZpc2l0b3I7XG4gIGZ1bmN0aW9uIGFwcGx5VmlzaXRvcnMobmFtZSwgbm9kZSwgcGFyZW50KSB7XG4gICAgdmFyIHJldHVyblZhbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc2l0b3JSZWdpc3RyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobmFtZSBpbiB2aXNpdG9yUmVnaXN0cmllc1tpXSkge1xuICAgICAgICByZXR1cm5WYWwgPSB2aXNpdG9yUmVnaXN0cmllc1tpXVtuYW1lXShub2RlLCBwYXJlbnQpO1xuICAgICAgICBpZiAocmV0dXJuVmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGVudGVyOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZpc2l0b3IgPSAnZW50ZXInICsgbm9kZS50eXBlO1xuICAgICAgcmV0dXJuIGFwcGx5VmlzaXRvcnModmlzaXRvciwgbm9kZSwgcGFyZW50KTtcbiAgICB9LFxuICAgIGxlYXZlOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZpc2l0b3IgPSAnbGVhdmUnICsgbm9kZS50eXBlO1xuICAgICAgcmV0dXJuIGFwcGx5VmlzaXRvcnModmlzaXRvciwgbm9kZSwgcGFyZW50KTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBqc1BhcnNlID0gZnVuY3Rpb24ganNQYXJzZShqc1N0cmluZykge1xuICB2YXIgc2NyaXB0ID0gZXNwcmVlLnBhcnNlKGpzU3RyaW5nLCB7XG4gICAgYXR0YWNoQ29tbWVudDogdHJ1ZSxcbiAgICBjb21tZW50OiB0cnVlLFxuICAgIGxvYzogdHJ1ZSxcbiAgICBlY21hRmVhdHVyZXM6IHtcbiAgICAgIGFycm93RnVuY3Rpb25zOiB0cnVlLFxuICAgICAgYmxvY2tCaW5kaW5nczogdHJ1ZSxcbiAgICAgIGRlc3RydWN0dXJpbmc6IHRydWUsXG4gICAgICByZWdleFlGbGFnOiB0cnVlLFxuICAgICAgcmVnZXhVRmxhZzogdHJ1ZSxcbiAgICAgIHRlbXBsYXRlU3RyaW5nczogdHJ1ZSxcbiAgICAgIGJpbmFyeUxpdGVyYWxzOiB0cnVlLFxuICAgICAgdW5pY29kZUNvZGVQb2ludEVzY2FwZXM6IHRydWUsXG4gICAgICBkZWZhdWx0UGFyYW1zOiB0cnVlLFxuICAgICAgcmVzdFBhcmFtczogdHJ1ZSxcbiAgICAgIGZvck9mOiB0cnVlLFxuICAgICAgb2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllczogdHJ1ZSxcbiAgICAgIG9iamVjdExpdGVyYWxTaG9ydGhhbmRNZXRob2RzOiB0cnVlLFxuICAgICAgb2JqZWN0TGl0ZXJhbFNob3J0aGFuZFByb3BlcnRpZXM6IHRydWUsXG4gICAgICBvYmplY3RMaXRlcmFsRHVwbGljYXRlUHJvcGVydGllczogdHJ1ZSxcbiAgICAgIGdlbmVyYXRvcnM6IHRydWUsXG4gICAgICBzcHJlYWQ6IHRydWUsXG4gICAgICBjbGFzc2VzOiB0cnVlLFxuICAgICAgbW9kdWxlczogdHJ1ZSxcbiAgICAgIGpzeDogdHJ1ZSxcbiAgICAgIGdsb2JhbFJldHVybjogdHJ1ZSxcbiAgICB9XG4gIH0pO1xuXG4gIHZhciBmZWF0dXJlSW5mbyA9IGZlYXR1cmVGaW5kZXIoKTtcbiAgdmFyIGJlaGF2aW9ySW5mbyA9IGJlaGF2aW9yRmluZGVyKCk7XG4gIHZhciBlbGVtZW50SW5mbyA9IGVsZW1lbnRGaW5kZXIoKTtcblxuICB2YXIgdmlzaXRvcnMgPSBbZmVhdHVyZUluZm8sIGJlaGF2aW9ySW5mbywgZWxlbWVudEluZm9dLm1hcChmdW5jdGlvbihpbmZvKSB7XG4gICAgcmV0dXJuIGluZm8udmlzaXRvcnM7XG4gIH0pO1xuICBlc3RyYXZlcnNlLnRyYXZlcnNlKHNjcmlwdCwgdHJhdmVyc2UodmlzaXRvcnMpKTtcblxuICByZXR1cm4ge1xuICAgIGJlaGF2aW9yczogYmVoYXZpb3JJbmZvLmJlaGF2aW9ycyxcbiAgICBlbGVtZW50czogIGVsZW1lbnRJbmZvLmVsZW1lbnRzLFxuICAgIGZlYXR1cmVzOiAgZmVhdHVyZUluZm8uZmVhdHVyZXMsXG4gICAgcGFyc2VkU2NyaXB0OiBzY3JpcHRcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ganNQYXJzZTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcblxudmFyIGRvY3RyaW5lID0gcmVxdWlyZSgnZG9jdHJpbmUnKTtcblxuLyoqXG4gKiBBbiBhbm5vdGF0ZWQgSlNEb2MgYmxvY2sgdGFnLCBhbGwgZmllbGRzIGFyZSBvcHRpb25hbGx5IHByb2Nlc3NlZCBleGNlcHQgZm9yXG4gKiB0aGUgdGFnOlxuICpcbiAqICAgICBAVEFHIHtUWVBFfSBOQU1FIERFU0NcbiAqXG4gKiBgbGluZWAgYW5kIGBjb2xgIGluZGljYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRleHQgdGhhdFxuICogdGhlIHRhZyB3YXMgZXh0cmFjdGVkIGZyb20gLSByZWxhdGl2ZSB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBjb21tZW50XG4gKiBjb250ZW50cyAoZS5nLiB0aGUgdmFsdWUgb2YgYGRlc2NgIG9uIGEgZGVzY3JpcHRvciBub2RlKS4gTGluZXMgYXJlXG4gKiAxLWluZGV4ZWQuXG4gKlxuICogQHR5cGVkZWYge3tcbiAqICAgdGFnOiAgIHN0cmluZyxcbiAqICAgdHlwZTogP3N0cmluZyxcbiAqICAgbmFtZTogP3N0cmluZyxcbiAqICAgZGVzY3JpcHRpb246ID9zdHJpbmcsXG4gKiB9fVxuICovXG52YXIgSnNkb2NUYWc7XG5cbi8qKlxuICogVGhlIHBhcnNlZCByZXByZXNlbnRhdGlvbiBvZiBhIEpTRG9jIGNvbW1lbnQuXG4gKlxuICogQHR5cGVkZWYge3tcbiAqICAgZGVzY3JpcHRpb246ID9zdHJpbmcsXG4gKiAgIHRhZ3M6IEFycmF5PEpzZG9jVGFnPixcbiAqIH19XG4gKi9cbnZhciBKc2RvY0Fubm90YXRpb247XG5cbi8qKlxuICogZG9jdHJpbmUgY29uZmlndXJhdGlvbixcbiAqIENVUlJFTlRMWSBVTlVTRUQgQkVDQVVTRSBQUklWQVRFXG4gKi9cbi8vIGZ1bmN0aW9uIGNvbmZpZ3VyZURvY3RyaW5lKCkge1xuXG4vLyAgIC8vIEBoZXJvIFtwYXRoL3RvL2ltYWdlXVxuLy8gICBkb2N0cmluZS5SdWxlc1snaGVybyddID0gWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ107XG5cbi8vICAgLy8gLy8gQGRlbW8gW3BhdGgvdG8vZGVtb10gW0RlbW8gdGl0bGVdXG4vLyAgIGRvY3RyaW5lLlJ1bGVzWydkZW1vJ10gPSBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdwYXJzZURlc2NyaXB0aW9uJywgJ2Vuc3VyZUVuZCddO1xuXG4vLyAgIC8vIC8vIEBwb2x5bWVyQmVoYXZpb3IgW1BvbHltZXIuQmVoYXZpb3JOYW1lXVxuLy8gICBkb2N0cmluZS5SdWxlc1sncG9seW1lckJlaGF2aW9yJ10gPSBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXTtcbi8vIH1cbi8vIGNvbmZpZ3VyZURvY3RyaW5lKCk7XG5cbi8vIEBkZW1vIFtwYXRoXSBbdGl0bGVdXG5mdW5jdGlvbiBwYXJzZURlbW8odGFnKSB7XG4gIHZhciBtYXRjaCA9ICh0YWcuZGVzY3JpcHRpb24gfHwgXCJcIikubWF0Y2goL15cXHMqKFxcUyopXFxzKiguKikkLyk7XG4gIHJldHVybiB7XG4gICAgdGFnOiAnZGVtbycsXG4gICAgdHlwZTogbnVsbCxcbiAgICBuYW1lOiBtYXRjaCA/IG1hdGNoWzFdIDogbnVsbCxcbiAgICBkZXNjcmlwdGlvbjogbWF0Y2ggPyBtYXRjaFsyXSA6IG51bGxcbiAgfTtcbn1cblxuLy8gQGhlcm8gW3BhdGhdXG5mdW5jdGlvbiBwYXJzZUhlcm8odGFnKSB7XG4gIHJldHVybiB7XG4gICAgdGFnOiAgdGFnLnRpdGxlLFxuICAgIHR5cGU6IG51bGwsXG4gICAgbmFtZTogdGFnLmRlc2NyaXB0aW9uLFxuICAgIGRlc2NyaXB0aW9uOiBudWxsXG4gIH07XG59XG5cbi8vIEBwb2x5bWVyQmVoYXZpb3IgW25hbWVdXG5mdW5jdGlvbiBwYXJzZVBvbHltZXJCZWhhdmlvcih0YWcpIHtcbiAgcmV0dXJuIHtcbiAgICB0YWc6ICB0YWcudGl0bGUsXG4gICAgdHlwZTogbnVsbCxcbiAgICBuYW1lOiB0YWcuZGVzY3JpcHRpb24sXG4gICAgZGVzY3JpcHRpb246IG51bGxcbiAgfTtcbn1cblxuLy8gQHBzZXVkb0VsZW1lbnQgbmFtZVxuZnVuY3Rpb24gcGFyc2VQc2V1ZG9FbGVtZW50KHRhZykge1xuICByZXR1cm4ge1xuICAgIHRhZzogIHRhZy50aXRsZSxcbiAgICB0eXBlOiBudWxsLFxuICAgIG5hbWU6IHRhZy5kZXNjcmlwdGlvbixcbiAgICBkZXNjcmlwdGlvbjogbnVsbFxuICB9O1xufVxuXG52YXIgQ1VTVE9NX1RBR1MgPSB7XG4gIGRlbW86IHBhcnNlRGVtbyxcbiAgaGVybzogcGFyc2VIZXJvLFxuICBwb2x5bWVyQmVoYXZpb3I6IHBhcnNlUG9seW1lckJlaGF2aW9yLFxuICBwc2V1ZG9FbGVtZW50OiBwYXJzZVBzZXVkb0VsZW1lbnRcbn07XG5cbi8qKlxuICogQ29udmVydCBkb2N0cmluZSB0YWdzIHRvIGh5ZHJvbHlzaXMgdGFnIGZvcm1hdFxuICovXG5mdW5jdGlvbiBfdGFnc1RvSHlkcm9UYWdzKHRhZ3MpIHtcbiAgaWYgKCF0YWdzKVxuICAgIHJldHVybiBudWxsO1xuICByZXR1cm4gdGFncy5tYXAoIGZ1bmN0aW9uKHRhZykge1xuICAgIGlmICh0YWcudGl0bGUgaW4gQ1VTVE9NX1RBR1MpIHtcbiAgICAgIHJldHVybiBDVVNUT01fVEFHU1t0YWcudGl0bGVdKHRhZyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFnOiAgdGFnLnRpdGxlLFxuICAgICAgICB0eXBlOiB0YWcudHlwZSA/IGRvY3RyaW5lLnR5cGUuc3RyaW5naWZ5KHRhZy50eXBlKSA6IG51bGwsXG4gICAgICAgIG5hbWU6IHRhZy5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGFnLmRlc2NyaXB0aW9uLFxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIHJlbW92ZXMgbGVhZGluZyAqLCBhbmQgYW55IHNwYWNlIGJlZm9yZSBpdFxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uIC0tIGpzIGRvYyBkZXNjcmlwdGlvblxuICovXG5mdW5jdGlvbiBfcmVtb3ZlTGVhZGluZ0FzdGVyaXNrcyhkZXNjcmlwdGlvbikge1xuICBpZiAoKHR5cGVvZiBkZXNjcmlwdGlvbikgIT09ICdzdHJpbmcnKVxuICAgIHJldHVybiBkZXNjcmlwdGlvbjtcblxuICByZXR1cm4gZGVzY3JpcHRpb25cbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCggZnVuY3Rpb24obGluZSkge1xuICAgICAgLy8gcmVtb3ZlIGxlYWRpbmcgJ1xccyonIGZyb20gZWFjaCBsaW5lXG4gICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eW1xcc10qXFwqXFxzPyguKikkLyk7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IGxpbmU7XG4gICAgfSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBKU0RvYyBzdHJpbmcgKG1pbnVzIG9wZW5pbmcvY2xvc2luZyBjb21tZW50IGRlbGltaXRlcnMpLCBleHRyYWN0IGl0c1xuICogZGVzY3JpcHRpb24gYW5kIHRhZ3MuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvY3NcbiAqIEByZXR1cm4gez9Kc2RvY0Fubm90YXRpb259XG4gKi9cbmZ1bmN0aW9uIHBhcnNlSnNkb2MoZG9jcykge1xuICBkb2NzID0gX3JlbW92ZUxlYWRpbmdBc3Rlcmlza3MoZG9jcyk7XG4gIHZhciBkID0gZG9jdHJpbmUucGFyc2UoZG9jcywge1xuICAgIHVud3JhcDogZmFsc2UsXG4gICAgbGluZU51bWJlcjogdHJ1ZSxcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHRydWVcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZGVzY3JpcHRpb246IGQuZGVzY3JpcHRpb24sXG4gICAgdGFnczogX3RhZ3NUb0h5ZHJvVGFncyhkLnRhZ3MpXG4gIH07XG59XG5cbi8vIFV0aWxpdHlcblxuLyoqXG4gKiBAcGFyYW0ge0pzZG9jQW5ub3RhdGlvbn0ganNkb2NcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNUYWcoanNkb2MsIHRhZ05hbWUpIHtcbiAgaWYgKCFqc2RvYyB8fCAhanNkb2MudGFncykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4ganNkb2MudGFncy5zb21lKGZ1bmN0aW9uKHRhZykgeyByZXR1cm4gdGFnLnRhZyA9PT0gdGFnTmFtZTsgfSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IEpTRG9jIHRhZyBtYXRjaGluZyBgbmFtZWAgYW5kIHJldHVybnMgaXRzIHZhbHVlIGF0IGBrZXlgLlxuICpcbiAqIEBwYXJhbSB7SnNkb2NBbm5vdGF0aW9ufSBqc2RvY1xuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWVcbiAqIEBwYXJhbSB7c3RyaW5nPX0ga2V5IElmIG9taXR0ZWQsIHRoZSBlbnRpcmUgdGFnIG9iamVjdCBpcyByZXR1cm5lZC5cbiAqIEByZXR1cm4gez9zdHJpbmd8T2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRUYWcoanNkb2MsIHRhZ05hbWUsIGtleSkge1xuICBpZiAoIWpzZG9jIHx8ICFqc2RvYy50YWdzKSByZXR1cm4gZmFsc2U7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwganNkb2MudGFncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciB0YWcgPSBqc2RvYy50YWdzW2ldO1xuICAgIGlmICh0YWcudGFnID09PSB0YWdOYW1lKSB7XG4gICAgICByZXR1cm4ga2V5ID8gdGFnW2tleV0gOiB0YWc7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7P3N0cmluZ30gdGV4dFxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdW5pbmRlbnQodGV4dCkge1xuICBpZiAoIXRleHQpIHJldHVybiB0ZXh0O1xuICB2YXIgbGluZXMgID0gdGV4dC5yZXBsYWNlKC9cXHQvZywgJyAgJykuc3BsaXQoJ1xcbicpO1xuICB2YXIgaW5kZW50ID0gbGluZXMucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGxpbmUpIHtcbiAgICBpZiAoL15cXHMqJC8udGVzdChsaW5lKSkgcmV0dXJuIHByZXY7ICAvLyBDb21wbGV0ZWx5IGlnbm9yZSBibGFuayBsaW5lcy5cblxuICAgIHZhciBsaW5lSW5kZW50ID0gbGluZS5tYXRjaCgvXihcXHMqKS8pWzBdLmxlbmd0aDtcbiAgICBpZiAocHJldiA9PT0gbnVsbCkgcmV0dXJuIGxpbmVJbmRlbnQ7XG4gICAgcmV0dXJuIGxpbmVJbmRlbnQgPCBwcmV2ID8gbGluZUluZGVudCA6IHByZXY7XG4gIH0sIG51bGwpO1xuXG4gIHJldHVybiBsaW5lcy5tYXAoZnVuY3Rpb24obCkgeyByZXR1cm4gbC5zdWJzdHIoaW5kZW50KTsgfSkuam9pbignXFxuJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRUYWc6ICAgICBnZXRUYWcsXG4gIGhhc1RhZzogICAgIGhhc1RhZyxcbiAgcGFyc2VKc2RvYzogcGFyc2VKc2RvYyxcbiAgdW5pbmRlbnQ6ICAgdW5pbmRlbnRcbn07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCl7XG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuLy8ganNoaW50IG5vZGU6dHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBqc2hpbnQgLVcwNzlcbi8vIFByb21pc2UgcG9seWZpbGxcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2UgfHwgcmVxdWlyZSgnZXM2LXByb21pc2UnKS5Qcm9taXNlO1xuLy8ganNoaW50ICtXMDc5XG5cbmZ1bmN0aW9uIERlZmVycmVkKCkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHNlbGYucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgc2VsZi5yZWplY3QgPSByZWplY3Q7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IGtub3dzIGhvdyB0byByZXNvbHZlIHJlc291cmNlcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlc29sdmVyXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHByb3BlcnR5IHtmdW5jdGlvbihzdHJpbmcsIERlZmVycmVkKTogYm9vbGVhbn0gYWNjZXB0IEF0dGVtcHQgdG8gcmVzb2x2ZVxuICogICAgIGBkZWZlcnJlZGAgd2l0aCB0aGUgY29udGVudHMgdGhlIHNwZWNpZmllZCBVUkwuIFJldHVybnMgZmFsc2UgaWYgdGhlXG4gKiAgICAgUmVzb2x2ZXIgaXMgdW5hYmxlIHRvIHJlc29sdmUgdGhlIFVSTC5cbiAqL1xuXG5cbi8qKlxuICogQSBGaWxlTG9hZGVyIGxldHMgeW91IHJlc29sdmUgVVJMcyB3aXRoIGEgc2V0IG9mIHBvdGVudGlhbCByZXNvbHZlcnMuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cbmZ1bmN0aW9uIEZpbGVMb2FkZXIoKSB7XG4gIHRoaXMucmVzb2x2ZXJzID0gW107XG4gIC8vIG1hcCB1cmwgLT4gRGVmZXJyZWRcbiAgdGhpcy5yZXF1ZXN0cyA9IHt9O1xufVxuRmlsZUxvYWRlci5wcm90b3R5cGUgPSB7XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBpbnN0YW5jZSBvZiBhIFJlc29sdmVyIGNsYXNzIHRvIHRoZSBsaXN0IG9mIHVybCByZXNvbHZlcnNcbiAgICpcbiAgICogT3JkZXJpbmcgb2YgcmVzb2x2ZXJzIGlzIG1vc3QgdG8gbGVhc3QgcmVjZW50bHkgYWRkZWRcbiAgICogVGhlIGZpcnN0IHJlc29sdmVyIHRvIFwiYWNjZXB0XCIgdGhlIHVybCB3aW5zLlxuICAgKiBAcGFyYW0ge1Jlc29sdmVyfSByZXNvbHZlciBUaGUgcmVzb2x2ZXIgdG8gYWRkLlxuICAgKi9cbiAgYWRkUmVzb2x2ZXI6IGZ1bmN0aW9uKHJlc29sdmVyKSB7XG4gICAgdGhpcy5yZXNvbHZlcnMucHVzaChyZXNvbHZlcik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHByb21pc2UgZm9yIGFuIGFic29sdXRlIHVybFxuICAgKlxuICAgKiBVcmwgcmVxdWVzdHMgYXJlIGRlZHVwbGljYXRlZCBieSB0aGUgbG9hZGVyLCByZXR1cm5pbmcgdGhlIHNhbWUgUHJvbWlzZSBmb3JcbiAgICogaWRlbnRpY2FsIHVybHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAgICAgICAgVGhlIGFic29sdXRlIHVybCB0byByZXF1ZXN0LlxuICAgKiBAcmV0dXJuIHtQcm9taXNlLjxzdHJpbmc+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29udGVudHMgb2YgdGhlIFVSTC5cbiAgICovXG4gIHJlcXVlc3Q6IGZ1bmN0aW9uKHVyaSkge1xuICAgIHZhciBwcm9taXNlO1xuXG4gICAgaWYgKCEodXJpIGluIHRoaXMucmVxdWVzdHMpKSB7XG4gICAgICB2YXIgaGFuZGxlZCA9IGZhbHNlO1xuICAgICAgdmFyIGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgICB0aGlzLnJlcXVlc3RzW3VyaV0gPSBkZWZlcnJlZDtcblxuICAgICAgLy8gbG9vcCBiYWNrd2FyZHMgdGhyb3VnaCByZXNvbHZlcnMgdW50aWwgb25lIFwiYWNjZXB0c1wiIHRoZSByZXF1ZXN0XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5yZXNvbHZlcnMubGVuZ3RoIC0gMSwgcjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgciA9IHRoaXMucmVzb2x2ZXJzW2ldO1xuICAgICAgICBpZiAoci5hY2NlcHQodXJpLCBkZWZlcnJlZCkpIHtcbiAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWhhbmRsZWQpIHtcbiAgICAgICAgZGVmZXJyZWQucmVqZWN0KG5ldyBFcnJvcignbm8gcmVzb2x2ZXIgZm91bmQgZm9yICcgKyB1cmkpKTtcbiAgICAgIH1cblxuICAgICAgcHJvbWlzZSA9IGRlZmVycmVkLnByb21pc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UgPSB0aGlzLnJlcXVlc3RzW3VyaV0ucHJvbWlzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGaWxlTG9hZGVyO1xuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklteHBZaTlzYjJGa1pYSXZabWxzWlMxc2IyRmtaWEl1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVCc2FXTmxibk5sWEc0Z0tpQkRiM0I1Y21sbmFIUWdLR01wSURJd01UVWdWR2hsSUZCdmJIbHRaWElnVUhKdmFtVmpkQ0JCZFhSb2IzSnpMaUJCYkd3Z2NtbG5hSFJ6SUhKbGMyVnlkbVZrTGx4dUlDb2dWR2hwY3lCamIyUmxJRzFoZVNCdmJteDVJR0psSUhWelpXUWdkVzVrWlhJZ2RHaGxJRUpUUkNCemRIbHNaU0JzYVdObGJuTmxJR1p2ZFc1a0lHRjBJR2gwZEhBNkx5OXdiMng1YldWeUxtZHBkR2gxWWk1cGJ5OU1TVU5GVGxORkxuUjRkRnh1SUNvZ1ZHaGxJR052YlhCc1pYUmxJSE5sZENCdlppQmhkWFJvYjNKeklHMWhlU0JpWlNCbWIzVnVaQ0JoZENCb2RIUndPaTh2Y0c5c2VXMWxjaTVuYVhSb2RXSXVhVzh2UVZWVVNFOVNVeTUwZUhSY2JpQXFJRlJvWlNCamIyMXdiR1YwWlNCelpYUWdiMllnWTI5dWRISnBZblYwYjNKeklHMWhlU0JpWlNCbWIzVnVaQ0JoZENCb2RIUndPaTh2Y0c5c2VXMWxjaTVuYVhSb2RXSXVhVzh2UTA5T1ZGSkpRbFZVVDFKVExuUjRkRnh1SUNvZ1EyOWtaU0JrYVhOMGNtbGlkWFJsWkNCaWVTQkhiMjluYkdVZ1lYTWdjR0Z5ZENCdlppQjBhR1VnY0c5c2VXMWxjaUJ3Y205cVpXTjBJR2x6SUdGc2MyOWNiaUFxSUhOMVltcGxZM1FnZEc4Z1lXNGdZV1JrYVhScGIyNWhiQ0JKVUNCeWFXZG9kSE1nWjNKaGJuUWdabTkxYm1RZ1lYUWdhSFIwY0RvdkwzQnZiSGx0WlhJdVoybDBhSFZpTG1sdkwxQkJWRVZPVkZNdWRIaDBYRzRnS2k5Y2JseHVMeThnYW5Ob2FXNTBJRzV2WkdVNmRISjFaVnh1SjNWelpTQnpkSEpwWTNRbk8xeHVYRzR2THlCcWMyaHBiblFnTFZjd056bGNiaTh2SUZCeWIyMXBjMlVnY0c5c2VXWnBiR3hjYm5aaGNpQlFjbTl0YVhObElEMGdaMnh2WW1Gc0xsQnliMjFwYzJVZ2ZId2djbVZ4ZFdseVpTZ25aWE0yTFhCeWIyMXBjMlVuS1M1UWNtOXRhWE5sTzF4dUx5OGdhbk5vYVc1MElDdFhNRGM1WEc1Y2JtWjFibU4wYVc5dUlFUmxabVZ5Y21Wa0tDa2dlMXh1SUNCMllYSWdjMlZzWmlBOUlIUm9hWE03WEc0Z0lIUm9hWE11Y0hKdmJXbHpaU0E5SUc1bGR5QlFjbTl0YVhObEtHWjFibU4wYVc5dUtISmxjMjlzZG1Vc0lISmxhbVZqZENrZ2UxeHVJQ0FnSUhObGJHWXVjbVZ6YjJ4MlpTQTlJSEpsYzI5c2RtVTdYRzRnSUNBZ2MyVnNaaTV5WldwbFkzUWdQU0J5WldwbFkzUTdYRzRnSUgwcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVGdUlHOWlhbVZqZENCMGFHRjBJR3R1YjNkeklHaHZkeUIwYnlCeVpYTnZiSFpsSUhKbGMyOTFjbU5sY3k1Y2JpQXFJRUIwZVhCbFpHVm1JSHRQWW1wbFkzUjlJRkpsYzI5c2RtVnlYRzRnS2lCQWJXVnRZbVZ5YjJZZ2FIbGtjbTlzZVhOcGMxeHVJQ29nUUhCeWIzQmxjblI1SUh0bWRXNWpkR2x2YmloemRISnBibWNzSUVSbFptVnljbVZrS1RvZ1ltOXZiR1ZoYm4wZ1lXTmpaWEIwSUVGMGRHVnRjSFFnZEc4Z2NtVnpiMngyWlZ4dUlDb2dJQ0FnSUdCa1pXWmxjbkpsWkdBZ2QybDBhQ0IwYUdVZ1kyOXVkR1Z1ZEhNZ2RHaGxJSE53WldOcFptbGxaQ0JWVWt3dUlGSmxkSFZ5Ym5NZ1ptRnNjMlVnYVdZZ2RHaGxYRzRnS2lBZ0lDQWdVbVZ6YjJ4MlpYSWdhWE1nZFc1aFlteGxJSFJ2SUhKbGMyOXNkbVVnZEdobElGVlNUQzVjYmlBcUwxeHVYRzVjYmk4cUtseHVJQ29nUVNCR2FXeGxURzloWkdWeUlHeGxkSE1nZVc5MUlISmxjMjlzZG1VZ1ZWSk1jeUIzYVhSb0lHRWdjMlYwSUc5bUlIQnZkR1Z1ZEdsaGJDQnlaWE52YkhabGNuTXVYRzRnS2lCQVkyOXVjM1J5ZFdOMGIzSmNiaUFxSUVCdFpXMWlaWEp2WmlCb2VXUnliMng1YzJselhHNGdLaTljYm1aMWJtTjBhVzl1SUVacGJHVk1iMkZrWlhJb0tTQjdYRzRnSUhSb2FYTXVjbVZ6YjJ4MlpYSnpJRDBnVzEwN1hHNGdJQzh2SUcxaGNDQjFjbXdnTFQ0Z1JHVm1aWEp5WldSY2JpQWdkR2hwY3k1eVpYRjFaWE4wY3lBOUlIdDlPMXh1ZlZ4dVJtbHNaVXh2WVdSbGNpNXdjbTkwYjNSNWNHVWdQU0I3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUZrWkNCaGJpQnBibk4wWVc1alpTQnZaaUJoSUZKbGMyOXNkbVZ5SUdOc1lYTnpJSFJ2SUhSb1pTQnNhWE4wSUc5bUlIVnliQ0J5WlhOdmJIWmxjbk5jYmlBZ0lDcGNiaUFnSUNvZ1QzSmtaWEpwYm1jZ2IyWWdjbVZ6YjJ4MlpYSnpJR2x6SUcxdmMzUWdkRzhnYkdWaGMzUWdjbVZqWlc1MGJIa2dZV1JrWldSY2JpQWdJQ29nVkdobElHWnBjbk4wSUhKbGMyOXNkbVZ5SUhSdklGd2lZV05qWlhCMFhDSWdkR2hsSUhWeWJDQjNhVzV6TGx4dUlDQWdLaUJBY0dGeVlXMGdlMUpsYzI5c2RtVnlmU0J5WlhOdmJIWmxjaUJVYUdVZ2NtVnpiMngyWlhJZ2RHOGdZV1JrTGx4dUlDQWdLaTljYmlBZ1lXUmtVbVZ6YjJ4MlpYSTZJR1oxYm1OMGFXOXVLSEpsYzI5c2RtVnlLU0I3WEc0Z0lDQWdkR2hwY3k1eVpYTnZiSFpsY25NdWNIVnphQ2h5WlhOdmJIWmxjaWs3WEc0Z0lIMHNYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5YmlCaElIQnliMjFwYzJVZ1ptOXlJR0Z1SUdGaWMyOXNkWFJsSUhWeWJGeHVJQ0FnS2x4dUlDQWdLaUJWY213Z2NtVnhkV1Z6ZEhNZ1lYSmxJR1JsWkhWd2JHbGpZWFJsWkNCaWVTQjBhR1VnYkc5aFpHVnlMQ0J5WlhSMWNtNXBibWNnZEdobElITmhiV1VnVUhKdmJXbHpaU0JtYjNKY2JpQWdJQ29nYVdSbGJuUnBZMkZzSUhWeWJITmNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFZ5YkNBZ0lDQWdJQ0FnVkdobElHRmljMjlzZFhSbElIVnliQ0IwYnlCeVpYRjFaWE4wTGx4dUlDQWdLaUJBY21WMGRYSnVJSHRRY205dGFYTmxManh6ZEhKcGJtYytmU0JCSUhCeWIyMXBjMlVnZEdoaGRDQnlaWE52YkhabGN5QjBieUIwYUdVZ1kyOXVkR1Z1ZEhNZ2IyWWdkR2hsSUZWU1RDNWNiaUFnSUNvdlhHNGdJSEpsY1hWbGMzUTZJR1oxYm1OMGFXOXVLSFZ5YVNrZ2UxeHVJQ0FnSUhaaGNpQndjbTl0YVhObE8xeHVYRzRnSUNBZ2FXWWdLQ0VvZFhKcElHbHVJSFJvYVhNdWNtVnhkV1Z6ZEhNcEtTQjdYRzRnSUNBZ0lDQjJZWElnYUdGdVpHeGxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdkbUZ5SUdSbFptVnljbVZrSUQwZ2JtVjNJRVJsWm1WeWNtVmtLQ2s3WEc0Z0lDQWdJQ0IwYUdsekxuSmxjWFZsYzNSelczVnlhVjBnUFNCa1pXWmxjbkpsWkR0Y2JseHVJQ0FnSUNBZ0x5OGdiRzl2Y0NCaVlXTnJkMkZ5WkhNZ2RHaHliM1ZuYUNCeVpYTnZiSFpsY25NZ2RXNTBhV3dnYjI1bElGd2lZV05qWlhCMGMxd2lJSFJvWlNCeVpYRjFaWE4wWEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ2RHaHBjeTV5WlhOdmJIWmxjbk11YkdWdVozUm9JQzBnTVN3Z2Nqc2dhU0ErUFNBd095QnBMUzBwSUh0Y2JpQWdJQ0FnSUNBZ2NpQTlJSFJvYVhNdWNtVnpiMngyWlhKelcybGRPMXh1SUNBZ0lDQWdJQ0JwWmlBb2NpNWhZMk5sY0hRb2RYSnBMQ0JrWldabGNuSmxaQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQm9ZVzVrYkdWa0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnBaaUFvSVdoaGJtUnNaV1FwSUh0Y2JpQWdJQ0FnSUNBZ1pHVm1aWEp5WldRdWNtVnFaV04wS0c1bGR5QkZjbkp2Y2lnbmJtOGdjbVZ6YjJ4MlpYSWdabTkxYm1RZ1ptOXlJQ2NnS3lCMWNta3BLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnY0hKdmJXbHpaU0E5SUdSbFptVnljbVZrTG5CeWIyMXBjMlU3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIQnliMjFwYzJVZ1BTQjBhR2x6TG5KbGNYVmxjM1J6VzNWeWFWMHVjSEp2YldselpUdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnY0hKdmJXbHpaVHRjYmlBZ2ZWeHVmVHRjYmx4dWJXOWtkV3hsTG1WNGNHOXlkSE1nUFNCR2FXeGxURzloWkdWeU8xeHVJbDE5IiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5cbi8vIGpzaGludCBub2RlOnRydWVcbid1c2Ugc3RyaWN0JztcblxudmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIHVybCA9IHJlcXVpcmUoJ3VybCcpO1xuXG5mdW5jdGlvbiBnZXRGaWxlKGZpbGVQYXRoLCBkZWZlcnJlZCwgc2Vjb25kUGF0aCkge1xuICBmcy5yZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04JywgZnVuY3Rpb24oZXJyLCBjb250ZW50KSB7XG4gICAgaWYgKGVycikge1xuICAgICAgaWYgKHNlY29uZFBhdGgpIHtcbiAgICAgICAgZ2V0RmlsZShzZWNvbmRQYXRoLCBkZWZlcnJlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SIGZpbmRpbmcgXCIgKyBmaWxlUGF0aCk7XG4gICAgICAgIGRlZmVycmVkLnJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWZlcnJlZC5yZXNvbHZlKGNvbnRlbnQpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGBwYXRoYWAgaXMgYSBzaWJsaW5nIG9yIGF1bnQgb2YgYHBhdGhiYC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU2libGluZ09yQXVudChwYXRoYSwgcGF0aGIpIHtcbiAgdmFyIHBhcmVudCA9IHBhdGguZGlybmFtZShwYXRoYSk7XG4gIGlmIChwYXRoYi5pbmRleE9mKHBhdGhhKSA9PT0gLTEgJiYgcGF0aGIuaW5kZXhPZihwYXJlbnQpID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoYW5nZSBgbG9jYWxQYXRoYCBmcm9tIGEgc2libGluZyBvZiBgYmFzZVBhdGhgIHRvIGJlIGEgY2hpbGQgb2ZcbiAqIGBiYXNlUGF0aGAgam9pbmVkIHdpdGggYHJlZGlyZWN0YC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcmVkaXJlY3RTaWJsaW5nKGJhc2VQYXRoLCBsb2NhbFBhdGgsIHJlZGlyZWN0KSB7XG4gIHZhciBwYXJlbnQgPSBwYXRoLmRpcm5hbWUoYmFzZVBhdGgpO1xuICB2YXIgcmVkaXJlY3RlZCA9IHBhdGguam9pbihiYXNlUGF0aCwgcmVkaXJlY3QsIGxvY2FsUGF0aC5zbGljZShwYXJlbnQubGVuZ3RoKSk7XG4gIHJldHVybiByZWRpcmVjdGVkO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHJlcXVlc3RzIHZpYSB0aGUgZmlsZSBzeXN0ZW0uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnICBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmhvc3QgSG9zdG5hbWUgdG8gbWF0Y2ggZm9yIGFic29sdXRlIHVybHMuXG4gKiAgICAgTWF0Y2hlcyBcIi9cIiBieSBkZWZhdWx0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLmJhc2VQYXRoIFByZWZpeCBkaXJlY3RvcnkgZm9yIGNvbXBvbmVudHMgaW4gdXJsLlxuICogICAgIERlZmF1bHRzIHRvIFwiL1wiLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5yb290IEZpbGVzeXN0ZW0gcm9vdCB0byBzZWFyY2guIERlZmF1bHRzIHRvIHRoZVxuICogICAgIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnJlZGlyZWN0IFdoZXJlIHRvIHJlZGlyZWN0IGxvb2t1cHMgdG8gc2libGluZ3MuXG4gKi9cbmZ1bmN0aW9uIEZTUmVzb2x2ZXIoY29uZmlnKSB7XG4gIHRoaXMuY29uZmlnID0gY29uZmlnIHx8IHt9O1xufVxuRlNSZXNvbHZlci5wcm90b3R5cGUgPSB7XG4gIGFjY2VwdDogZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICAgIHZhciBwYXJzZWQgPSB1cmwucGFyc2UodXJpKTtcbiAgICB2YXIgaG9zdCA9IHRoaXMuY29uZmlnLmhvc3Q7XG4gICAgdmFyIGJhc2UgPSB0aGlzLmNvbmZpZy5iYXNlUGF0aCAmJiBkZWNvZGVVUklDb21wb25lbnQodGhpcy5jb25maWcuYmFzZVBhdGgpO1xuICAgIHZhciByb290ID0gdGhpcy5jb25maWcucm9vdCAmJiBwYXRoLm5vcm1hbGl6ZSh0aGlzLmNvbmZpZy5yb290KTtcbiAgICB2YXIgcmVkaXJlY3QgPSB0aGlzLmNvbmZpZy5yZWRpcmVjdDtcblxuICAgIHZhciBsb2NhbDtcblxuICAgIGlmICghcGFyc2VkLmhvc3RuYW1lIHx8IHBhcnNlZC5ob3N0bmFtZSA9PT0gaG9zdCkge1xuICAgICAgbG9jYWwgPSBwYXJzZWQucGF0aG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGxvY2FsKSB7XG4gICAgICAvLyB1bi1lc2NhcGUgSFRNTCBlc2NhcGVzXG4gICAgICBsb2NhbCA9IGRlY29kZVVSSUNvbXBvbmVudChsb2NhbCk7XG5cbiAgICAgIGlmIChiYXNlKSB7XG4gICAgICAgIGxvY2FsID0gcGF0aC5yZWxhdGl2ZShiYXNlLCBsb2NhbCk7XG4gICAgICB9XG4gICAgICBpZiAocm9vdCkge1xuICAgICAgICBsb2NhbCA9IHBhdGguam9pbihyb290LCBsb2NhbCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBiYWNrdXA7XG4gICAgICBpZiAocmVkaXJlY3QgJiYgaXNTaWJsaW5nT3JBdW50KHJvb3QsIGxvY2FsKSkge1xuICAgICAgICBiYWNrdXAgPSByZWRpcmVjdFNpYmxpbmcocm9vdCwgbG9jYWwsIHJlZGlyZWN0KTtcbiAgICAgIH1cblxuICAgICAgZ2V0RmlsZShsb2NhbCwgZGVmZXJyZWQsIGJhY2t1cCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRlNSZXNvbHZlcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSByZXNvbHZlciB0aGF0IHJlc29sdmVzIHRvIG51bGwgYW55IHVyaSBtYXRjaGluZyBjb25maWcuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnIFRoZSB1cmwgdG8gYGFjY2VwdGAuXG4gKi9cbmZ1bmN0aW9uIE5vb3BSZXNvbHZlcihjb25maWcpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG59XG5cbk5vb3BSZXNvbHZlci5wcm90b3R5cGUgPSB7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICB1cmkgICAgICBUaGUgYWJzb2x1dGUgVVJJIGJlaW5nIHJlcXVlc3RlZC5cbiAgICogQHBhcmFtIHshRGVmZXJyZWR9IGRlZmVycmVkIFRoZSBkZWZlcnJlZCBwcm9taXNlIHRoYXQgc2hvdWxkIGJlIHJlc29sdmVkIGlmXG4gICAqICAgICB0aGlzIHJlc29sdmVyIGhhbmRsZXMgdGhlIFVSSS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgVVJJIGlzIGhhbmRsZWQgYnkgdGhpcyByZXNvbHZlci5cbiAgICovXG4gIGFjY2VwdDogZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICAgIGlmICghdGhpcy5jb25maWcudGVzdCkge1xuICAgICAgaWYgKHVyaS5zZWFyY2godGhpcy5jb25maWcpID09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLmNvbmZpZy50ZXN0KHVyaSkpIHJldHVybiBmYWxzZTtcblxuICAgIGRlZmVycmVkLnJlc29sdmUoJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5vb3BSZXNvbHZlcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG4ndXNlIHN0cmljdCc7XG5cbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcblxudmFyIEZTUmVzb2x2ZXIgPSByZXF1aXJlKCcuL2ZzLXJlc29sdmVyJyk7XG5cbi8qKlxuICogQSBzaW5nbGUgcmVkaXJlY3QgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnByb3RvY29sICAgICBUaGUgcHJvdG9jb2wgdGhpcyByZWRpcmVjdCBtYXRjaGVzLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5ob3N0bmFtZSAgICAgVGhlIGhvc3QgbmFtZSB0aGlzIHJlZGlyZWN0IG1hdGNoZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnBhdGggICAgICAgICBUaGUgcGFydCBvZiB0aGUgcGF0aCB0byBtYXRjaCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2Ugd2l0aCAncmVkaXJlY3RQYXRoJ1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5yZWRpcmVjdFBhdGggVGhlIGxvY2FsIGZpbGVzeXN0ZW0gcGF0aCB0aGF0IHNob3VsZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZSBcInByb3RvY29sOi8vaG9zbmFtZS9wYXRoL1wiXG4gKi9cbmZ1bmN0aW9uIFByb3RvY29sUmVkaXJlY3QoY29uZmlnKXtcbiAgdGhpcy5wcm90b2NvbCA9IGNvbmZpZy5wcm90b2NvbDtcbiAgdGhpcy5ob3N0bmFtZSA9IGNvbmZpZy5ob3N0bmFtZTtcbiAgdGhpcy5wYXRoID0gY29uZmlnLnBhdGg7XG4gIHRoaXMucmVkaXJlY3RQYXRoID0gY29uZmlnLnJlZGlyZWN0UGF0aDtcbn1cblxuUHJvdG9jb2xSZWRpcmVjdC5wcm90b3R5cGUgPSB7XG4gIC8qKlxuICAgKiBUaGUgcHJvdG9jb2wgdGhpcyByZWRpcmVjdCBtYXRjaGVzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgcHJvdG9jb2w6IG51bGwsXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBuYW1lIHRoaXMgcmVkaXJlY3QgbWF0Y2hlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGhvc3RuYW1lOiBudWxsLFxuXG4gIC8qKlxuICAgKiBUaGUgcGFydCBvZiB0aGUgcGF0aCB0byBtYXRjaCBhbmQgcmVwbGFjZSB3aXRoICdyZWRpcmVjdFBhdGgnXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBwYXRoOiBudWxsLFxuXG4gIC8qKlxuICAgKiBUaGUgbG9jYWwgZmlsZXN5c3RlbSBwYXRoIHRoYXQgc2hvdWxkIHJlcGxhY2UgXCJwcm90b2NvbDovL2hvc25hbWUvcGF0aC9cIlxuICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgKi9cbiAgcmVkaXJlY3RQYXRoOiBudWxsLFxuXG4gIHJlZGlyZWN0OiBmdW5jdGlvbiByZWRpcmVjdCh1cmkpIHtcbiAgICB2YXIgcGFyc2VkID0gdXJsLnBhcnNlKHVyaSk7XG4gICAgaWYgKHRoaXMucHJvdG9jb2wgIT09IHBhcnNlZC5wcm90b2NvbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lICE9PSBwYXJzZWQuaG9zdG5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkLnBhdGhuYW1lLmluZGV4T2YodGhpcy5wYXRoKSAhPT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5yZWRpcmVjdFBhdGgsXG4gICAgICBwYXJzZWQucGF0aG5hbWUuc2xpY2UodGhpcy5wYXRoLmxlbmd0aCkpO1xuICB9XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHByb3RvY29sOi8vaG9zdG5hbWUvcGF0aCB0byB0aGUgbG9jYWwgZmlsZXN5c3RlbS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcucm9vdCBGaWxlc3lzdGVtIHJvb3QgdG8gc2VhcmNoLiBEZWZhdWx0cyB0byB0aGVcbiAqICAgICBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICogQHBhcmFtIHtBcnJheS48UHJvdG9jb2xSZWRpcmVjdD59IHJlZGlyZWN0cyBBIGxpc3Qgb2YgcHJvdG9jb2wgcmVkaXJlY3RzXG4gKiAgICAgZm9yIHRoZSByZXNvbHZlci4gVGhleSBhcmUgY2hlY2tlZCBmb3IgbWF0Y2hpbmcgZmlyc3QtdG8tbGFzdC5cbiAqL1xuZnVuY3Rpb24gUmVkaXJlY3RSZXNvbHZlcihjb25maWcpIHtcbiAgRlNSZXNvbHZlci5jYWxsKHRoaXMsIGNvbmZpZyk7XG4gIHRoaXMucmVkaXJlY3RzID0gY29uZmlnLnJlZGlyZWN0cyB8fCBbXTtcbn1cblxuUmVkaXJlY3RSZXNvbHZlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEZTUmVzb2x2ZXIucHJvdG90eXBlKTtcblxuUmVkaXJlY3RSZXNvbHZlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmVkaXJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJlZGlyZWN0ZWQgPSB0aGlzLnJlZGlyZWN0c1tpXS5yZWRpcmVjdCh1cmkpO1xuICAgIGlmIChyZWRpcmVjdGVkKSB7XG4gICAgICByZXR1cm4gRlNSZXNvbHZlci5wcm90b3R5cGUuYWNjZXB0LmNhbGwodGhpcywgcmVkaXJlY3RlZCwgZGVmZXJyZWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5SZWRpcmVjdFJlc29sdmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlZGlyZWN0UmVzb2x2ZXI7XG5SZWRpcmVjdFJlc29sdmVyLlByb3RvY29sUmVkaXJlY3QgPSBQcm90b2NvbFJlZGlyZWN0O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RSZXNvbHZlcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGdldEZpbGUodXJsLCBkZWZlcnJlZCwgY29uZmlnKSB7XG4gIC8qIGdsb2JhbCBYTUxIdHRwUmVxdWVzdDpmYWxzZSAqL1xuICB2YXIgeCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICB4Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGF0dXMgPSB4LnN0YXR1cyB8fCAwO1xuICAgIGlmIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCkge1xuICAgICAgZGVmZXJyZWQucmVzb2x2ZSh4LnJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmZXJyZWQucmVqZWN0KCd4aHIgc3RhdHVzOiAnICsgc3RhdHVzKTtcbiAgICB9XG4gIH07XG4gIHgub25lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICBkZWZlcnJlZC5yZWplY3QoZSk7XG4gIH07XG4gIHgub3BlbignR0VUJywgdXJsLCB0cnVlKTtcbiAgaWYgKGNvbmZpZyAmJiBjb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgeC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICB9XG4gIHguc2VuZCgpO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhIHJlc29sdmVyIHRoYXQgcmVxdWVzdHMgcmVzb3VyY2VzIG92ZXIgWEhSLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBhcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnJlc3BvbnNlVHlwZSBUeXBlIG9mIG9iamVjdCB0byBiZSByZXR1cm5lZCBieSB0aGVcbiAqICAgICBYSFIuIERlZmF1bHRzIHRvICd0ZXh0JywgYWNjZXB0cyAnZG9jdW1lbnQnLCAnYXJyYXlidWZmZXInLCBhbmQgJ2pzb24nLlxuICovXG5mdW5jdGlvbiBYSFJSZXNvbHZlcihjb25maWcpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG59XG5YSFJSZXNvbHZlci5wcm90b3R5cGUgPSB7XG4gIGFjY2VwdDogZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICAgIGdldEZpbGUodXJpLCBkZWZlcnJlZCwgdGhpcy5jb25maWcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFhIUlJlc29sdmVyO1xuIixudWxsLCIvLyBodHRwOi8vd2lraS5jb21tb25qcy5vcmcvd2lraS9Vbml0X1Rlc3RpbmcvMS4wXG4vL1xuLy8gVEhJUyBJUyBOT1QgVEVTVEVEIE5PUiBMSUtFTFkgVE8gV09SSyBPVVRTSURFIFY4IVxuLy9cbi8vIE9yaWdpbmFsbHkgZnJvbSBuYXJ3aGFsLmpzIChodHRwOi8vbmFyd2hhbGpzLm9yZylcbi8vIENvcHlyaWdodCAoYykgMjAwOSBUaG9tYXMgUm9iaW5zb24gPDI4MG5vcnRoLmNvbT5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAnU29mdHdhcmUnKSwgdG9cbi8vIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4vLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gd2hlbiB1c2VkIGluIG5vZGUsIHRoaXMgd2lsbCBhY3R1YWxseSBsb2FkIHRoZSB1dGlsIG1vZHVsZSB3ZSBkZXBlbmQgb25cbi8vIHZlcnN1cyBsb2FkaW5nIHRoZSBidWlsdGluIHV0aWwgbW9kdWxlIGFzIGhhcHBlbnMgb3RoZXJ3aXNlXG4vLyB0aGlzIGlzIGEgYnVnIGluIG5vZGUgbW9kdWxlIGxvYWRpbmcgYXMgZmFyIGFzIEkgYW0gY29uY2VybmVkXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwvJyk7XG5cbnZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLy8gMS4gVGhlIGFzc2VydCBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIHRoYXQgdGhyb3dcbi8vIEFzc2VydGlvbkVycm9yJ3Mgd2hlbiBwYXJ0aWN1bGFyIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuIFRoZVxuLy8gYXNzZXJ0IG1vZHVsZSBtdXN0IGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBpbnRlcmZhY2UuXG5cbnZhciBhc3NlcnQgPSBtb2R1bGUuZXhwb3J0cyA9IG9rO1xuXG4vLyAyLiBUaGUgQXNzZXJ0aW9uRXJyb3IgaXMgZGVmaW5lZCBpbiBhc3NlcnQuXG4vLyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHsgbWVzc2FnZTogbWVzc2FnZSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQgfSlcblxuYXNzZXJ0LkFzc2VydGlvbkVycm9yID0gZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3Iob3B0aW9ucykge1xuICB0aGlzLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InO1xuICB0aGlzLmFjdHVhbCA9IG9wdGlvbnMuYWN0dWFsO1xuICB0aGlzLmV4cGVjdGVkID0gb3B0aW9ucy5leHBlY3RlZDtcbiAgdGhpcy5vcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3I7XG4gIGlmIChvcHRpb25zLm1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2U7XG4gICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5tZXNzYWdlID0gZ2V0TWVzc2FnZSh0aGlzKTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSB0cnVlO1xuICB9XG4gIHZhciBzdGFja1N0YXJ0RnVuY3Rpb24gPSBvcHRpb25zLnN0YWNrU3RhcnRGdW5jdGlvbiB8fCBmYWlsO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gc3RhY2tTdGFydEZ1bmN0aW9uLm5hbWU7XG4gICAgICB2YXIgaWR4ID0gb3V0LmluZGV4T2YoJ1xcbicgKyBmbl9uYW1lKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAvLyBvbmNlIHdlIGhhdmUgbG9jYXRlZCB0aGUgZnVuY3Rpb24gZnJhbWVcbiAgICAgICAgLy8gd2UgbmVlZCB0byBzdHJpcCBvdXQgZXZlcnl0aGluZyBiZWZvcmUgaXQgKGFuZCBpdHMgbGluZSlcbiAgICAgICAgdmFyIG5leHRfbGluZSA9IG91dC5pbmRleE9mKCdcXG4nLCBpZHggKyAxKTtcbiAgICAgICAgb3V0ID0gb3V0LnN1YnN0cmluZyhuZXh0X2xpbmUgKyAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFjayA9IG91dDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGFzc2VydC5Bc3NlcnRpb25FcnJvciBpbnN0YW5jZW9mIEVycm9yXG51dGlsLmluaGVyaXRzKGFzc2VydC5Bc3NlcnRpb25FcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gIGlmICh1dGlsLmlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiAnJyArIHZhbHVlO1xuICB9XG4gIGlmICh1dGlsLmlzTnVtYmVyKHZhbHVlKSAmJiAhaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHV0aWwuaXNGdW5jdGlvbih2YWx1ZSkgfHwgdXRpbC5pc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHRydW5jYXRlKHMsIG4pIHtcbiAgaWYgKHV0aWwuaXNTdHJpbmcocykpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPCBuID8gcyA6IHMuc2xpY2UoMCwgbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZShzZWxmKSB7XG4gIHJldHVybiB0cnVuY2F0ZShKU09OLnN0cmluZ2lmeShzZWxmLmFjdHVhbCwgcmVwbGFjZXIpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoc2VsZi5leHBlY3RlZCwgcmVwbGFjZXIpLCAxMjgpO1xufVxuXG4vLyBBdCBwcmVzZW50IG9ubHkgdGhlIHRocmVlIGtleXMgbWVudGlvbmVkIGFib3ZlIGFyZSB1c2VkIGFuZFxuLy8gdW5kZXJzdG9vZCBieSB0aGUgc3BlYy4gSW1wbGVtZW50YXRpb25zIG9yIHN1YiBtb2R1bGVzIGNhbiBwYXNzXG4vLyBvdGhlciBrZXlzIHRvIHRoZSBBc3NlcnRpb25FcnJvcidzIGNvbnN0cnVjdG9yIC0gdGhleSB3aWxsIGJlXG4vLyBpZ25vcmVkLlxuXG4vLyAzLiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbXVzdCB0aHJvdyBhbiBBc3NlcnRpb25FcnJvclxuLy8gd2hlbiBhIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQsIHdpdGggYSBtZXNzYWdlIHRoYXRcbi8vIG1heSBiZSB1bmRlZmluZWQgaWYgbm90IHByb3ZpZGVkLiAgQWxsIGFzc2VydGlvbiBtZXRob2RzIHByb3ZpZGVcbi8vIGJvdGggdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgdmFsdWVzIHRvIHRoZSBhc3NlcnRpb24gZXJyb3IgZm9yXG4vLyBkaXNwbGF5IHB1cnBvc2VzLlxuXG5mdW5jdGlvbiBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yLCBzdGFja1N0YXJ0RnVuY3Rpb24pIHtcbiAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBhY3R1YWw6IGFjdHVhbCxcbiAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHN0YWNrU3RhcnRGdW5jdGlvbjogc3RhY2tTdGFydEZ1bmN0aW9uXG4gIH0pO1xufVxuXG4vLyBFWFRFTlNJT04hIGFsbG93cyBmb3Igd2VsbCBiZWhhdmVkIGVycm9ycyBkZWZpbmVkIGVsc2V3aGVyZS5cbmFzc2VydC5mYWlsID0gZmFpbDtcblxuLy8gNC4gUHVyZSBhc3NlcnRpb24gdGVzdHMgd2hldGhlciBhIHZhbHVlIGlzIHRydXRoeSwgYXMgZGV0ZXJtaW5lZFxuLy8gYnkgISFndWFyZC5cbi8vIGFzc2VydC5vayhndWFyZCwgbWVzc2FnZV9vcHQpO1xuLy8gVGhpcyBzdGF0ZW1lbnQgaXMgZXF1aXZhbGVudCB0byBhc3NlcnQuZXF1YWwodHJ1ZSwgISFndWFyZCxcbi8vIG1lc3NhZ2Vfb3B0KTsuIFRvIHRlc3Qgc3RyaWN0bHkgZm9yIHRoZSB2YWx1ZSB0cnVlLCB1c2Vcbi8vIGFzc2VydC5zdHJpY3RFcXVhbCh0cnVlLCBndWFyZCwgbWVzc2FnZV9vcHQpOy5cblxuZnVuY3Rpb24gb2sodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09JywgYXNzZXJ0Lm9rKTtcbn1cbmFzc2VydC5vayA9IG9rO1xuXG4vLyA1LiBUaGUgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHNoYWxsb3csIGNvZXJjaXZlIGVxdWFsaXR5IHdpdGhcbi8vID09LlxuLy8gYXNzZXJ0LmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5lcXVhbCk7XG59O1xuXG4vLyA2LiBUaGUgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igd2hldGhlciB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsXG4vLyB3aXRoICE9IGFzc2VydC5ub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIG5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9JywgYXNzZXJ0Lm5vdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gNy4gVGhlIGVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBhIGRlZXAgZXF1YWxpdHkgcmVsYXRpb24uXG4vLyBhc3NlcnQuZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBFcXVhbCcsIGFzc2VydC5kZWVwRXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGFjdHVhbCkgJiYgdXRpbC5pc0J1ZmZlcihleHBlY3RlZCkpIHtcbiAgICBpZiAoYWN0dWFsLmxlbmd0aCAhPSBleHBlY3RlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYWN0dWFsW2ldICE9PSBleHBlY3RlZFtpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIC8vIDcuMi4gSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgRGF0ZSBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgRGF0ZSBvYmplY3QgdGhhdCByZWZlcnMgdG8gdGhlIHNhbWUgdGltZS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzRGF0ZShhY3R1YWwpICYmIHV0aWwuaXNEYXRlKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zIElmIHRoZSBleHBlY3RlZCB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgUmVnRXhwIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNvdXJjZSBhbmRcbiAgLy8gcHJvcGVydGllcyAoYGdsb2JhbGAsIGBtdWx0aWxpbmVgLCBgbGFzdEluZGV4YCwgYGlnbm9yZUNhc2VgKS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzUmVnRXhwKGFjdHVhbCkgJiYgdXRpbC5pc1JlZ0V4cChleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gYWN0dWFsLnNvdXJjZSA9PT0gZXhwZWN0ZWQuc291cmNlICYmXG4gICAgICAgICAgIGFjdHVhbC5nbG9iYWwgPT09IGV4cGVjdGVkLmdsb2JhbCAmJlxuICAgICAgICAgICBhY3R1YWwubXVsdGlsaW5lID09PSBleHBlY3RlZC5tdWx0aWxpbmUgJiZcbiAgICAgICAgICAgYWN0dWFsLmxhc3RJbmRleCA9PT0gZXhwZWN0ZWQubGFzdEluZGV4ICYmXG4gICAgICAgICAgIGFjdHVhbC5pZ25vcmVDYXNlID09PSBleHBlY3RlZC5pZ25vcmVDYXNlO1xuXG4gIC8vIDcuNC4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgfSBlbHNlIGlmICghdXRpbC5pc09iamVjdChhY3R1YWwpICYmICF1dGlsLmlzT2JqZWN0KGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gNy41IEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYikge1xuICBpZiAodXRpbC5pc051bGxPclVuZGVmaW5lZChhKSB8fCB1dGlsLmlzTnVsbE9yVW5kZWZpbmVkKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIG9uZSBpcyBhIHByaW1pdGl2ZSwgdGhlIG90aGVyIG11c3QgYmUgc2FtZVxuICBpZiAodXRpbC5pc1ByaW1pdGl2ZShhKSB8fCB1dGlsLmlzUHJpbWl0aXZlKGIpKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH1cbiAgdmFyIGFJc0FyZ3MgPSBpc0FyZ3VtZW50cyhhKSxcbiAgICAgIGJJc0FyZ3MgPSBpc0FyZ3VtZW50cyhiKTtcbiAgaWYgKChhSXNBcmdzICYmICFiSXNBcmdzKSB8fCAoIWFJc0FyZ3MgJiYgYklzQXJncykpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoYUlzQXJncykge1xuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIF9kZWVwRXF1YWwoYSwgYik7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKSxcbiAgICAgIGtiID0gb2JqZWN0S2V5cyhiKSxcbiAgICAgIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghX2RlZXBFcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnbm90RGVlcEVxdWFsJywgYXNzZXJ0Lm5vdERlZXBFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDkuIFRoZSBzdHJpY3QgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHN0cmljdCBlcXVhbGl0eSwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBzdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT09JywgYXNzZXJ0LnN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gMTAuIFRoZSBzdHJpY3Qgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igc3RyaWN0IGluZXF1YWxpdHksIGFzXG4vLyBkZXRlcm1pbmVkIGJ5ICE9PS4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIG5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPT0nLCBhc3NlcnQubm90U3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSB7XG4gIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXhwZWN0ZWQpID09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgcmV0dXJuIGV4cGVjdGVkLnRlc3QoYWN0dWFsKTtcbiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gX3Rocm93cyhzaG91bGRUaHJvdywgYmxvY2ssIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIHZhciBhY3R1YWw7XG5cbiAgaWYgKHV0aWwuaXNTdHJpbmcoZXhwZWN0ZWQpKSB7XG4gICAgbWVzc2FnZSA9IGV4cGVjdGVkO1xuICAgIGV4cGVjdGVkID0gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGFjdHVhbCA9IGU7XG4gIH1cblxuICBtZXNzYWdlID0gKGV4cGVjdGVkICYmIGV4cGVjdGVkLm5hbWUgPyAnICgnICsgZXhwZWN0ZWQubmFtZSArICcpLicgOiAnLicpICtcbiAgICAgICAgICAgIChtZXNzYWdlID8gJyAnICsgbWVzc2FnZSA6ICcuJyk7XG5cbiAgaWYgKHNob3VsZFRocm93ICYmICFhY3R1YWwpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIGlmICghc2hvdWxkVGhyb3cgJiYgZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdHb3QgdW53YW50ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKChzaG91bGRUaHJvdyAmJiBhY3R1YWwgJiYgZXhwZWN0ZWQgJiZcbiAgICAgICFleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHwgKCFzaG91bGRUaHJvdyAmJiBhY3R1YWwpKSB7XG4gICAgdGhyb3cgYWN0dWFsO1xuICB9XG59XG5cbi8vIDExLiBFeHBlY3RlZCB0byB0aHJvdyBhbiBlcnJvcjpcbi8vIGFzc2VydC50aHJvd3MoYmxvY2ssIEVycm9yX29wdCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQudGhyb3dzID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MuYXBwbHkodGhpcywgW3RydWVdLmNvbmNhdChwU2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG59O1xuXG4vLyBFWFRFTlNJT04hIFRoaXMgaXMgYW5ub3lpbmcgdG8gd3JpdGUgb3V0c2lkZSB0aGlzIG1vZHVsZS5cbmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovbWVzc2FnZSkge1xuICBfdGhyb3dzLmFwcGx5KHRoaXMsIFtmYWxzZV0uY29uY2F0KHBTbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbn07XG5cbmFzc2VydC5pZkVycm9yID0gZnVuY3Rpb24oZXJyKSB7IGlmIChlcnIpIHt0aHJvdyBlcnI7fX07XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59O1xuIiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWljbTkzYzJWeWFXWjVMMjV2WkdWZmJXOWtkV3hsY3k5d1lYUm9MV0p5YjNkelpYSnBabmt2YVc1a1pYZ3Vhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5OGdRMjl3ZVhKcFoyaDBJRXB2ZVdWdWRDd2dTVzVqTGlCaGJtUWdiM1JvWlhJZ1RtOWtaU0JqYjI1MGNtbGlkWFJ2Y25NdVhHNHZMMXh1THk4Z1VHVnliV2x6YzJsdmJpQnBjeUJvWlhKbFlua2daM0poYm5SbFpDd2dabkpsWlNCdlppQmphR0Z5WjJVc0lIUnZJR0Z1ZVNCd1pYSnpiMjRnYjJKMFlXbHVhVzVuSUdGY2JpOHZJR052Y0hrZ2IyWWdkR2hwY3lCemIyWjBkMkZ5WlNCaGJtUWdZWE56YjJOcFlYUmxaQ0JrYjJOMWJXVnVkR0YwYVc5dUlHWnBiR1Z6SUNoMGFHVmNiaTh2SUZ3aVUyOW1kSGRoY21WY0lpa3NJSFJ2SUdSbFlXd2dhVzRnZEdobElGTnZablIzWVhKbElIZHBkR2h2ZFhRZ2NtVnpkSEpwWTNScGIyNHNJR2x1WTJ4MVpHbHVaMXh1THk4Z2QybDBhRzkxZENCc2FXMXBkR0YwYVc5dUlIUm9aU0J5YVdkb2RITWdkRzhnZFhObExDQmpiM0I1TENCdGIyUnBabmtzSUcxbGNtZGxMQ0J3ZFdKc2FYTm9MRnh1THk4Z1pHbHpkSEpwWW5WMFpTd2djM1ZpYkdsalpXNXpaU3dnWVc1a0wyOXlJSE5sYkd3Z1kyOXdhV1Z6SUc5bUlIUm9aU0JUYjJaMGQyRnlaU3dnWVc1a0lIUnZJSEJsY20xcGRGeHVMeThnY0dWeWMyOXVjeUIwYnlCM2FHOXRJSFJvWlNCVGIyWjBkMkZ5WlNCcGN5Qm1kWEp1YVhOb1pXUWdkRzhnWkc4Z2MyOHNJSE4xWW1wbFkzUWdkRzhnZEdobFhHNHZMeUJtYjJ4c2IzZHBibWNnWTI5dVpHbDBhVzl1Y3pwY2JpOHZYRzR2THlCVWFHVWdZV0p2ZG1VZ1kyOXdlWEpwWjJoMElHNXZkR2xqWlNCaGJtUWdkR2hwY3lCd1pYSnRhWE56YVc5dUlHNXZkR2xqWlNCemFHRnNiQ0JpWlNCcGJtTnNkV1JsWkZ4dUx5OGdhVzRnWVd4c0lHTnZjR2xsY3lCdmNpQnpkV0p6ZEdGdWRHbGhiQ0J3YjNKMGFXOXVjeUJ2WmlCMGFHVWdVMjltZEhkaGNtVXVYRzR2TDF4dUx5OGdWRWhGSUZOUFJsUlhRVkpGSUVsVElGQlNUMVpKUkVWRUlGd2lRVk1nU1ZOY0lpd2dWMGxVU0U5VlZDQlhRVkpTUVU1VVdTQlBSaUJCVGxrZ1MwbE9SQ3dnUlZoUVVrVlRVMXh1THk4Z1QxSWdTVTFRVEVsRlJDd2dTVTVEVEZWRVNVNUhJRUpWVkNCT1QxUWdURWxOU1ZSRlJDQlVUeUJVU0VVZ1YwRlNVa0ZPVkVsRlV5QlBSbHh1THk4Z1RVVlNRMGhCVGxSQlFrbE1TVlJaTENCR1NWUk9SVk5USUVaUFVpQkJJRkJCVWxSSlExVk1RVklnVUZWU1VFOVRSU0JCVGtRZ1RrOU9TVTVHVWtsT1IwVk5SVTVVTGlCSlRseHVMeThnVGs4Z1JWWkZUbFFnVTBoQlRFd2dWRWhGSUVGVlZFaFBVbE1nVDFJZ1EwOVFXVkpKUjBoVUlFaFBURVJGVWxNZ1FrVWdURWxCUWt4RklFWlBVaUJCVGxrZ1EweEJTVTBzWEc0dkx5QkVRVTFCUjBWVElFOVNJRTlVU0VWU0lFeEpRVUpKVEVsVVdTd2dWMGhGVkVoRlVpQkpUaUJCVGlCQlExUkpUMDRnVDBZZ1EwOU9WRkpCUTFRc0lGUlBVbFFnVDFKY2JpOHZJRTlVU0VWU1YwbFRSU3dnUVZKSlUwbE9SeUJHVWs5TkxDQlBWVlFnVDBZZ1QxSWdTVTRnUTA5T1RrVkRWRWxQVGlCWFNWUklJRlJJUlNCVFQwWlVWMEZTUlNCUFVpQlVTRVZjYmk4dklGVlRSU0JQVWlCUFZFaEZVaUJFUlVGTVNVNUhVeUJKVGlCVVNFVWdVMDlHVkZkQlVrVXVYRzVjYmk4dklISmxjMjlzZG1WeklDNGdZVzVrSUM0dUlHVnNaVzFsYm5SeklHbHVJR0VnY0dGMGFDQmhjbkpoZVNCM2FYUm9JR1JwY21WamRHOXllU0J1WVcxbGN5QjBhR1Z5WlZ4dUx5OGdiWFZ6ZENCaVpTQnVieUJ6YkdGemFHVnpMQ0JsYlhCMGVTQmxiR1Z0Wlc1MGN5d2diM0lnWkdWMmFXTmxJRzVoYldWeklDaGpPbHhjS1NCcGJpQjBhR1VnWVhKeVlYbGNiaTh2SUNoemJ5QmhiSE52SUc1dklHeGxZV1JwYm1jZ1lXNWtJSFJ5WVdsc2FXNW5JSE5zWVhOb1pYTWdMU0JwZENCa2IyVnpJRzV2ZENCa2FYTjBhVzVuZFdsemFGeHVMeThnY21Wc1lYUnBkbVVnWVc1a0lHRmljMjlzZFhSbElIQmhkR2h6S1Z4dVpuVnVZM1JwYjI0Z2JtOXliV0ZzYVhwbFFYSnlZWGtvY0dGeWRITXNJR0ZzYkc5M1FXSnZkbVZTYjI5MEtTQjdYRzRnSUM4dklHbG1JSFJvWlNCd1lYUm9JSFJ5YVdWeklIUnZJR2R2SUdGaWIzWmxJSFJvWlNCeWIyOTBMQ0JnZFhCZ0lHVnVaSE1nZFhBZ1BpQXdYRzRnSUhaaGNpQjFjQ0E5SURBN1hHNGdJR1p2Y2lBb2RtRnlJR2tnUFNCd1lYSjBjeTVzWlc1bmRHZ2dMU0F4T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lIWmhjaUJzWVhOMElEMGdjR0Z5ZEhOYmFWMDdYRzRnSUNBZ2FXWWdLR3hoYzNRZ1BUMDlJQ2N1SnlrZ2UxeHVJQ0FnSUNBZ2NHRnlkSE11YzNCc2FXTmxLR2tzSURFcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2JHRnpkQ0E5UFQwZ0p5NHVKeWtnZTF4dUlDQWdJQ0FnY0dGeWRITXVjM0JzYVdObEtHa3NJREVwTzF4dUlDQWdJQ0FnZFhBckt6dGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIVndLU0I3WEc0Z0lDQWdJQ0J3WVhKMGN5NXpjR3hwWTJVb2FTd2dNU2s3WEc0Z0lDQWdJQ0IxY0MwdE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJR2xtSUhSb1pTQndZWFJvSUdseklHRnNiRzkzWldRZ2RHOGdaMjhnWVdKdmRtVWdkR2hsSUhKdmIzUXNJSEpsYzNSdmNtVWdiR1ZoWkdsdVp5QXVMbk5jYmlBZ2FXWWdLR0ZzYkc5M1FXSnZkbVZTYjI5MEtTQjdYRzRnSUNBZ1ptOXlJQ2c3SUhWd0xTMDdJSFZ3S1NCN1hHNGdJQ0FnSUNCd1lYSjBjeTUxYm5Ob2FXWjBLQ2N1TGljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCd1lYSjBjenRjYm4xY2JseHVMeThnVTNCc2FYUWdZU0JtYVd4bGJtRnRaU0JwYm5SdklGdHliMjkwTENCa2FYSXNJR0poYzJWdVlXMWxMQ0JsZUhSZExDQjFibWw0SUhabGNuTnBiMjVjYmk4dklDZHliMjkwSnlCcGN5QnFkWE4wSUdFZ2MyeGhjMmdzSUc5eUlHNXZkR2hwYm1jdVhHNTJZWElnYzNCc2FYUlFZWFJvVW1VZ1BWeHVJQ0FnSUM5ZUtGeGNMejk4S1NoYlhGeHpYRnhUWFNvL0tTZ29QenBjWEM1N01Td3lmWHhiWGx4Y0wxMHJQM3dwS0Z4Y0xsdGVMbHhjTDEwcWZDa3BLRDg2VzF4Y0wxMHFLU1F2TzF4dWRtRnlJSE53YkdsMFVHRjBhQ0E5SUdaMWJtTjBhVzl1S0dacGJHVnVZVzFsS1NCN1hHNGdJSEpsZEhWeWJpQnpjR3hwZEZCaGRHaFNaUzVsZUdWaktHWnBiR1Z1WVcxbEtTNXpiR2xqWlNneEtUdGNibjA3WEc1Y2JpOHZJSEJoZEdndWNtVnpiMngyWlNoYlpuSnZiU0F1TGk1ZExDQjBieWxjYmk4dklIQnZjMmw0SUhabGNuTnBiMjVjYm1WNGNHOXlkSE11Y21WemIyeDJaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2NtVnpiMngyWldSUVlYUm9JRDBnSnljc1hHNGdJQ0FnSUNCeVpYTnZiSFpsWkVGaWMyOXNkWFJsSUQwZ1ptRnNjMlU3WEc1Y2JpQWdabTl5SUNoMllYSWdhU0E5SUdGeVozVnRaVzUwY3k1c1pXNW5kR2dnTFNBeE95QnBJRDQ5SUMweElDWW1JQ0Z5WlhOdmJIWmxaRUZpYzI5c2RYUmxPeUJwTFMwcElIdGNiaUFnSUNCMllYSWdjR0YwYUNBOUlDaHBJRDQ5SURBcElEOGdZWEpuZFcxbGJuUnpXMmxkSURvZ2NISnZZMlZ6Y3k1amQyUW9LVHRjYmx4dUlDQWdJQzh2SUZOcmFYQWdaVzF3ZEhrZ1lXNWtJR2x1ZG1Gc2FXUWdaVzUwY21sbGMxeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2NHRjBhQ0FoUFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9KMEZ5WjNWdFpXNTBjeUIwYnlCd1lYUm9MbkpsYzI5c2RtVWdiWFZ6ZENCaVpTQnpkSEpwYm1kekp5azdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDZ2hjR0YwYUNrZ2UxeHVJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WemIyeDJaV1JRWVhSb0lEMGdjR0YwYUNBcklDY3ZKeUFySUhKbGMyOXNkbVZrVUdGMGFEdGNiaUFnSUNCeVpYTnZiSFpsWkVGaWMyOXNkWFJsSUQwZ2NHRjBhQzVqYUdGeVFYUW9NQ2tnUFQwOUlDY3ZKenRjYmlBZ2ZWeHVYRzRnSUM4dklFRjBJSFJvYVhNZ2NHOXBiblFnZEdobElIQmhkR2dnYzJodmRXeGtJR0psSUhKbGMyOXNkbVZrSUhSdklHRWdablZzYkNCaFluTnZiSFYwWlNCd1lYUm9MQ0JpZFhSY2JpQWdMeThnYUdGdVpHeGxJSEpsYkdGMGFYWmxJSEJoZEdoeklIUnZJR0psSUhOaFptVWdLRzFwWjJoMElHaGhjSEJsYmlCM2FHVnVJSEJ5YjJObGMzTXVZM2RrS0NrZ1ptRnBiSE1wWEc1Y2JpQWdMeThnVG05eWJXRnNhWHBsSUhSb1pTQndZWFJvWEc0Z0lISmxjMjlzZG1Wa1VHRjBhQ0E5SUc1dmNtMWhiR2w2WlVGeWNtRjVLR1pwYkhSbGNpaHlaWE52YkhabFpGQmhkR2d1YzNCc2FYUW9KeThuS1N3Z1puVnVZM1JwYjI0b2NDa2dlMXh1SUNBZ0lISmxkSFZ5YmlBaElYQTdYRzRnSUgwcExDQWhjbVZ6YjJ4MlpXUkJZbk52YkhWMFpTa3VhbTlwYmlnbkx5Y3BPMXh1WEc0Z0lISmxkSFZ5YmlBb0tISmxjMjlzZG1Wa1FXSnpiMngxZEdVZ1B5QW5MeWNnT2lBbkp5a2dLeUJ5WlhOdmJIWmxaRkJoZEdncElIeDhJQ2N1Snp0Y2JuMDdYRzVjYmk4dklIQmhkR2d1Ym05eWJXRnNhWHBsS0hCaGRHZ3BYRzR2THlCd2IzTnBlQ0IyWlhKemFXOXVYRzVsZUhCdmNuUnpMbTV2Y20xaGJHbDZaU0E5SUdaMWJtTjBhVzl1S0hCaGRHZ3BJSHRjYmlBZ2RtRnlJR2x6UVdKemIyeDFkR1VnUFNCbGVIQnZjblJ6TG1selFXSnpiMngxZEdVb2NHRjBhQ2tzWEc0Z0lDQWdJQ0IwY21GcGJHbHVaMU5zWVhOb0lEMGdjM1ZpYzNSeUtIQmhkR2dzSUMweEtTQTlQVDBnSnk4bk8xeHVYRzRnSUM4dklFNXZjbTFoYkdsNlpTQjBhR1VnY0dGMGFGeHVJQ0J3WVhSb0lEMGdibTl5YldGc2FYcGxRWEp5WVhrb1ptbHNkR1Z5S0hCaGRHZ3VjM0JzYVhRb0p5OG5LU3dnWm5WdVkzUnBiMjRvY0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUFoSVhBN1hHNGdJSDBwTENBaGFYTkJZbk52YkhWMFpTa3VhbTlwYmlnbkx5Y3BPMXh1WEc0Z0lHbG1JQ2doY0dGMGFDQW1KaUFoYVhOQlluTnZiSFYwWlNrZ2UxeHVJQ0FnSUhCaGRHZ2dQU0FuTGljN1hHNGdJSDFjYmlBZ2FXWWdLSEJoZEdnZ0ppWWdkSEpoYVd4cGJtZFRiR0Z6YUNrZ2UxeHVJQ0FnSUhCaGRHZ2dLejBnSnk4bk8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlDaHBjMEZpYzI5c2RYUmxJRDhnSnk4bklEb2dKeWNwSUNzZ2NHRjBhRHRjYm4wN1hHNWNiaTh2SUhCdmMybDRJSFpsY25OcGIyNWNibVY0Y0c5eWRITXVhWE5CWW5OdmJIVjBaU0E5SUdaMWJtTjBhVzl1S0hCaGRHZ3BJSHRjYmlBZ2NtVjBkWEp1SUhCaGRHZ3VZMmhoY2tGMEtEQXBJRDA5UFNBbkx5YzdYRzU5TzF4dVhHNHZMeUJ3YjNOcGVDQjJaWEp6YVc5dVhHNWxlSEJ2Y25SekxtcHZhVzRnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIQmhkR2h6SUQwZ1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SekxDQXdLVHRjYmlBZ2NtVjBkWEp1SUdWNGNHOXlkSE11Ym05eWJXRnNhWHBsS0dacGJIUmxjaWh3WVhSb2N5d2dablZ1WTNScGIyNG9jQ3dnYVc1a1pYZ3BJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JSEFnSVQwOUlDZHpkSEpwYm1jbktTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RCY21kMWJXVnVkSE1nZEc4Z2NHRjBhQzVxYjJsdUlHMTFjM1FnWW1VZ2MzUnlhVzVuY3ljcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjRHRjYmlBZ2ZTa3VhbTlwYmlnbkx5Y3BLVHRjYm4wN1hHNWNibHh1THk4Z2NHRjBhQzV5Wld4aGRHbDJaU2htY205dExDQjBieWxjYmk4dklIQnZjMmw0SUhabGNuTnBiMjVjYm1WNGNHOXlkSE11Y21Wc1lYUnBkbVVnUFNCbWRXNWpkR2x2YmlobWNtOXRMQ0IwYnlrZ2UxeHVJQ0JtY205dElEMGdaWGh3YjNKMGN5NXlaWE52YkhabEtHWnliMjBwTG5OMVluTjBjaWd4S1R0Y2JpQWdkRzhnUFNCbGVIQnZjblJ6TG5KbGMyOXNkbVVvZEc4cExuTjFZbk4wY2lneEtUdGNibHh1SUNCbWRXNWpkR2x2YmlCMGNtbHRLR0Z5Y2lrZ2UxeHVJQ0FnSUhaaGNpQnpkR0Z5ZENBOUlEQTdYRzRnSUNBZ1ptOXlJQ2c3SUhOMFlYSjBJRHdnWVhKeUxteGxibWQwYURzZ2MzUmhjblFyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLR0Z5Y2x0emRHRnlkRjBnSVQwOUlDY25LU0JpY21WaGF6dGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdaVzVrSUQwZ1lYSnlMbXhsYm1kMGFDQXRJREU3WEc0Z0lDQWdabTl5SUNnN0lHVnVaQ0ErUFNBd095QmxibVF0TFNrZ2UxeHVJQ0FnSUNBZ2FXWWdLR0Z5Y2x0bGJtUmRJQ0U5UFNBbkp5a2dZbkpsWVdzN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tITjBZWEowSUQ0Z1pXNWtLU0J5WlhSMWNtNGdXMTA3WEc0Z0lDQWdjbVYwZFhKdUlHRnljaTV6YkdsalpTaHpkR0Z5ZEN3Z1pXNWtJQzBnYzNSaGNuUWdLeUF4S1R0Y2JpQWdmVnh1WEc0Z0lIWmhjaUJtY205dFVHRnlkSE1nUFNCMGNtbHRLR1p5YjIwdWMzQnNhWFFvSnk4bktTazdYRzRnSUhaaGNpQjBiMUJoY25SeklEMGdkSEpwYlNoMGJ5NXpjR3hwZENnbkx5Y3BLVHRjYmx4dUlDQjJZWElnYkdWdVozUm9JRDBnVFdGMGFDNXRhVzRvWm5KdmJWQmhjblJ6TG14bGJtZDBhQ3dnZEc5UVlYSjBjeTVzWlc1bmRHZ3BPMXh1SUNCMllYSWdjMkZ0WlZCaGNuUnpUR1Z1WjNSb0lEMGdiR1Z1WjNSb08xeHVJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUd4bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ2FXWWdLR1p5YjIxUVlYSjBjMXRwWFNBaFBUMGdkRzlRWVhKMGMxdHBYU2tnZTF4dUlDQWdJQ0FnYzJGdFpWQmhjblJ6VEdWdVozUm9JRDBnYVR0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSFpoY2lCdmRYUndkWFJRWVhKMGN5QTlJRnRkTzF4dUlDQm1iM0lnS0haaGNpQnBJRDBnYzJGdFpWQmhjblJ6VEdWdVozUm9PeUJwSUR3Z1puSnZiVkJoY25SekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdiM1YwY0hWMFVHRnlkSE11Y0hWemFDZ25MaTRuS1R0Y2JpQWdmVnh1WEc0Z0lHOTFkSEIxZEZCaGNuUnpJRDBnYjNWMGNIVjBVR0Z5ZEhNdVkyOXVZMkYwS0hSdlVHRnlkSE11YzJ4cFkyVW9jMkZ0WlZCaGNuUnpUR1Z1WjNSb0tTazdYRzVjYmlBZ2NtVjBkWEp1SUc5MWRIQjFkRkJoY25SekxtcHZhVzRvSnk4bktUdGNibjA3WEc1Y2JtVjRjRzl5ZEhNdWMyVndJRDBnSnk4bk8xeHVaWGh3YjNKMGN5NWtaV3hwYldsMFpYSWdQU0FuT2ljN1hHNWNibVY0Y0c5eWRITXVaR2x5Ym1GdFpTQTlJR1oxYm1OMGFXOXVLSEJoZEdncElIdGNiaUFnZG1GeUlISmxjM1ZzZENBOUlITndiR2wwVUdGMGFDaHdZWFJvS1N4Y2JpQWdJQ0FnSUhKdmIzUWdQU0J5WlhOMWJIUmJNRjBzWEc0Z0lDQWdJQ0JrYVhJZ1BTQnlaWE4xYkhSYk1WMDdYRzVjYmlBZ2FXWWdLQ0Z5YjI5MElDWW1JQ0ZrYVhJcElIdGNiaUFnSUNBdkx5Qk9ieUJrYVhKdVlXMWxJSGRvWVhSemIyVjJaWEpjYmlBZ0lDQnlaWFIxY200Z0p5NG5PMXh1SUNCOVhHNWNiaUFnYVdZZ0tHUnBjaWtnZTF4dUlDQWdJQzh2SUVsMElHaGhjeUJoSUdScGNtNWhiV1VzSUhOMGNtbHdJSFJ5WVdsc2FXNW5JSE5zWVhOb1hHNGdJQ0FnWkdseUlEMGdaR2x5TG5OMVluTjBjaWd3TENCa2FYSXViR1Z1WjNSb0lDMGdNU2s3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnY205dmRDQXJJR1JwY2p0Y2JuMDdYRzVjYmx4dVpYaHdiM0owY3k1aVlYTmxibUZ0WlNBOUlHWjFibU4wYVc5dUtIQmhkR2dzSUdWNGRDa2dlMXh1SUNCMllYSWdaaUE5SUhOd2JHbDBVR0YwYUNod1lYUm9LVnN5WFR0Y2JpQWdMeThnVkU5RVR6b2diV0ZyWlNCMGFHbHpJR052YlhCaGNtbHpiMjRnWTJGelpTMXBibk5sYm5OcGRHbDJaU0J2YmlCM2FXNWtiM2R6UDF4dUlDQnBaaUFvWlhoMElDWW1JR1l1YzNWaWMzUnlLQzB4SUNvZ1pYaDBMbXhsYm1kMGFDa2dQVDA5SUdWNGRDa2dlMXh1SUNBZ0lHWWdQU0JtTG5OMVluTjBjaWd3TENCbUxteGxibWQwYUNBdElHVjRkQzVzWlc1bmRHZ3BPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQm1PMXh1ZlR0Y2JseHVYRzVsZUhCdmNuUnpMbVY0ZEc1aGJXVWdQU0JtZFc1amRHbHZiaWh3WVhSb0tTQjdYRzRnSUhKbGRIVnliaUJ6Y0d4cGRGQmhkR2dvY0dGMGFDbGJNMTA3WEc1OU8xeHVYRzVtZFc1amRHbHZiaUJtYVd4MFpYSWdLSGh6TENCbUtTQjdYRzRnSUNBZ2FXWWdLSGh6TG1acGJIUmxjaWtnY21WMGRYSnVJSGh6TG1acGJIUmxjaWhtS1R0Y2JpQWdJQ0IyWVhJZ2NtVnpJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCNGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9aaWg0YzF0cFhTd2dhU3dnZUhNcEtTQnlaWE11Y0hWemFDaDRjMXRwWFNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnlaWE03WEc1OVhHNWNiaTh2SUZOMGNtbHVaeTV3Y205MGIzUjVjR1V1YzNWaWMzUnlJQzBnYm1WbllYUnBkbVVnYVc1a1pYZ2daRzl1SjNRZ2QyOXlheUJwYmlCSlJUaGNiblpoY2lCemRXSnpkSElnUFNBbllXSW5Mbk4xWW5OMGNpZ3RNU2tnUFQwOUlDZGlKMXh1SUNBZ0lEOGdablZ1WTNScGIyNGdLSE4wY2l3Z2MzUmhjblFzSUd4bGJpa2dleUJ5WlhSMWNtNGdjM1J5TG5OMVluTjBjaWh6ZEdGeWRDd2diR1Z1S1NCOVhHNGdJQ0FnT2lCbWRXNWpkR2x2YmlBb2MzUnlMQ0J6ZEdGeWRDd2diR1Z1S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h6ZEdGeWRDQThJREFwSUhOMFlYSjBJRDBnYzNSeUxteGxibWQwYUNBcklITjBZWEowTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYzNSeUxuTjFZbk4wY2loemRHRnlkQ3dnYkdWdUtUdGNiaUFnSUNCOVhHNDdYRzRpWFgwPSIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxuXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudFF1ZXVlO1xuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICAgICAgICBjdXJyZW50UXVldWVbaV0oKTtcbiAgICAgICAgfVxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG59XG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHF1ZXVlLnB1c2goZnVuKTtcbiAgICBpZiAoIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbi8vIFRPRE8oc2h0eWxtYW4pXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCl7XG4vKiEgaHR0cDovL210aHMuYmUvcHVueWNvZGUgdjEuMi40IGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHRtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cyAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW14gLX5dLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1xceDJFfFxcdTMwMDJ8XFx1RkYwRXxcXHVGRjYxL2csIC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuXHQvKiogRXJyb3IgbWVzc2FnZXMgKi9cblx0ZXJyb3JzID0ge1xuXHRcdCdvdmVyZmxvdyc6ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcycsXG5cdFx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0XHQnaW52YWxpZC1pbnB1dCc6ICdJbnZhbGlkIGlucHV0J1xuXHR9LFxuXG5cdC8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cblx0YmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluLFxuXHRmbG9vciA9IE1hdGguZmxvb3IsXG5cdHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUsXG5cblx0LyoqIFRlbXBvcmFyeSB2YXJpYWJsZSAqL1xuXHRrZXk7XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXJyb3IgdHlwZS5cblx0ICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuXHQgKi9cblx0ZnVuY3Rpb24gZXJyb3IodHlwZSkge1xuXHRcdHRocm93IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0YXJyYXlbbGVuZ3RoXSA9IGZuKGFycmF5W2xlbmd0aF0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXk7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHJldHVybiBtYXAoc3RyaW5nLnNwbGl0KHJlZ2V4U2VwYXJhdG9ycyksIGZuKS5qb2luKCcuJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdFx0dmFyIGsgPSAwO1xuXHRcdGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG5cdFx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRcdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0XHRkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG5cdFx0fVxuXHRcdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scyB0byBhIHN0cmluZyBvZiBVbmljb2RlXG5cdCAqIHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHRcdC8vIERvbid0IHVzZSBVQ1MtMlxuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgsXG5cdFx0ICAgIG91dCxcblx0XHQgICAgaSA9IDAsXG5cdFx0ICAgIG4gPSBpbml0aWFsTixcblx0XHQgICAgYmlhcyA9IGluaXRpYWxCaWFzLFxuXHRcdCAgICBiYXNpYyxcblx0XHQgICAgaixcblx0XHQgICAgaW5kZXgsXG5cdFx0ICAgIG9sZGksXG5cdFx0ICAgIHcsXG5cdFx0ICAgIGssXG5cdFx0ICAgIGRpZ2l0LFxuXHRcdCAgICB0LFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgYmFzZU1pbnVzVDtcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHRcdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdFx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0XHRiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdFx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdFx0YmFzaWMgPSAwO1xuXHRcdH1cblxuXHRcdGZvciAoaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBkZWNvZGluZyBsb29wOiBzdGFydCBqdXN0IGFmdGVyIHRoZSBsYXN0IGRlbGltaXRlciBpZiBhbnkgYmFzaWMgY29kZVxuXHRcdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0XHRmb3IgKGluZGV4ID0gYmFzaWMgPiAwID8gYmFzaWMgKyAxIDogMDsgaW5kZXggPCBpbnB1dExlbmd0aDsgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqLykge1xuXG5cdFx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxuXHRcdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0XHRmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cblx0XHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ2ludmFsaWQtaW5wdXQnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGkgKz0gZGlnaXQgKiB3O1xuXHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdGlmICh3ID4gZmxvb3IobWF4SW50IC8gYmFzZU1pbnVzVCkpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcblxuXHRcdFx0fVxuXG5cdFx0XHRvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdG4gKz0gZmxvb3IoaSAvIG91dCk7XG5cdFx0XHRpICU9IG91dDtcblxuXHRcdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dFxuXHRcdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVjczJlbmNvZGUob3V0cHV0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgdG8gYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcblx0XHR2YXIgbixcblx0XHQgICAgZGVsdGEsXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50LFxuXHRcdCAgICBiYXNpY0xlbmd0aCxcblx0XHQgICAgYmlhcyxcblx0XHQgICAgaixcblx0XHQgICAgbSxcblx0XHQgICAgcSxcblx0XHQgICAgayxcblx0XHQgICAgdCxcblx0XHQgICAgY3VycmVudFZhbHVlLFxuXHRcdCAgICBvdXRwdXQgPSBbXSxcblx0XHQgICAgLyoqIGBpbnB1dExlbmd0aGAgd2lsbCBob2xkIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gYGlucHV0YC4gKi9cblx0XHQgICAgaW5wdXRMZW5ndGgsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsXG5cdFx0ICAgIGJhc2VNaW51c1QsXG5cdFx0ICAgIHFNaW51c1Q7XG5cblx0XHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBVbmljb2RlXG5cdFx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHRcdC8vIENhY2hlIHRoZSBsZW5ndGhcblx0XHRpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlXG5cdFx0biA9IGluaXRpYWxOO1xuXHRcdGRlbHRhID0gMDtcblx0XHRiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzXG5cdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IDB4ODApIHtcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuXG5cdFx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdFx0Ly8gYGJhc2ljTGVuZ3RoYCBpcyB0aGUgbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuXG5cdFx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgLSBpZiBpdCBpcyBub3QgZW1wdHkgLSB3aXRoIGEgZGVsaW1pdGVyXG5cdFx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0XHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0XHQvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0XG5cdFx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdFx0Zm9yIChtID0gbWF4SW50LCBqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdFx0bSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvd1xuXHRcdFx0aGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuXHRcdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0XHRuID0gbTtcblxuXHRcdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJcblx0XHRcdFx0XHRmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHFNaW51c1QgPSBxIC0gdDtcblx0XHRcdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0XHRzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCwgMCkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0XHRkZWx0YSA9IDA7XG5cdFx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQrK2RlbHRhO1xuXHRcdFx0KytuO1xuXG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgdG8gVW5pY29kZS4gT25seSB0aGVcblx0ICogUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLiBpdCBkb2Vzbid0XG5cdCAqIG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvXG5cdCAqIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBQdW55Y29kZSBkb21haW4gbmFtZSB0byBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoZG9tYWluKSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihkb21haW4sIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIHRvIFB1bnljb2RlLiBPbmx5IHRoZVxuXHQgKiBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLCBpLmUuIGl0IGRvZXNuJ3Rcblx0ICogbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW4gQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSB0byBjb252ZXJ0LCBhcyBhIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShkb21haW4pIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGRvbWFpbiwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMi40Jyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cDovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHQndWNzMic6IHtcblx0XHRcdCdkZWNvZGUnOiB1Y3MyZGVjb2RlLFxuXHRcdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0XHR9LFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdFx0J3RvVW5pY29kZSc6IHRvVW5pY29kZVxuXHR9O1xuXG5cdC8qKiBFeHBvc2UgYHB1bnljb2RlYCAqL1xuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZSgncHVueWNvZGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwdW55Y29kZTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiAhZnJlZUV4cG9ydHMubm9kZVR5cGUpIHtcblx0XHRpZiAoZnJlZU1vZHVsZSkgeyAvLyBpbiBOb2RlLmpzIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAoa2V5IGluIHB1bnljb2RlKSB7XG5cdFx0XHRcdHB1bnljb2RlLmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBwdW55Y29kZVtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWljbTkzYzJWeWFXWjVMMjV2WkdWZmJXOWtkV3hsY3k5d2RXNTVZMjlrWlM5d2RXNTVZMjlrWlM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUlTQm9kSFJ3T2k4dmJYUm9jeTVpWlM5d2RXNTVZMjlrWlNCMk1TNHlMalFnWW5rZ1FHMWhkR2hwWVhNZ0tpOWNianNvWm5WdVkzUnBiMjRvY205dmRDa2dlMXh1WEc1Y2RDOHFLaUJFWlhSbFkzUWdabkpsWlNCMllYSnBZV0pzWlhNZ0tpOWNibHgwZG1GeUlHWnlaV1ZGZUhCdmNuUnpJRDBnZEhsd1pXOW1JR1Y0Y0c5eWRITWdQVDBnSjI5aWFtVmpkQ2NnSmlZZ1pYaHdiM0owY3p0Y2JseDBkbUZ5SUdaeVpXVk5iMlIxYkdVZ1BTQjBlWEJsYjJZZ2JXOWtkV3hsSUQwOUlDZHZZbXBsWTNRbklDWW1JRzF2WkhWc1pTQW1KbHh1WEhSY2RHMXZaSFZzWlM1bGVIQnZjblJ6SUQwOUlHWnlaV1ZGZUhCdmNuUnpJQ1ltSUcxdlpIVnNaVHRjYmx4MGRtRnlJR1p5WldWSGJHOWlZV3dnUFNCMGVYQmxiMllnWjJ4dlltRnNJRDA5SUNkdlltcGxZM1FuSUNZbUlHZHNiMkpoYkR0Y2JseDBhV1lnS0daeVpXVkhiRzlpWVd3dVoyeHZZbUZzSUQwOVBTQm1jbVZsUjJ4dlltRnNJSHg4SUdaeVpXVkhiRzlpWVd3dWQybHVaRzkzSUQwOVBTQm1jbVZsUjJ4dlltRnNLU0I3WEc1Y2RGeDBjbTl2ZENBOUlHWnlaV1ZIYkc5aVlXdzdYRzVjZEgxY2JseHVYSFF2S2lwY2JseDBJQ29nVkdobElHQndkVzU1WTI5a1pXQWdiMkpxWldOMExseHVYSFFnS2lCQWJtRnRaU0J3ZFc1NVkyOWtaVnh1WEhRZ0tpQkFkSGx3WlNCUFltcGxZM1JjYmx4MElDb3ZYRzVjZEhaaGNpQndkVzU1WTI5a1pTeGNibHh1WEhRdktpb2dTR2xuYUdWemRDQndiM05wZEdsMlpTQnphV2R1WldRZ016SXRZbWwwSUdac2IyRjBJSFpoYkhWbElDb3ZYRzVjZEcxaGVFbHVkQ0E5SURJeE5EYzBPRE0yTkRjc0lDOHZJR0ZyWVM0Z01IZzNSa1pHUmtaR1JpQnZjaUF5WGpNeExURmNibHh1WEhRdktpb2dRbTl2ZEhOMGNtbHVaeUJ3WVhKaGJXVjBaWEp6SUNvdlhHNWNkR0poYzJVZ1BTQXpOaXhjYmx4MGRFMXBiaUE5SURFc1hHNWNkSFJOWVhnZ1BTQXlOaXhjYmx4MGMydGxkeUE5SURNNExGeHVYSFJrWVcxd0lEMGdOekF3TEZ4dVhIUnBibWwwYVdGc1FtbGhjeUE5SURjeUxGeHVYSFJwYm1sMGFXRnNUaUE5SURFeU9Dd2dMeThnTUhnNE1GeHVYSFJrWld4cGJXbDBaWElnUFNBbkxTY3NJQzh2SUNkY1hIZ3lSQ2RjYmx4dVhIUXZLaW9nVW1WbmRXeGhjaUJsZUhCeVpYTnphVzl1Y3lBcUwxeHVYSFJ5WldkbGVGQjFibmxqYjJSbElEMGdMMTU0YmkwdEx5eGNibHgwY21WblpYaE9iMjVCVTBOSlNTQTlJQzliWGlBdGZsMHZMQ0F2THlCMWJuQnlhVzUwWVdKc1pTQkJVME5KU1NCamFHRnljeUFySUc1dmJpMUJVME5KU1NCamFHRnljMXh1WEhSeVpXZGxlRk5sY0dGeVlYUnZjbk1nUFNBdlhGeDRNa1Y4WEZ4MU16QXdNbnhjWEhWR1JqQkZmRnhjZFVaR05qRXZaeXdnTHk4Z1VrWkRJRE0wT1RBZ2MyVndZWEpoZEc5eWMxeHVYRzVjZEM4cUtpQkZjbkp2Y2lCdFpYTnpZV2RsY3lBcUwxeHVYSFJsY25KdmNuTWdQU0I3WEc1Y2RGeDBKMjkyWlhKbWJHOTNKem9nSjA5MlpYSm1iRzkzT2lCcGJuQjFkQ0J1WldWa2N5QjNhV1JsY2lCcGJuUmxaMlZ5Y3lCMGJ5QndjbTlqWlhOekp5eGNibHgwWEhRbmJtOTBMV0poYzJsakp6b2dKMGxzYkdWbllXd2dhVzV3ZFhRZ1BqMGdNSGc0TUNBb2JtOTBJR0VnWW1GemFXTWdZMjlrWlNCd2IybHVkQ2tuTEZ4dVhIUmNkQ2RwYm5aaGJHbGtMV2x1Y0hWMEp6b2dKMGx1ZG1Gc2FXUWdhVzV3ZFhRblhHNWNkSDBzWEc1Y2JseDBMeW9xSUVOdmJuWmxibWxsYm1ObElITm9iM0owWTNWMGN5QXFMMXh1WEhSaVlYTmxUV2x1ZFhOVVRXbHVJRDBnWW1GelpTQXRJSFJOYVc0c1hHNWNkR1pzYjI5eUlEMGdUV0YwYUM1bWJHOXZjaXhjYmx4MGMzUnlhVzVuUm5KdmJVTm9ZWEpEYjJSbElEMGdVM1J5YVc1bkxtWnliMjFEYUdGeVEyOWtaU3hjYmx4dVhIUXZLaW9nVkdWdGNHOXlZWEo1SUhaaGNtbGhZbXhsSUNvdlhHNWNkR3RsZVR0Y2JseHVYSFF2S2kwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdEtpOWNibHh1WEhRdktpcGNibHgwSUNvZ1FTQm5aVzVsY21saklHVnljbTl5SUhWMGFXeHBkSGtnWm5WdVkzUnBiMjR1WEc1Y2RDQXFJRUJ3Y21sMllYUmxYRzVjZENBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCMGVYQmxJRlJvWlNCbGNuSnZjaUIwZVhCbExseHVYSFFnS2lCQWNtVjBkWEp1Y3lCN1JYSnliM0o5SUZSb2NtOTNjeUJoSUdCU1lXNW5aVVZ5Y205eVlDQjNhWFJvSUhSb1pTQmhjSEJzYVdOaFlteGxJR1Z5Y205eUlHMWxjM05oWjJVdVhHNWNkQ0FxTDF4dVhIUm1kVzVqZEdsdmJpQmxjbkp2Y2loMGVYQmxLU0I3WEc1Y2RGeDBkR2h5YjNjZ1VtRnVaMlZGY25KdmNpaGxjbkp2Y25OYmRIbHdaVjBwTzF4dVhIUjlYRzVjYmx4MEx5b3FYRzVjZENBcUlFRWdaMlZ1WlhKcFl5QmdRWEp5WVhramJXRndZQ0IxZEdsc2FYUjVJR1oxYm1OMGFXOXVMbHh1WEhRZ0tpQkFjSEpwZG1GMFpWeHVYSFFnS2lCQWNHRnlZVzBnZTBGeWNtRjVmU0JoY25KaGVTQlVhR1VnWVhKeVlYa2dkRzhnYVhSbGNtRjBaU0J2ZG1WeUxseHVYSFFnS2lCQWNHRnlZVzBnZTBaMWJtTjBhVzl1ZlNCallXeHNZbUZqYXlCVWFHVWdablZ1WTNScGIyNGdkR2hoZENCblpYUnpJR05oYkd4bFpDQm1iM0lnWlhabGNua2dZWEp5WVhsY2JseDBJQ29nYVhSbGJTNWNibHgwSUNvZ1FISmxkSFZ5Ym5NZ2UwRnljbUY1ZlNCQklHNWxkeUJoY25KaGVTQnZaaUIyWVd4MVpYTWdjbVYwZFhKdVpXUWdZbmtnZEdobElHTmhiR3hpWVdOcklHWjFibU4wYVc5dUxseHVYSFFnS2k5Y2JseDBablZ1WTNScGIyNGdiV0Z3S0dGeWNtRjVMQ0JtYmlrZ2UxeHVYSFJjZEhaaGNpQnNaVzVuZEdnZ1BTQmhjbkpoZVM1c1pXNW5kR2c3WEc1Y2RGeDBkMmhwYkdVZ0tHeGxibWQwYUMwdEtTQjdYRzVjZEZ4MFhIUmhjbkpoZVZ0c1pXNW5kR2hkSUQwZ1ptNG9ZWEp5WVhsYmJHVnVaM1JvWFNrN1hHNWNkRngwZlZ4dVhIUmNkSEpsZEhWeWJpQmhjbkpoZVR0Y2JseDBmVnh1WEc1Y2RDOHFLbHh1WEhRZ0tpQkJJSE5wYlhCc1pTQmdRWEp5WVhramJXRndZQzFzYVd0bElIZHlZWEJ3WlhJZ2RHOGdkMjl5YXlCM2FYUm9JR1J2YldGcGJpQnVZVzFsSUhOMGNtbHVaM011WEc1Y2RDQXFJRUJ3Y21sMllYUmxYRzVjZENBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCa2IyMWhhVzRnVkdobElHUnZiV0ZwYmlCdVlXMWxMbHh1WEhRZ0tpQkFjR0Z5WVcwZ2UwWjFibU4wYVc5dWZTQmpZV3hzWW1GamF5QlVhR1VnWm5WdVkzUnBiMjRnZEdoaGRDQm5aWFJ6SUdOaGJHeGxaQ0JtYjNJZ1pYWmxjbmxjYmx4MElDb2dZMmhoY21GamRHVnlMbHh1WEhRZ0tpQkFjbVYwZFhKdWN5QjdRWEp5WVhsOUlFRWdibVYzSUhOMGNtbHVaeUJ2WmlCamFHRnlZV04wWlhKeklISmxkSFZ5Ym1Wa0lHSjVJSFJvWlNCallXeHNZbUZqYTF4dVhIUWdLaUJtZFc1amRHbHZiaTVjYmx4MElDb3ZYRzVjZEdaMWJtTjBhVzl1SUcxaGNFUnZiV0ZwYmloemRISnBibWNzSUdadUtTQjdYRzVjZEZ4MGNtVjBkWEp1SUcxaGNDaHpkSEpwYm1jdWMzQnNhWFFvY21WblpYaFRaWEJoY21GMGIzSnpLU3dnWm00cExtcHZhVzRvSnk0bktUdGNibHgwZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJEY21WaGRHVnpJR0Z1SUdGeWNtRjVJR052Ym5SaGFXNXBibWNnZEdobElHNTFiV1Z5YVdNZ1kyOWtaU0J3YjJsdWRITWdiMllnWldGamFDQlZibWxqYjJSbFhHNWNkQ0FxSUdOb1lYSmhZM1JsY2lCcGJpQjBhR1VnYzNSeWFXNW5MaUJYYUdsc1pTQktZWFpoVTJOeWFYQjBJSFZ6WlhNZ1ZVTlRMVElnYVc1MFpYSnVZV3hzZVN4Y2JseDBJQ29nZEdocGN5Qm1kVzVqZEdsdmJpQjNhV3hzSUdOdmJuWmxjblFnWVNCd1lXbHlJRzltSUhOMWNuSnZaMkYwWlNCb1lXeDJaWE1nS0dWaFkyZ2diMllnZDJocFkyaGNibHgwSUNvZ1ZVTlRMVElnWlhod2IzTmxjeUJoY3lCelpYQmhjbUYwWlNCamFHRnlZV04wWlhKektTQnBiblJ2SUdFZ2MybHVaMnhsSUdOdlpHVWdjRzlwYm5Rc1hHNWNkQ0FxSUcxaGRHTm9hVzVuSUZWVVJpMHhOaTVjYmx4MElDb2dRSE5sWlNCZ2NIVnVlV052WkdVdWRXTnpNaTVsYm1OdlpHVmdYRzVjZENBcUlFQnpaV1VnUEdoMGRIQTZMeTl0WVhSb2FXRnpZbmx1Wlc1ekxtSmxMMjV2ZEdWekwycGhkbUZ6WTNKcGNIUXRaVzVqYjJScGJtYytYRzVjZENBcUlFQnRaVzFpWlhKUFppQndkVzU1WTI5a1pTNTFZM015WEc1Y2RDQXFJRUJ1WVcxbElHUmxZMjlrWlZ4dVhIUWdLaUJBY0dGeVlXMGdlMU4wY21sdVozMGdjM1J5YVc1bklGUm9aU0JWYm1samIyUmxJR2x1Y0hWMElITjBjbWx1WnlBb1ZVTlRMVElwTGx4dVhIUWdLaUJBY21WMGRYSnVjeUI3UVhKeVlYbDlJRlJvWlNCdVpYY2dZWEp5WVhrZ2IyWWdZMjlrWlNCd2IybHVkSE11WEc1Y2RDQXFMMXh1WEhSbWRXNWpkR2x2YmlCMVkzTXlaR1ZqYjJSbEtITjBjbWx1WnlrZ2UxeHVYSFJjZEhaaGNpQnZkWFJ3ZFhRZ1BTQmJYU3hjYmx4MFhIUWdJQ0FnWTI5MWJuUmxjaUE5SURBc1hHNWNkRngwSUNBZ0lHeGxibWQwYUNBOUlITjBjbWx1Wnk1c1pXNW5kR2dzWEc1Y2RGeDBJQ0FnSUhaaGJIVmxMRnh1WEhSY2RDQWdJQ0JsZUhSeVlUdGNibHgwWEhSM2FHbHNaU0FvWTI5MWJuUmxjaUE4SUd4bGJtZDBhQ2tnZTF4dVhIUmNkRngwZG1Gc2RXVWdQU0J6ZEhKcGJtY3VZMmhoY2tOdlpHVkJkQ2hqYjNWdWRHVnlLeXNwTzF4dVhIUmNkRngwYVdZZ0tIWmhiSFZsSUQ0OUlEQjRSRGd3TUNBbUppQjJZV3gxWlNBOFBTQXdlRVJDUmtZZ0ppWWdZMjkxYm5SbGNpQThJR3hsYm1kMGFDa2dlMXh1WEhSY2RGeDBYSFF2THlCb2FXZG9JSE4xY25KdloyRjBaU3dnWVc1a0lIUm9aWEpsSUdseklHRWdibVY0ZENCamFHRnlZV04wWlhKY2JseDBYSFJjZEZ4MFpYaDBjbUVnUFNCemRISnBibWN1WTJoaGNrTnZaR1ZCZENoamIzVnVkR1Z5S3lzcE8xeHVYSFJjZEZ4MFhIUnBaaUFvS0dWNGRISmhJQ1lnTUhoR1F6QXdLU0E5UFNBd2VFUkRNREFwSUhzZ0x5OGdiRzkzSUhOMWNuSnZaMkYwWlZ4dVhIUmNkRngwWEhSY2RHOTFkSEIxZEM1d2RYTm9LQ2dvZG1Gc2RXVWdKaUF3ZUROR1Jpa2dQRHdnTVRBcElDc2dLR1Y0ZEhKaElDWWdNSGd6UmtZcElDc2dNSGd4TURBd01DazdYRzVjZEZ4MFhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUmNkRngwTHk4Z2RXNXRZWFJqYUdWa0lITjFjbkp2WjJGMFpUc2diMjVzZVNCaGNIQmxibVFnZEdocGN5QmpiMlJsSUhWdWFYUXNJR2x1SUdOaGMyVWdkR2hsSUc1bGVIUmNibHgwWEhSY2RGeDBYSFF2THlCamIyUmxJSFZ1YVhRZ2FYTWdkR2hsSUdocFoyZ2djM1Z5Y205bllYUmxJRzltSUdFZ2MzVnljbTluWVhSbElIQmhhWEpjYmx4MFhIUmNkRngwWEhSdmRYUndkWFF1Y0hWemFDaDJZV3gxWlNrN1hHNWNkRngwWEhSY2RGeDBZMjkxYm5SbGNpMHRPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFI5SUdWc2MyVWdlMXh1WEhSY2RGeDBYSFJ2ZFhSd2RYUXVjSFZ6YUNoMllXeDFaU2s3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBmVnh1WEhSY2RISmxkSFZ5YmlCdmRYUndkWFE3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1EzSmxZWFJsY3lCaElITjBjbWx1WnlCaVlYTmxaQ0J2YmlCaGJpQmhjbkpoZVNCdlppQnVkVzFsY21saklHTnZaR1VnY0c5cGJuUnpMbHh1WEhRZ0tpQkFjMlZsSUdCd2RXNTVZMjlrWlM1MVkzTXlMbVJsWTI5a1pXQmNibHgwSUNvZ1FHMWxiV0psY2s5bUlIQjFibmxqYjJSbExuVmpjekpjYmx4MElDb2dRRzVoYldVZ1pXNWpiMlJsWEc1Y2RDQXFJRUJ3WVhKaGJTQjdRWEp5WVhsOUlHTnZaR1ZRYjJsdWRITWdWR2hsSUdGeWNtRjVJRzltSUc1MWJXVnlhV01nWTI5a1pTQndiMmx1ZEhNdVhHNWNkQ0FxSUVCeVpYUjFjbTV6SUh0VGRISnBibWQ5SUZSb1pTQnVaWGNnVlc1cFkyOWtaU0J6ZEhKcGJtY2dLRlZEVXkweUtTNWNibHgwSUNvdlhHNWNkR1oxYm1OMGFXOXVJSFZqY3pKbGJtTnZaR1VvWVhKeVlYa3BJSHRjYmx4MFhIUnlaWFIxY200Z2JXRndLR0Z5Y21GNUxDQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVYSFJjZEZ4MGRtRnlJRzkxZEhCMWRDQTlJQ2NuTzF4dVhIUmNkRngwYVdZZ0tIWmhiSFZsSUQ0Z01IaEdSa1pHS1NCN1hHNWNkRngwWEhSY2RIWmhiSFZsSUMwOUlEQjRNVEF3TURBN1hHNWNkRngwWEhSY2RHOTFkSEIxZENBclBTQnpkSEpwYm1kR2NtOXRRMmhoY2tOdlpHVW9kbUZzZFdVZ1BqNCtJREV3SUNZZ01IZ3pSa1lnZkNBd2VFUTRNREFwTzF4dVhIUmNkRngwWEhSMllXeDFaU0E5SURCNFJFTXdNQ0I4SUhaaGJIVmxJQ1lnTUhnelJrWTdYRzVjZEZ4MFhIUjlYRzVjZEZ4MFhIUnZkWFJ3ZFhRZ0t6MGdjM1J5YVc1blJuSnZiVU5vWVhKRGIyUmxLSFpoYkhWbEtUdGNibHgwWEhSY2RISmxkSFZ5YmlCdmRYUndkWFE3WEc1Y2RGeDBmU2t1YW05cGJpZ25KeWs3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1EyOXVkbVZ5ZEhNZ1lTQmlZWE5wWXlCamIyUmxJSEJ2YVc1MElHbHVkRzhnWVNCa2FXZHBkQzlwYm5SbFoyVnlMbHh1WEhRZ0tpQkFjMlZsSUdCa2FXZHBkRlJ2UW1GemFXTW9LV0JjYmx4MElDb2dRSEJ5YVhaaGRHVmNibHgwSUNvZ1FIQmhjbUZ0SUh0T2RXMWlaWEo5SUdOdlpHVlFiMmx1ZENCVWFHVWdZbUZ6YVdNZ2JuVnRaWEpwWXlCamIyUmxJSEJ2YVc1MElIWmhiSFZsTGx4dVhIUWdLaUJBY21WMGRYSnVjeUI3VG5WdFltVnlmU0JVYUdVZ2JuVnRaWEpwWXlCMllXeDFaU0J2WmlCaElHSmhjMmxqSUdOdlpHVWdjRzlwYm5RZ0tHWnZjaUIxYzJVZ2FXNWNibHgwSUNvZ2NtVndjbVZ6Wlc1MGFXNW5JR2x1ZEdWblpYSnpLU0JwYmlCMGFHVWdjbUZ1WjJVZ1lEQmdJSFJ2SUdCaVlYTmxJQzBnTVdBc0lHOXlJR0JpWVhObFlDQnBabHh1WEhRZ0tpQjBhR1VnWTI5a1pTQndiMmx1ZENCa2IyVnpJRzV2ZENCeVpYQnlaWE5sYm5RZ1lTQjJZV3gxWlM1Y2JseDBJQ292WEc1Y2RHWjFibU4wYVc5dUlHSmhjMmxqVkc5RWFXZHBkQ2hqYjJSbFVHOXBiblFwSUh0Y2JseDBYSFJwWmlBb1kyOWtaVkJ2YVc1MElDMGdORGdnUENBeE1Da2dlMXh1WEhSY2RGeDBjbVYwZFhKdUlHTnZaR1ZRYjJsdWRDQXRJREl5TzF4dVhIUmNkSDFjYmx4MFhIUnBaaUFvWTI5a1pWQnZhVzUwSUMwZ05qVWdQQ0F5TmlrZ2UxeHVYSFJjZEZ4MGNtVjBkWEp1SUdOdlpHVlFiMmx1ZENBdElEWTFPMXh1WEhSY2RIMWNibHgwWEhScFppQW9ZMjlrWlZCdmFXNTBJQzBnT1RjZ1BDQXlOaWtnZTF4dVhIUmNkRngwY21WMGRYSnVJR052WkdWUWIybHVkQ0F0SURrM08xeHVYSFJjZEgxY2JseDBYSFJ5WlhSMWNtNGdZbUZ6WlR0Y2JseDBmVnh1WEc1Y2RDOHFLbHh1WEhRZ0tpQkRiMjUyWlhKMGN5QmhJR1JwWjJsMEwybHVkR1ZuWlhJZ2FXNTBieUJoSUdKaGMybGpJR052WkdVZ2NHOXBiblF1WEc1Y2RDQXFJRUJ6WldVZ1lHSmhjMmxqVkc5RWFXZHBkQ2dwWUZ4dVhIUWdLaUJBY0hKcGRtRjBaVnh1WEhRZ0tpQkFjR0Z5WVcwZ2UwNTFiV0psY24wZ1pHbG5hWFFnVkdobElHNTFiV1Z5YVdNZ2RtRnNkV1VnYjJZZ1lTQmlZWE5wWXlCamIyUmxJSEJ2YVc1MExseHVYSFFnS2lCQWNtVjBkWEp1Y3lCN1RuVnRZbVZ5ZlNCVWFHVWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRDQjNhRzl6WlNCMllXeDFaU0FvZDJobGJpQjFjMlZrSUdadmNseHVYSFFnS2lCeVpYQnlaWE5sYm5ScGJtY2dhVzUwWldkbGNuTXBJR2x6SUdCa2FXZHBkR0FzSUhkb2FXTm9JRzVsWldSeklIUnZJR0psSUdsdUlIUm9aU0J5WVc1blpWeHVYSFFnS2lCZ01HQWdkRzhnWUdKaGMyVWdMU0F4WUM0Z1NXWWdZR1pzWVdkZ0lHbHpJRzV2YmkxNlpYSnZMQ0IwYUdVZ2RYQndaWEpqWVhObElHWnZjbTBnYVhOY2JseDBJQ29nZFhObFpEc2daV3h6WlN3Z2RHaGxJR3h2ZDJWeVkyRnpaU0JtYjNKdElHbHpJSFZ6WldRdUlGUm9aU0JpWldoaGRtbHZjaUJwY3lCMWJtUmxabWx1WldSY2JseDBJQ29nYVdZZ1lHWnNZV2RnSUdseklHNXZiaTE2WlhKdklHRnVaQ0JnWkdsbmFYUmdJR2hoY3lCdWJ5QjFjSEJsY21OaGMyVWdabTl5YlM1Y2JseDBJQ292WEc1Y2RHWjFibU4wYVc5dUlHUnBaMmwwVkc5Q1lYTnBZeWhrYVdkcGRDd2dabXhoWnlrZ2UxeHVYSFJjZEM4dklDQXdMaTR5TlNCdFlYQWdkRzhnUVZORFNVa2dZUzR1ZWlCdmNpQkJMaTVhWEc1Y2RGeDBMeThnTWpZdUxqTTFJRzFoY0NCMGJ5QkJVME5KU1NBd0xpNDVYRzVjZEZ4MGNtVjBkWEp1SUdScFoybDBJQ3NnTWpJZ0t5QTNOU0FxSUNoa2FXZHBkQ0E4SURJMktTQXRJQ2dvWm14aFp5QWhQU0F3S1NBOFBDQTFLVHRjYmx4MGZWeHVYRzVjZEM4cUtseHVYSFFnS2lCQ2FXRnpJR0ZrWVhCMFlYUnBiMjRnWm5WdVkzUnBiMjRnWVhNZ2NHVnlJSE5sWTNScGIyNGdNeTQwSUc5bUlGSkdReUF6TkRreUxseHVYSFFnS2lCb2RIUndPaTh2ZEc5dmJITXVhV1YwWmk1dmNtY3ZhSFJ0YkM5eVptTXpORGt5STNObFkzUnBiMjR0TXk0MFhHNWNkQ0FxSUVCd2NtbDJZWFJsWEc1Y2RDQXFMMXh1WEhSbWRXNWpkR2x2YmlCaFpHRndkQ2hrWld4MFlTd2diblZ0VUc5cGJuUnpMQ0JtYVhKemRGUnBiV1VwSUh0Y2JseDBYSFIyWVhJZ2F5QTlJREE3WEc1Y2RGeDBaR1ZzZEdFZ1BTQm1hWEp6ZEZScGJXVWdQeUJtYkc5dmNpaGtaV3gwWVNBdklHUmhiWEFwSURvZ1pHVnNkR0VnUGo0Z01UdGNibHgwWEhSa1pXeDBZU0FyUFNCbWJHOXZjaWhrWld4MFlTQXZJRzUxYlZCdmFXNTBjeWs3WEc1Y2RGeDBabTl5SUNndktpQnVieUJwYm1sMGFXRnNhWHBoZEdsdmJpQXFMenNnWkdWc2RHRWdQaUJpWVhObFRXbHVkWE5VVFdsdUlDb2dkRTFoZUNBK1BpQXhPeUJySUNzOUlHSmhjMlVwSUh0Y2JseDBYSFJjZEdSbGJIUmhJRDBnWm14dmIzSW9aR1ZzZEdFZ0x5QmlZWE5sVFdsdWRYTlVUV2x1S1R0Y2JseDBYSFI5WEc1Y2RGeDBjbVYwZFhKdUlHWnNiMjl5S0dzZ0t5QW9ZbUZ6WlUxcGJuVnpWRTFwYmlBcklERXBJQ29nWkdWc2RHRWdMeUFvWkdWc2RHRWdLeUJ6YTJWM0tTazdYRzVjZEgxY2JseHVYSFF2S2lwY2JseDBJQ29nUTI5dWRtVnlkSE1nWVNCUWRXNTVZMjlrWlNCemRISnBibWNnYjJZZ1FWTkRTVWt0YjI1c2VTQnplVzFpYjJ4eklIUnZJR0VnYzNSeWFXNW5JRzltSUZWdWFXTnZaR1ZjYmx4MElDb2djM2x0WW05c2N5NWNibHgwSUNvZ1FHMWxiV0psY2s5bUlIQjFibmxqYjJSbFhHNWNkQ0FxSUVCd1lYSmhiU0I3VTNSeWFXNW5mU0JwYm5CMWRDQlVhR1VnVUhWdWVXTnZaR1VnYzNSeWFXNW5JRzltSUVGVFEwbEpMVzl1YkhrZ2MzbHRZbTlzY3k1Y2JseDBJQ29nUUhKbGRIVnlibk1nZTFOMGNtbHVaMzBnVkdobElISmxjM1ZzZEdsdVp5QnpkSEpwYm1jZ2IyWWdWVzVwWTI5a1pTQnplVzFpYjJ4ekxseHVYSFFnS2k5Y2JseDBablZ1WTNScGIyNGdaR1ZqYjJSbEtHbHVjSFYwS1NCN1hHNWNkRngwTHk4Z1JHOXVKM1FnZFhObElGVkRVeTB5WEc1Y2RGeDBkbUZ5SUc5MWRIQjFkQ0E5SUZ0ZExGeHVYSFJjZENBZ0lDQnBibkIxZEV4bGJtZDBhQ0E5SUdsdWNIVjBMbXhsYm1kMGFDeGNibHgwWEhRZ0lDQWdiM1YwTEZ4dVhIUmNkQ0FnSUNCcElEMGdNQ3hjYmx4MFhIUWdJQ0FnYmlBOUlHbHVhWFJwWVd4T0xGeHVYSFJjZENBZ0lDQmlhV0Z6SUQwZ2FXNXBkR2xoYkVKcFlYTXNYRzVjZEZ4MElDQWdJR0poYzJsakxGeHVYSFJjZENBZ0lDQnFMRnh1WEhSY2RDQWdJQ0JwYm1SbGVDeGNibHgwWEhRZ0lDQWdiMnhrYVN4Y2JseDBYSFFnSUNBZ2R5eGNibHgwWEhRZ0lDQWdheXhjYmx4MFhIUWdJQ0FnWkdsbmFYUXNYRzVjZEZ4MElDQWdJSFFzWEc1Y2RGeDBJQ0FnSUM4cUtpQkRZV05vWldRZ1kyRnNZM1ZzWVhScGIyNGdjbVZ6ZFd4MGN5QXFMMXh1WEhSY2RDQWdJQ0JpWVhObFRXbHVkWE5VTzF4dVhHNWNkRngwTHk4Z1NHRnVaR3hsSUhSb1pTQmlZWE5wWXlCamIyUmxJSEJ2YVc1MGN6b2diR1YwSUdCaVlYTnBZMkFnWW1VZ2RHaGxJRzUxYldKbGNpQnZaaUJwYm5CMWRDQmpiMlJsWEc1Y2RGeDBMeThnY0c5cGJuUnpJR0psWm05eVpTQjBhR1VnYkdGemRDQmtaV3hwYldsMFpYSXNJRzl5SUdBd1lDQnBaaUIwYUdWeVpTQnBjeUJ1YjI1bExDQjBhR1Z1SUdOdmNIbGNibHgwWEhRdkx5QjBhR1VnWm1seWMzUWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRITWdkRzhnZEdobElHOTFkSEIxZEM1Y2JseHVYSFJjZEdKaGMybGpJRDBnYVc1d2RYUXViR0Z6ZEVsdVpHVjRUMllvWkdWc2FXMXBkR1Z5S1R0Y2JseDBYSFJwWmlBb1ltRnphV01nUENBd0tTQjdYRzVjZEZ4MFhIUmlZWE5wWXlBOUlEQTdYRzVjZEZ4MGZWeHVYRzVjZEZ4MFptOXlJQ2hxSUQwZ01Ec2dhaUE4SUdKaGMybGpPeUFySzJvcElIdGNibHgwWEhSY2RDOHZJR2xtSUdsMEozTWdibTkwSUdFZ1ltRnphV01nWTI5a1pTQndiMmx1ZEZ4dVhIUmNkRngwYVdZZ0tHbHVjSFYwTG1Ob1lYSkRiMlJsUVhRb2Fpa2dQajBnTUhnNE1Da2dlMXh1WEhSY2RGeDBYSFJsY25KdmNpZ25ibTkwTFdKaGMybGpKeWs3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBYSFJ2ZFhSd2RYUXVjSFZ6YUNocGJuQjFkQzVqYUdGeVEyOWtaVUYwS0dvcEtUdGNibHgwWEhSOVhHNWNibHgwWEhRdkx5Qk5ZV2x1SUdSbFkyOWthVzVuSUd4dmIzQTZJSE4wWVhKMElHcDFjM1FnWVdaMFpYSWdkR2hsSUd4aGMzUWdaR1ZzYVcxcGRHVnlJR2xtSUdGdWVTQmlZWE5wWXlCamIyUmxYRzVjZEZ4MEx5OGdjRzlwYm5SeklIZGxjbVVnWTI5d2FXVmtPeUJ6ZEdGeWRDQmhkQ0IwYUdVZ1ltVm5hVzV1YVc1bklHOTBhR1Z5ZDJselpTNWNibHh1WEhSY2RHWnZjaUFvYVc1a1pYZ2dQU0JpWVhOcFl5QStJREFnUHlCaVlYTnBZeUFySURFZ09pQXdPeUJwYm1SbGVDQThJR2x1Y0hWMFRHVnVaM1JvT3lBdktpQnVieUJtYVc1aGJDQmxlSEJ5WlhOemFXOXVJQ292S1NCN1hHNWNibHgwWEhSY2RDOHZJR0JwYm1SbGVHQWdhWE1nZEdobElHbHVaR1Y0SUc5bUlIUm9aU0J1WlhoMElHTm9ZWEpoWTNSbGNpQjBieUJpWlNCamIyNXpkVzFsWkM1Y2JseDBYSFJjZEM4dklFUmxZMjlrWlNCaElHZGxibVZ5WVd4cGVtVmtJSFpoY21saFlteGxMV3hsYm1kMGFDQnBiblJsWjJWeUlHbHVkRzhnWUdSbGJIUmhZQ3hjYmx4MFhIUmNkQzh2SUhkb2FXTm9JR2RsZEhNZ1lXUmtaV1FnZEc4Z1lHbGdMaUJVYUdVZ2IzWmxjbVpzYjNjZ1kyaGxZMnRwYm1jZ2FYTWdaV0Z6YVdWeVhHNWNkRngwWEhRdkx5QnBaaUIzWlNCcGJtTnlaV0Z6WlNCZ2FXQWdZWE1nZDJVZ1oyOHNJSFJvWlc0Z2MzVmlkSEpoWTNRZ2IyWm1JR2wwY3lCemRHRnlkR2x1WjF4dVhIUmNkRngwTHk4Z2RtRnNkV1VnWVhRZ2RHaGxJR1Z1WkNCMGJ5QnZZblJoYVc0Z1lHUmxiSFJoWUM1Y2JseDBYSFJjZEdadmNpQW9iMnhrYVNBOUlHa3NJSGNnUFNBeExDQnJJRDBnWW1GelpUc2dMeW9nYm04Z1kyOXVaR2wwYVc5dUlDb3ZPeUJySUNzOUlHSmhjMlVwSUh0Y2JseHVYSFJjZEZ4MFhIUnBaaUFvYVc1a1pYZ2dQajBnYVc1d2RYUk1aVzVuZEdncElIdGNibHgwWEhSY2RGeDBYSFJsY25KdmNpZ25hVzUyWVd4cFpDMXBibkIxZENjcE8xeHVYSFJjZEZ4MFhIUjlYRzVjYmx4MFhIUmNkRngwWkdsbmFYUWdQU0JpWVhOcFkxUnZSR2xuYVhRb2FXNXdkWFF1WTJoaGNrTnZaR1ZCZENocGJtUmxlQ3NyS1NrN1hHNWNibHgwWEhSY2RGeDBhV1lnS0dScFoybDBJRDQ5SUdKaGMyVWdmSHdnWkdsbmFYUWdQaUJtYkc5dmNpZ29iV0Y0U1c1MElDMGdhU2tnTHlCM0tTa2dlMXh1WEhSY2RGeDBYSFJjZEdWeWNtOXlLQ2R2ZG1WeVpteHZkeWNwTzF4dVhIUmNkRngwWEhSOVhHNWNibHgwWEhSY2RGeDBhU0FyUFNCa2FXZHBkQ0FxSUhjN1hHNWNkRngwWEhSY2RIUWdQU0JySUR3OUlHSnBZWE1nUHlCMFRXbHVJRG9nS0dzZ1BqMGdZbWxoY3lBcklIUk5ZWGdnUHlCMFRXRjRJRG9nYXlBdElHSnBZWE1wTzF4dVhHNWNkRngwWEhSY2RHbG1JQ2hrYVdkcGRDQThJSFFwSUh0Y2JseDBYSFJjZEZ4MFhIUmljbVZoYXp0Y2JseDBYSFJjZEZ4MGZWeHVYRzVjZEZ4MFhIUmNkR0poYzJWTmFXNTFjMVFnUFNCaVlYTmxJQzBnZER0Y2JseDBYSFJjZEZ4MGFXWWdLSGNnUGlCbWJHOXZjaWh0WVhoSmJuUWdMeUJpWVhObFRXbHVkWE5VS1NrZ2UxeHVYSFJjZEZ4MFhIUmNkR1Z5Y205eUtDZHZkbVZ5Wm14dmR5Y3BPMXh1WEhSY2RGeDBYSFI5WEc1Y2JseDBYSFJjZEZ4MGR5QXFQU0JpWVhObFRXbHVkWE5VTzF4dVhHNWNkRngwWEhSOVhHNWNibHgwWEhSY2RHOTFkQ0E5SUc5MWRIQjFkQzVzWlc1bmRHZ2dLeUF4TzF4dVhIUmNkRngwWW1saGN5QTlJR0ZrWVhCMEtHa2dMU0J2YkdScExDQnZkWFFzSUc5c1pHa2dQVDBnTUNrN1hHNWNibHgwWEhSY2RDOHZJR0JwWUNCM1lYTWdjM1Z3Y0c5elpXUWdkRzhnZDNKaGNDQmhjbTkxYm1RZ1puSnZiU0JnYjNWMFlDQjBieUJnTUdBc1hHNWNkRngwWEhRdkx5QnBibU55WlcxbGJuUnBibWNnWUc1Z0lHVmhZMmdnZEdsdFpTd2djMjhnZDJVbmJHd2dabWw0SUhSb1lYUWdibTkzT2x4dVhIUmNkRngwYVdZZ0tHWnNiMjl5S0drZ0x5QnZkWFFwSUQ0Z2JXRjRTVzUwSUMwZ2Jpa2dlMXh1WEhSY2RGeDBYSFJsY25KdmNpZ25iM1psY21ac2IzY25LVHRjYmx4MFhIUmNkSDFjYmx4dVhIUmNkRngwYmlBclBTQm1iRzl2Y2locElDOGdiM1YwS1R0Y2JseDBYSFJjZEdrZ0pUMGdiM1YwTzF4dVhHNWNkRngwWEhRdkx5Qkpibk5sY25RZ1lHNWdJR0YwSUhCdmMybDBhVzl1SUdCcFlDQnZaaUIwYUdVZ2IzVjBjSFYwWEc1Y2RGeDBYSFJ2ZFhSd2RYUXVjM0JzYVdObEtHa3JLeXdnTUN3Z2JpazdYRzVjYmx4MFhIUjlYRzVjYmx4MFhIUnlaWFIxY200Z2RXTnpNbVZ1WTI5a1pTaHZkWFJ3ZFhRcE8xeHVYSFI5WEc1Y2JseDBMeW9xWEc1Y2RDQXFJRU52Ym5abGNuUnpJR0VnYzNSeWFXNW5JRzltSUZWdWFXTnZaR1VnYzNsdFltOXNjeUIwYnlCaElGQjFibmxqYjJSbElITjBjbWx1WnlCdlppQkJVME5KU1MxdmJteDVYRzVjZENBcUlITjViV0p2YkhNdVhHNWNkQ0FxSUVCdFpXMWlaWEpQWmlCd2RXNTVZMjlrWlZ4dVhIUWdLaUJBY0dGeVlXMGdlMU4wY21sdVozMGdhVzV3ZFhRZ1ZHaGxJSE4wY21sdVp5QnZaaUJWYm1samIyUmxJSE41YldKdmJITXVYRzVjZENBcUlFQnlaWFIxY201eklIdFRkSEpwYm1kOUlGUm9aU0J5WlhOMWJIUnBibWNnVUhWdWVXTnZaR1VnYzNSeWFXNW5JRzltSUVGVFEwbEpMVzl1YkhrZ2MzbHRZbTlzY3k1Y2JseDBJQ292WEc1Y2RHWjFibU4wYVc5dUlHVnVZMjlrWlNocGJuQjFkQ2tnZTF4dVhIUmNkSFpoY2lCdUxGeHVYSFJjZENBZ0lDQmtaV3gwWVN4Y2JseDBYSFFnSUNBZ2FHRnVaR3hsWkVOUVEyOTFiblFzWEc1Y2RGeDBJQ0FnSUdKaGMybGpUR1Z1WjNSb0xGeHVYSFJjZENBZ0lDQmlhV0Z6TEZ4dVhIUmNkQ0FnSUNCcUxGeHVYSFJjZENBZ0lDQnRMRnh1WEhSY2RDQWdJQ0J4TEZ4dVhIUmNkQ0FnSUNCckxGeHVYSFJjZENBZ0lDQjBMRnh1WEhSY2RDQWdJQ0JqZFhKeVpXNTBWbUZzZFdVc1hHNWNkRngwSUNBZ0lHOTFkSEIxZENBOUlGdGRMRnh1WEhSY2RDQWdJQ0F2S2lvZ1lHbHVjSFYwVEdWdVozUm9ZQ0IzYVd4c0lHaHZiR1FnZEdobElHNTFiV0psY2lCdlppQmpiMlJsSUhCdmFXNTBjeUJwYmlCZ2FXNXdkWFJnTGlBcUwxeHVYSFJjZENBZ0lDQnBibkIxZEV4bGJtZDBhQ3hjYmx4MFhIUWdJQ0FnTHlvcUlFTmhZMmhsWkNCallXeGpkV3hoZEdsdmJpQnlaWE4xYkhSeklDb3ZYRzVjZEZ4MElDQWdJR2hoYm1Sc1pXUkRVRU52ZFc1MFVHeDFjMDl1WlN4Y2JseDBYSFFnSUNBZ1ltRnpaVTFwYm5WelZDeGNibHgwWEhRZ0lDQWdjVTFwYm5WelZEdGNibHh1WEhSY2RDOHZJRU52Ym5abGNuUWdkR2hsSUdsdWNIVjBJR2x1SUZWRFV5MHlJSFJ2SUZWdWFXTnZaR1ZjYmx4MFhIUnBibkIxZENBOUlIVmpjekprWldOdlpHVW9hVzV3ZFhRcE8xeHVYRzVjZEZ4MEx5OGdRMkZqYUdVZ2RHaGxJR3hsYm1kMGFGeHVYSFJjZEdsdWNIVjBUR1Z1WjNSb0lEMGdhVzV3ZFhRdWJHVnVaM1JvTzF4dVhHNWNkRngwTHk4Z1NXNXBkR2xoYkdsNlpTQjBhR1VnYzNSaGRHVmNibHgwWEhSdUlEMGdhVzVwZEdsaGJFNDdYRzVjZEZ4MFpHVnNkR0VnUFNBd08xeHVYSFJjZEdKcFlYTWdQU0JwYm1sMGFXRnNRbWxoY3p0Y2JseHVYSFJjZEM4dklFaGhibVJzWlNCMGFHVWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRITmNibHgwWEhSbWIzSWdLR29nUFNBd095QnFJRHdnYVc1d2RYUk1aVzVuZEdnN0lDc3JhaWtnZTF4dVhIUmNkRngwWTNWeWNtVnVkRlpoYkhWbElEMGdhVzV3ZFhSYmFsMDdYRzVjZEZ4MFhIUnBaaUFvWTNWeWNtVnVkRlpoYkhWbElEd2dNSGc0TUNrZ2UxeHVYSFJjZEZ4MFhIUnZkWFJ3ZFhRdWNIVnphQ2h6ZEhKcGJtZEdjbTl0UTJoaGNrTnZaR1VvWTNWeWNtVnVkRlpoYkhWbEtTazdYRzVjZEZ4MFhIUjlYRzVjZEZ4MGZWeHVYRzVjZEZ4MGFHRnVaR3hsWkVOUVEyOTFiblFnUFNCaVlYTnBZMHhsYm1kMGFDQTlJRzkxZEhCMWRDNXNaVzVuZEdnN1hHNWNibHgwWEhRdkx5QmdhR0Z1Wkd4bFpFTlFRMjkxYm5SZ0lHbHpJSFJvWlNCdWRXMWlaWElnYjJZZ1kyOWtaU0J3YjJsdWRITWdkR2hoZENCb1lYWmxJR0psWlc0Z2FHRnVaR3hsWkR0Y2JseDBYSFF2THlCZ1ltRnphV05NWlc1bmRHaGdJR2x6SUhSb1pTQnVkVzFpWlhJZ2IyWWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRITXVYRzVjYmx4MFhIUXZMeUJHYVc1cGMyZ2dkR2hsSUdKaGMybGpJSE4wY21sdVp5QXRJR2xtSUdsMElHbHpJRzV2ZENCbGJYQjBlU0F0SUhkcGRHZ2dZU0JrWld4cGJXbDBaWEpjYmx4MFhIUnBaaUFvWW1GemFXTk1aVzVuZEdncElIdGNibHgwWEhSY2RHOTFkSEIxZEM1d2RYTm9LR1JsYkdsdGFYUmxjaWs3WEc1Y2RGeDBmVnh1WEc1Y2RGeDBMeThnVFdGcGJpQmxibU52WkdsdVp5QnNiMjl3T2x4dVhIUmNkSGRvYVd4bElDaG9ZVzVrYkdWa1ExQkRiM1Z1ZENBOElHbHVjSFYwVEdWdVozUm9LU0I3WEc1Y2JseDBYSFJjZEM4dklFRnNiQ0J1YjI0dFltRnphV01nWTI5a1pTQndiMmx1ZEhNZ1BDQnVJR2hoZG1VZ1ltVmxiaUJvWVc1a2JHVmtJR0ZzY21WaFpIa3VJRVpwYm1RZ2RHaGxJRzVsZUhSY2JseDBYSFJjZEM4dklHeGhjbWRsY2lCdmJtVTZYRzVjZEZ4MFhIUm1iM0lnS0cwZ1BTQnRZWGhKYm5Rc0lHb2dQU0F3T3lCcUlEd2dhVzV3ZFhSTVpXNW5kR2c3SUNzcmFpa2dlMXh1WEhSY2RGeDBYSFJqZFhKeVpXNTBWbUZzZFdVZ1BTQnBibkIxZEZ0cVhUdGNibHgwWEhSY2RGeDBhV1lnS0dOMWNuSmxiblJXWVd4MVpTQStQU0J1SUNZbUlHTjFjbkpsYm5SV1lXeDFaU0E4SUcwcElIdGNibHgwWEhSY2RGeDBYSFJ0SUQwZ1kzVnljbVZ1ZEZaaGJIVmxPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFI5WEc1Y2JseDBYSFJjZEM4dklFbHVZM0psWVhObElHQmtaV3gwWVdBZ1pXNXZkV2RvSUhSdklHRmtkbUZ1WTJVZ2RHaGxJR1JsWTI5a1pYSW5jeUE4Yml4cFBpQnpkR0YwWlNCMGJ5QThiU3d3UGl4Y2JseDBYSFJjZEM4dklHSjFkQ0JuZFdGeVpDQmhaMkZwYm5OMElHOTJaWEptYkc5M1hHNWNkRngwWEhSb1lXNWtiR1ZrUTFCRGIzVnVkRkJzZFhOUGJtVWdQU0JvWVc1a2JHVmtRMUJEYjNWdWRDQXJJREU3WEc1Y2RGeDBYSFJwWmlBb2JTQXRJRzRnUGlCbWJHOXZjaWdvYldGNFNXNTBJQzBnWkdWc2RHRXBJQzhnYUdGdVpHeGxaRU5RUTI5MWJuUlFiSFZ6VDI1bEtTa2dlMXh1WEhSY2RGeDBYSFJsY25KdmNpZ25iM1psY21ac2IzY25LVHRjYmx4MFhIUmNkSDFjYmx4dVhIUmNkRngwWkdWc2RHRWdLejBnS0cwZ0xTQnVLU0FxSUdoaGJtUnNaV1JEVUVOdmRXNTBVR3gxYzA5dVpUdGNibHgwWEhSY2RHNGdQU0J0TzF4dVhHNWNkRngwWEhSbWIzSWdLR29nUFNBd095QnFJRHdnYVc1d2RYUk1aVzVuZEdnN0lDc3JhaWtnZTF4dVhIUmNkRngwWEhSamRYSnlaVzUwVm1Gc2RXVWdQU0JwYm5CMWRGdHFYVHRjYmx4dVhIUmNkRngwWEhScFppQW9ZM1Z5Y21WdWRGWmhiSFZsSUR3Z2JpQW1KaUFySzJSbGJIUmhJRDRnYldGNFNXNTBLU0I3WEc1Y2RGeDBYSFJjZEZ4MFpYSnliM0lvSjI5MlpYSm1iRzkzSnlrN1hHNWNkRngwWEhSY2RIMWNibHh1WEhSY2RGeDBYSFJwWmlBb1kzVnljbVZ1ZEZaaGJIVmxJRDA5SUc0cElIdGNibHgwWEhSY2RGeDBYSFF2THlCU1pYQnlaWE5sYm5RZ1pHVnNkR0VnWVhNZ1lTQm5aVzVsY21Gc2FYcGxaQ0IyWVhKcFlXSnNaUzFzWlc1bmRHZ2dhVzUwWldkbGNseHVYSFJjZEZ4MFhIUmNkR1p2Y2lBb2NTQTlJR1JsYkhSaExDQnJJRDBnWW1GelpUc2dMeW9nYm04Z1kyOXVaR2wwYVc5dUlDb3ZPeUJySUNzOUlHSmhjMlVwSUh0Y2JseDBYSFJjZEZ4MFhIUmNkSFFnUFNCcklEdzlJR0pwWVhNZ1B5QjBUV2x1SURvZ0tHc2dQajBnWW1saGN5QXJJSFJOWVhnZ1B5QjBUV0Y0SURvZ2F5QXRJR0pwWVhNcE8xeHVYSFJjZEZ4MFhIUmNkRngwYVdZZ0tIRWdQQ0IwS1NCN1hHNWNkRngwWEhSY2RGeDBYSFJjZEdKeVpXRnJPMXh1WEhSY2RGeDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUmNkRngwY1UxcGJuVnpWQ0E5SUhFZ0xTQjBPMXh1WEhSY2RGeDBYSFJjZEZ4MFltRnpaVTFwYm5WelZDQTlJR0poYzJVZ0xTQjBPMXh1WEhSY2RGeDBYSFJjZEZ4MGIzVjBjSFYwTG5CMWMyZ29YRzVjZEZ4MFhIUmNkRngwWEhSY2RITjBjbWx1WjBaeWIyMURhR0Z5UTI5a1pTaGthV2RwZEZSdlFtRnphV01vZENBcklIRk5hVzUxYzFRZ0pTQmlZWE5sVFdsdWRYTlVMQ0F3S1NsY2JseDBYSFJjZEZ4MFhIUmNkQ2s3WEc1Y2RGeDBYSFJjZEZ4MFhIUnhJRDBnWm14dmIzSW9jVTFwYm5WelZDQXZJR0poYzJWTmFXNTFjMVFwTzF4dVhIUmNkRngwWEhSY2RIMWNibHh1WEhSY2RGeDBYSFJjZEc5MWRIQjFkQzV3ZFhOb0tITjBjbWx1WjBaeWIyMURhR0Z5UTI5a1pTaGthV2RwZEZSdlFtRnphV01vY1N3Z01Da3BLVHRjYmx4MFhIUmNkRngwWEhSaWFXRnpJRDBnWVdSaGNIUW9aR1ZzZEdFc0lHaGhibVJzWldSRFVFTnZkVzUwVUd4MWMwOXVaU3dnYUdGdVpHeGxaRU5RUTI5MWJuUWdQVDBnWW1GemFXTk1aVzVuZEdncE8xeHVYSFJjZEZ4MFhIUmNkR1JsYkhSaElEMGdNRHRjYmx4MFhIUmNkRngwWEhRcksyaGhibVJzWldSRFVFTnZkVzUwTzF4dVhIUmNkRngwWEhSOVhHNWNkRngwWEhSOVhHNWNibHgwWEhSY2RDc3JaR1ZzZEdFN1hHNWNkRngwWEhRcksyNDdYRzVjYmx4MFhIUjlYRzVjZEZ4MGNtVjBkWEp1SUc5MWRIQjFkQzVxYjJsdUtDY25LVHRjYmx4MGZWeHVYRzVjZEM4cUtseHVYSFFnS2lCRGIyNTJaWEowY3lCaElGQjFibmxqYjJSbElITjBjbWx1WnlCeVpYQnlaWE5sYm5ScGJtY2dZU0JrYjIxaGFXNGdibUZ0WlNCMGJ5QlZibWxqYjJSbExpQlBibXg1SUhSb1pWeHVYSFFnS2lCUWRXNTVZMjlrWldRZ2NHRnlkSE1nYjJZZ2RHaGxJR1J2YldGcGJpQnVZVzFsSUhkcGJHd2dZbVVnWTI5dWRtVnlkR1ZrTENCcExtVXVJR2wwSUdSdlpYTnVKM1JjYmx4MElDb2diV0YwZEdWeUlHbG1JSGx2ZFNCallXeHNJR2wwSUc5dUlHRWdjM1J5YVc1bklIUm9ZWFFnYUdGeklHRnNjbVZoWkhrZ1ltVmxiaUJqYjI1MlpYSjBaV1FnZEc5Y2JseDBJQ29nVlc1cFkyOWtaUzVjYmx4MElDb2dRRzFsYldKbGNrOW1JSEIxYm5samIyUmxYRzVjZENBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCa2IyMWhhVzRnVkdobElGQjFibmxqYjJSbElHUnZiV0ZwYmlCdVlXMWxJSFJ2SUdOdmJuWmxjblFnZEc4Z1ZXNXBZMjlrWlM1Y2JseDBJQ29nUUhKbGRIVnlibk1nZTFOMGNtbHVaMzBnVkdobElGVnVhV052WkdVZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaGxJR2RwZG1WdUlGQjFibmxqYjJSbFhHNWNkQ0FxSUhOMGNtbHVaeTVjYmx4MElDb3ZYRzVjZEdaMWJtTjBhVzl1SUhSdlZXNXBZMjlrWlNoa2IyMWhhVzRwSUh0Y2JseDBYSFJ5WlhSMWNtNGdiV0Z3Ukc5dFlXbHVLR1J2YldGcGJpd2dablZ1WTNScGIyNG9jM1J5YVc1bktTQjdYRzVjZEZ4MFhIUnlaWFIxY200Z2NtVm5aWGhRZFc1NVkyOWtaUzUwWlhOMEtITjBjbWx1WnlsY2JseDBYSFJjZEZ4MFB5QmtaV052WkdVb2MzUnlhVzVuTG5Oc2FXTmxLRFFwTG5SdlRHOTNaWEpEWVhObEtDa3BYRzVjZEZ4MFhIUmNkRG9nYzNSeWFXNW5PMXh1WEhSY2RIMHBPMXh1WEhSOVhHNWNibHgwTHlvcVhHNWNkQ0FxSUVOdmJuWmxjblJ6SUdFZ1ZXNXBZMjlrWlNCemRISnBibWNnY21Wd2NtVnpaVzUwYVc1bklHRWdaRzl0WVdsdUlHNWhiV1VnZEc4Z1VIVnVlV052WkdVdUlFOXViSGtnZEdobFhHNWNkQ0FxSUc1dmJpMUJVME5KU1NCd1lYSjBjeUJ2WmlCMGFHVWdaRzl0WVdsdUlHNWhiV1VnZDJsc2JDQmlaU0JqYjI1MlpYSjBaV1FzSUdrdVpTNGdhWFFnWkc5bGMyNG5kRnh1WEhRZ0tpQnRZWFIwWlhJZ2FXWWdlVzkxSUdOaGJHd2dhWFFnZDJsMGFDQmhJR1J2YldGcGJpQjBhR0YwSjNNZ1lXeHlaV0ZrZVNCcGJpQkJVME5KU1M1Y2JseDBJQ29nUUcxbGJXSmxjazltSUhCMWJubGpiMlJsWEc1Y2RDQXFJRUJ3WVhKaGJTQjdVM1J5YVc1bmZTQmtiMjFoYVc0Z1ZHaGxJR1J2YldGcGJpQnVZVzFsSUhSdklHTnZiblpsY25Rc0lHRnpJR0VnVlc1cFkyOWtaU0J6ZEhKcGJtY3VYRzVjZENBcUlFQnlaWFIxY201eklIdFRkSEpwYm1kOUlGUm9aU0JRZFc1NVkyOWtaU0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdVZ1oybDJaVzRnWkc5dFlXbHVJRzVoYldVdVhHNWNkQ0FxTDF4dVhIUm1kVzVqZEdsdmJpQjBiMEZUUTBsSktHUnZiV0ZwYmlrZ2UxeHVYSFJjZEhKbGRIVnliaUJ0WVhCRWIyMWhhVzRvWkc5dFlXbHVMQ0JtZFc1amRHbHZiaWh6ZEhKcGJtY3BJSHRjYmx4MFhIUmNkSEpsZEhWeWJpQnlaV2RsZUU1dmJrRlRRMGxKTG5SbGMzUW9jM1J5YVc1bktWeHVYSFJjZEZ4MFhIUS9JQ2Q0YmkwdEp5QXJJR1Z1WTI5a1pTaHpkSEpwYm1jcFhHNWNkRngwWEhSY2REb2djM1J5YVc1bk8xeHVYSFJjZEgwcE8xeHVYSFI5WEc1Y2JseDBMeW90TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFNvdlhHNWNibHgwTHlvcUlFUmxabWx1WlNCMGFHVWdjSFZpYkdsaklFRlFTU0FxTDF4dVhIUndkVzU1WTI5a1pTQTlJSHRjYmx4MFhIUXZLaXBjYmx4MFhIUWdLaUJCSUhOMGNtbHVaeUJ5WlhCeVpYTmxiblJwYm1jZ2RHaGxJR04xY25KbGJuUWdVSFZ1ZVdOdlpHVXVhbk1nZG1WeWMybHZiaUJ1ZFcxaVpYSXVYRzVjZEZ4MElDb2dRRzFsYldKbGNrOW1JSEIxYm5samIyUmxYRzVjZEZ4MElDb2dRSFI1Y0dVZ1UzUnlhVzVuWEc1Y2RGeDBJQ292WEc1Y2RGeDBKM1psY25OcGIyNG5PaUFuTVM0eUxqUW5MRnh1WEhSY2RDOHFLbHh1WEhSY2RDQXFJRUZ1SUc5aWFtVmpkQ0J2WmlCdFpYUm9iMlJ6SUhSdklHTnZiblpsY25RZ1puSnZiU0JLWVhaaFUyTnlhWEIwSjNNZ2FXNTBaWEp1WVd3Z1kyaGhjbUZqZEdWeVhHNWNkRngwSUNvZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnS0ZWRFV5MHlLU0IwYnlCVmJtbGpiMlJsSUdOdlpHVWdjRzlwYm5SekxDQmhibVFnWW1GamF5NWNibHgwWEhRZ0tpQkFjMlZsSUR4b2RIUndPaTh2YldGMGFHbGhjMko1Ym1WdWN5NWlaUzl1YjNSbGN5OXFZWFpoYzJOeWFYQjBMV1Z1WTI5a2FXNW5QbHh1WEhSY2RDQXFJRUJ0WlcxaVpYSlBaaUJ3ZFc1NVkyOWtaVnh1WEhSY2RDQXFJRUIwZVhCbElFOWlhbVZqZEZ4dVhIUmNkQ0FxTDF4dVhIUmNkQ2QxWTNNeUp6b2dlMXh1WEhSY2RGeDBKMlJsWTI5a1pTYzZJSFZqY3pKa1pXTnZaR1VzWEc1Y2RGeDBYSFFuWlc1amIyUmxKem9nZFdOek1tVnVZMjlrWlZ4dVhIUmNkSDBzWEc1Y2RGeDBKMlJsWTI5a1pTYzZJR1JsWTI5a1pTeGNibHgwWEhRblpXNWpiMlJsSnpvZ1pXNWpiMlJsTEZ4dVhIUmNkQ2QwYjBGVFEwbEpKem9nZEc5QlUwTkpTU3hjYmx4MFhIUW5kRzlWYm1samIyUmxKem9nZEc5VmJtbGpiMlJsWEc1Y2RIMDdYRzVjYmx4MEx5b3FJRVY0Y0c5elpTQmdjSFZ1ZVdOdlpHVmdJQ292WEc1Y2RDOHZJRk52YldVZ1FVMUVJR0oxYVd4a0lHOXdkR2x0YVhwbGNuTXNJR3hwYTJVZ2NpNXFjeXdnWTJobFkyc2dabTl5SUhOd1pXTnBabWxqSUdOdmJtUnBkR2x2YmlCd1lYUjBaWEp1YzF4dVhIUXZMeUJzYVd0bElIUm9aU0JtYjJ4c2IzZHBibWM2WEc1Y2RHbG1JQ2hjYmx4MFhIUjBlWEJsYjJZZ1pHVm1hVzVsSUQwOUlDZG1kVzVqZEdsdmJpY2dKaVpjYmx4MFhIUjBlWEJsYjJZZ1pHVm1hVzVsTG1GdFpDQTlQU0FuYjJKcVpXTjBKeUFtSmx4dVhIUmNkR1JsWm1sdVpTNWhiV1JjYmx4MEtTQjdYRzVjZEZ4MFpHVm1hVzVsS0Nkd2RXNTVZMjlrWlNjc0lHWjFibU4wYVc5dUtDa2dlMXh1WEhSY2RGeDBjbVYwZFhKdUlIQjFibmxqYjJSbE8xeHVYSFJjZEgwcE8xeHVYSFI5SUdWc2MyVWdhV1lnS0daeVpXVkZlSEJ2Y25SeklDWW1JQ0ZtY21WbFJYaHdiM0owY3k1dWIyUmxWSGx3WlNrZ2UxeHVYSFJjZEdsbUlDaG1jbVZsVFc5a2RXeGxLU0I3SUM4dklHbHVJRTV2WkdVdWFuTWdiM0lnVW1sdVoyOUtVeUIyTUM0NExqQXJYRzVjZEZ4MFhIUm1jbVZsVFc5a2RXeGxMbVY0Y0c5eWRITWdQU0J3ZFc1NVkyOWtaVHRjYmx4MFhIUjlJR1ZzYzJVZ2V5QXZMeUJwYmlCT1lYSjNhR0ZzSUc5eUlGSnBibWR2U2xNZ2RqQXVOeTR3TFZ4dVhIUmNkRngwWm05eUlDaHJaWGtnYVc0Z2NIVnVlV052WkdVcElIdGNibHgwWEhSY2RGeDBjSFZ1ZVdOdlpHVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2EyVjVLU0FtSmlBb1puSmxaVVY0Y0c5eWRITmJhMlY1WFNBOUlIQjFibmxqYjJSbFcydGxlVjBwTzF4dVhIUmNkRngwZlZ4dVhIUmNkSDFjYmx4MGZTQmxiSE5sSUhzZ0x5OGdhVzRnVW1ocGJtOGdiM0lnWVNCM1pXSWdZbkp2ZDNObGNseHVYSFJjZEhKdmIzUXVjSFZ1ZVdOdlpHVWdQU0J3ZFc1NVkyOWtaVHRjYmx4MGZWeHVYRzU5S0hSb2FYTXBLVHRjYmlKZGZRPT0iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsIihmdW5jdGlvbiAocHJvY2VzcyxnbG9iYWwpe1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBmb3JtYXRSZWdFeHAgPSAvJVtzZGolXS9nO1xuZXhwb3J0cy5mb3JtYXQgPSBmdW5jdGlvbihmKSB7XG4gIGlmICghaXNTdHJpbmcoZikpIHtcbiAgICB2YXIgb2JqZWN0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goaW5zcGVjdChhcmd1bWVudHNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdHMuam9pbignICcpO1xuICB9XG5cbiAgdmFyIGkgPSAxO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgc3RyID0gU3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLCBmdW5jdGlvbih4KSB7XG4gICAgaWYgKHggPT09ICclJScpIHJldHVybiAnJSc7XG4gICAgaWYgKGkgPj0gbGVuKSByZXR1cm4geDtcbiAgICBzd2l0Y2ggKHgpIHtcbiAgICAgIGNhc2UgJyVzJzogcmV0dXJuIFN0cmluZyhhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWQnOiByZXR1cm4gTnVtYmVyKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclaic6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3NbaSsrXSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICBmb3IgKHZhciB4ID0gYXJnc1tpXTsgaSA8IGxlbjsgeCA9IGFyZ3NbKytpXSkge1xuICAgIGlmIChpc051bGwoeCkgfHwgIWlzT2JqZWN0KHgpKSB7XG4gICAgICBzdHIgKz0gJyAnICsgeDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9ICcgJyArIGluc3BlY3QoeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8vIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4vLyBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuLy8gSWYgLS1uby1kZXByZWNhdGlvbiBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbmV4cG9ydHMuZGVwcmVjYXRlID0gZnVuY3Rpb24oZm4sIG1zZykge1xuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAoaXNVbmRlZmluZWQoZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLCBtc2cpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSlcbiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWljbTkzYzJWeWFXWjVMMjV2WkdWZmJXOWtkV3hsY3k5MWRHbHNMM1YwYVd3dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4dklFTnZjSGx5YVdkb2RDQktiM2xsYm5Rc0lFbHVZeTRnWVc1a0lHOTBhR1Z5SUU1dlpHVWdZMjl1ZEhKcFluVjBiM0p6TGx4dUx5OWNiaTh2SUZCbGNtMXBjM05wYjI0Z2FYTWdhR1Z5WldKNUlHZHlZVzUwWldRc0lHWnlaV1VnYjJZZ1kyaGhjbWRsTENCMGJ5QmhibmtnY0dWeWMyOXVJRzlpZEdGcGJtbHVaeUJoWEc0dkx5QmpiM0I1SUc5bUlIUm9hWE1nYzI5bWRIZGhjbVVnWVc1a0lHRnpjMjlqYVdGMFpXUWdaRzlqZFcxbGJuUmhkR2x2YmlCbWFXeGxjeUFvZEdobFhHNHZMeUJjSWxOdlpuUjNZWEpsWENJcExDQjBieUJrWldGc0lHbHVJSFJvWlNCVGIyWjBkMkZ5WlNCM2FYUm9iM1YwSUhKbGMzUnlhV04wYVc5dUxDQnBibU5zZFdScGJtZGNiaTh2SUhkcGRHaHZkWFFnYkdsdGFYUmhkR2x2YmlCMGFHVWdjbWxuYUhSeklIUnZJSFZ6WlN3Z1kyOXdlU3dnYlc5a2FXWjVMQ0J0WlhKblpTd2djSFZpYkdsemFDeGNiaTh2SUdScGMzUnlhV0oxZEdVc0lITjFZbXhwWTJWdWMyVXNJR0Z1WkM5dmNpQnpaV3hzSUdOdmNHbGxjeUJ2WmlCMGFHVWdVMjltZEhkaGNtVXNJR0Z1WkNCMGJ5QndaWEp0YVhSY2JpOHZJSEJsY25OdmJuTWdkRzhnZDJodmJTQjBhR1VnVTI5bWRIZGhjbVVnYVhNZ1puVnlibWx6YUdWa0lIUnZJR1J2SUhOdkxDQnpkV0pxWldOMElIUnZJSFJvWlZ4dUx5OGdabTlzYkc5M2FXNW5JR052Ym1ScGRHbHZibk02WEc0dkwxeHVMeThnVkdobElHRmliM1psSUdOdmNIbHlhV2RvZENCdWIzUnBZMlVnWVc1a0lIUm9hWE1nY0dWeWJXbHpjMmx2YmlCdWIzUnBZMlVnYzJoaGJHd2dZbVVnYVc1amJIVmtaV1JjYmk4dklHbHVJR0ZzYkNCamIzQnBaWE1nYjNJZ2MzVmljM1JoYm5ScFlXd2djRzl5ZEdsdmJuTWdiMllnZEdobElGTnZablIzWVhKbExseHVMeTljYmk4dklGUklSU0JUVDBaVVYwRlNSU0JKVXlCUVVrOVdTVVJGUkNCY0lrRlRJRWxUWENJc0lGZEpWRWhQVlZRZ1YwRlNVa0ZPVkZrZ1QwWWdRVTVaSUV0SlRrUXNJRVZZVUZKRlUxTmNiaTh2SUU5U0lFbE5VRXhKUlVRc0lFbE9RMHhWUkVsT1J5QkNWVlFnVGs5VUlFeEpUVWxVUlVRZ1ZFOGdWRWhGSUZkQlVsSkJUbFJKUlZNZ1QwWmNiaTh2SUUxRlVrTklRVTVVUVVKSlRFbFVXU3dnUmtsVVRrVlRVeUJHVDFJZ1FTQlFRVkpVU1VOVlRFRlNJRkJWVWxCUFUwVWdRVTVFSUU1UFRrbE9SbEpKVGtkRlRVVk9WQzRnU1U1Y2JpOHZJRTVQSUVWV1JVNVVJRk5JUVV4TUlGUklSU0JCVlZSSVQxSlRJRTlTSUVOUFVGbFNTVWRJVkNCSVQweEVSVkpUSUVKRklFeEpRVUpNUlNCR1QxSWdRVTVaSUVOTVFVbE5MRnh1THk4Z1JFRk5RVWRGVXlCUFVpQlBWRWhGVWlCTVNVRkNTVXhKVkZrc0lGZElSVlJJUlZJZ1NVNGdRVTRnUVVOVVNVOU9JRTlHSUVOUFRsUlNRVU5VTENCVVQxSlVJRTlTWEc0dkx5QlBWRWhGVWxkSlUwVXNJRUZTU1ZOSlRrY2dSbEpQVFN3Z1QxVlVJRTlHSUU5U0lFbE9JRU5QVGs1RlExUkpUMDRnVjBsVVNDQlVTRVVnVTA5R1ZGZEJVa1VnVDFJZ1ZFaEZYRzR2THlCVlUwVWdUMUlnVDFSSVJWSWdSRVZCVEVsT1IxTWdTVTRnVkVoRklGTlBSbFJYUVZKRkxseHVYRzUyWVhJZ1ptOXliV0YwVW1WblJYaHdJRDBnTHlWYmMyUnFKVjB2Wnp0Y2JtVjRjRzl5ZEhNdVptOXliV0YwSUQwZ1puVnVZM1JwYjI0b1ppa2dlMXh1SUNCcFppQW9JV2x6VTNSeWFXNW5LR1lwS1NCN1hHNGdJQ0FnZG1GeUlHOWlhbVZqZEhNZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2IySnFaV04wY3k1d2RYTm9LR2x1YzNCbFkzUW9ZWEpuZFcxbGJuUnpXMmxkS1NrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnZZbXBsWTNSekxtcHZhVzRvSnlBbktUdGNiaUFnZlZ4dVhHNGdJSFpoY2lCcElEMGdNVHRjYmlBZ2RtRnlJR0Z5WjNNZ1BTQmhjbWQxYldWdWRITTdYRzRnSUhaaGNpQnNaVzRnUFNCaGNtZHpMbXhsYm1kMGFEdGNiaUFnZG1GeUlITjBjaUE5SUZOMGNtbHVaeWhtS1M1eVpYQnNZV05sS0dadmNtMWhkRkpsWjBWNGNDd2dablZ1WTNScGIyNG9lQ2tnZTF4dUlDQWdJR2xtSUNoNElEMDlQU0FuSlNVbktTQnlaWFIxY200Z0p5VW5PMXh1SUNBZ0lHbG1JQ2hwSUQ0OUlHeGxiaWtnY21WMGRYSnVJSGc3WEc0Z0lDQWdjM2RwZEdOb0lDaDRLU0I3WEc0Z0lDQWdJQ0JqWVhObElDY2xjeWM2SUhKbGRIVnliaUJUZEhKcGJtY29ZWEpuYzF0cEt5dGRLVHRjYmlBZ0lDQWdJR05oYzJVZ0p5VmtKem9nY21WMGRYSnVJRTUxYldKbGNpaGhjbWR6VzJrcksxMHBPMXh1SUNBZ0lDQWdZMkZ6WlNBbkpXb25PbHh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQktVMDlPTG5OMGNtbHVaMmxtZVNoaGNtZHpXMmtySzEwcE8xeHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGZLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNkYlEybHlZM1ZzWVhKZEp6dGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIZzdYRzRnSUNBZ2ZWeHVJQ0I5S1R0Y2JpQWdabTl5SUNoMllYSWdlQ0E5SUdGeVozTmJhVjA3SUdrZ1BDQnNaVzQ3SUhnZ1BTQmhjbWR6V3lzcmFWMHBJSHRjYmlBZ0lDQnBaaUFvYVhOT2RXeHNLSGdwSUh4OElDRnBjMDlpYW1WamRDaDRLU2tnZTF4dUlDQWdJQ0FnYzNSeUlDczlJQ2NnSnlBcklIZzdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhOMGNpQXJQU0FuSUNjZ0t5QnBibk53WldOMEtIZ3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2MzUnlPMXh1ZlR0Y2JseHVYRzR2THlCTllYSnJJSFJvWVhRZ1lTQnRaWFJvYjJRZ2MyaHZkV3hrSUc1dmRDQmlaU0IxYzJWa0xseHVMeThnVW1WMGRYSnVjeUJoSUcxdlpHbG1hV1ZrSUdaMWJtTjBhVzl1SUhkb2FXTm9JSGRoY201eklHOXVZMlVnWW5rZ1pHVm1ZWFZzZEM1Y2JpOHZJRWxtSUMwdGJtOHRaR1Z3Y21WallYUnBiMjRnYVhNZ2MyVjBMQ0IwYUdWdUlHbDBJR2x6SUdFZ2JtOHRiM0F1WEc1bGVIQnZjblJ6TG1SbGNISmxZMkYwWlNBOUlHWjFibU4wYVc5dUtHWnVMQ0J0YzJjcElIdGNiaUFnTHk4Z1FXeHNiM2NnWm05eUlHUmxjSEpsWTJGMGFXNW5JSFJvYVc1bmN5QnBiaUIwYUdVZ2NISnZZMlZ6Y3lCdlppQnpkR0Z5ZEdsdVp5QjFjQzVjYmlBZ2FXWWdLR2x6Vlc1a1pXWnBibVZrS0dkc2IySmhiQzV3Y205alpYTnpLU2tnZTF4dUlDQWdJSEpsZEhWeWJpQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmxlSEJ2Y25SekxtUmxjSEpsWTJGMFpTaG1iaXdnYlhObktTNWhjSEJzZVNoMGFHbHpMQ0JoY21kMWJXVnVkSE1wTzF4dUlDQWdJSDA3WEc0Z0lIMWNibHh1SUNCcFppQW9jSEp2WTJWemN5NXViMFJsY0hKbFkyRjBhVzl1SUQwOVBTQjBjblZsS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1p1TzF4dUlDQjlYRzVjYmlBZ2RtRnlJSGRoY201bFpDQTlJR1poYkhObE8xeHVJQ0JtZFc1amRHbHZiaUJrWlhCeVpXTmhkR1ZrS0NrZ2UxeHVJQ0FnSUdsbUlDZ2hkMkZ5Ym1Wa0tTQjdYRzRnSUNBZ0lDQnBaaUFvY0hKdlkyVnpjeTUwYUhKdmQwUmxjSEpsWTJGMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWh0YzJjcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaHdjbTlqWlhOekxuUnlZV05sUkdWd2NtVmpZWFJwYjI0cElIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNTBjbUZqWlNodGMyY3BPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2lodGMyY3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkMkZ5Ym1Wa0lEMGdkSEoxWlR0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHWnVMbUZ3Y0d4NUtIUm9hWE1zSUdGeVozVnRaVzUwY3lrN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z1pHVndjbVZqWVhSbFpEdGNibjA3WEc1Y2JseHVkbUZ5SUdSbFluVm5jeUE5SUh0OU8xeHVkbUZ5SUdSbFluVm5SVzUyYVhKdmJqdGNibVY0Y0c5eWRITXVaR1ZpZFdkc2IyY2dQU0JtZFc1amRHbHZiaWh6WlhRcElIdGNiaUFnYVdZZ0tHbHpWVzVrWldacGJtVmtLR1JsWW5WblJXNTJhWEp2YmlrcFhHNGdJQ0FnWkdWaWRXZEZiblpwY205dUlEMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUVSVUpWUnlCOGZDQW5KenRjYmlBZ2MyVjBJRDBnYzJWMExuUnZWWEJ3WlhKRFlYTmxLQ2s3WEc0Z0lHbG1JQ2doWkdWaWRXZHpXM05sZEYwcElIdGNiaUFnSUNCcFppQW9ibVYzSUZKbFowVjRjQ2duWEZ4Y1hHSW5JQ3NnYzJWMElDc2dKMXhjWEZ4aUp5d2dKMmtuS1M1MFpYTjBLR1JsWW5WblJXNTJhWEp2YmlrcElIdGNiaUFnSUNBZ0lIWmhjaUJ3YVdRZ1BTQndjbTlqWlhOekxuQnBaRHRjYmlBZ0lDQWdJR1JsWW5WbmMxdHpaWFJkSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCdGMyY2dQU0JsZUhCdmNuUnpMbVp2Y20xaGRDNWhjSEJzZVNobGVIQnZjblJ6TENCaGNtZDFiV1Z1ZEhNcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0NjbGN5QWxaRG9nSlhNbkxDQnpaWFFzSUhCcFpDd2diWE5uS1R0Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR1JsWW5WbmMxdHpaWFJkSUQwZ1puVnVZM1JwYjI0b0tTQjdmVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHUmxZblZuYzF0elpYUmRPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVZqYUc5eklIUm9aU0IyWVd4MVpTQnZaaUJoSUhaaGJIVmxMaUJVY25seklIUnZJSEJ5YVc1MElIUm9aU0IyWVd4MVpTQnZkWFJjYmlBcUlHbHVJSFJvWlNCaVpYTjBJSGRoZVNCd2IzTnphV0pzWlNCbmFYWmxiaUIwYUdVZ1pHbG1abVZ5Wlc1MElIUjVjR1Z6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3VDJKcVpXTjBmU0J2WW1vZ1ZHaGxJRzlpYW1WamRDQjBieUJ3Y21sdWRDQnZkWFF1WEc0Z0tpQkFjR0Z5WVcwZ2UwOWlhbVZqZEgwZ2IzQjBjeUJQY0hScGIyNWhiQ0J2Y0hScGIyNXpJRzlpYW1WamRDQjBhR0YwSUdGc2RHVnljeUIwYUdVZ2IzVjBjSFYwTGx4dUlDb3ZYRzR2S2lCc1pXZGhZM2s2SUc5aWFpd2djMmh2ZDBocFpHUmxiaXdnWkdWd2RHZ3NJR052Ykc5eWN5b3ZYRzVtZFc1amRHbHZiaUJwYm5Od1pXTjBLRzlpYWl3Z2IzQjBjeWtnZTF4dUlDQXZMeUJrWldaaGRXeDBJRzl3ZEdsdmJuTmNiaUFnZG1GeUlHTjBlQ0E5SUh0Y2JpQWdJQ0J6WldWdU9pQmJYU3hjYmlBZ0lDQnpkSGxzYVhwbE9pQnpkSGxzYVhwbFRtOURiMnh2Y2x4dUlDQjlPMXh1SUNBdkx5QnNaV2RoWTNrdUxpNWNiaUFnYVdZZ0tHRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnZ1BqMGdNeWtnWTNSNExtUmxjSFJvSUQwZ1lYSm5kVzFsYm5Seld6SmRPMXh1SUNCcFppQW9ZWEpuZFcxbGJuUnpMbXhsYm1kMGFDQStQU0EwS1NCamRIZ3VZMjlzYjNKeklEMGdZWEpuZFcxbGJuUnpXek5kTzF4dUlDQnBaaUFvYVhOQ2IyOXNaV0Z1S0c5d2RITXBLU0I3WEc0Z0lDQWdMeThnYkdWbllXTjVMaTR1WEc0Z0lDQWdZM1I0TG5Ob2IzZElhV1JrWlc0Z1BTQnZjSFJ6TzF4dUlDQjlJR1ZzYzJVZ2FXWWdLRzl3ZEhNcElIdGNiaUFnSUNBdkx5Qm5iM1FnWVc0Z1hDSnZjSFJwYjI1elhDSWdiMkpxWldOMFhHNGdJQ0FnWlhod2IzSjBjeTVmWlhoMFpXNWtLR04wZUN3Z2IzQjBjeWs3WEc0Z0lIMWNiaUFnTHk4Z2MyVjBJR1JsWm1GMWJIUWdiM0IwYVc5dWMxeHVJQ0JwWmlBb2FYTlZibVJsWm1sdVpXUW9ZM1I0TG5Ob2IzZElhV1JrWlc0cEtTQmpkSGd1YzJodmQwaHBaR1JsYmlBOUlHWmhiSE5sTzF4dUlDQnBaaUFvYVhOVmJtUmxabWx1WldRb1kzUjRMbVJsY0hSb0tTa2dZM1I0TG1SbGNIUm9JRDBnTWp0Y2JpQWdhV1lnS0dselZXNWtaV1pwYm1Wa0tHTjBlQzVqYjJ4dmNuTXBLU0JqZEhndVkyOXNiM0p6SUQwZ1ptRnNjMlU3WEc0Z0lHbG1JQ2hwYzFWdVpHVm1hVzVsWkNoamRIZ3VZM1Z6ZEc5dFNXNXpjR1ZqZENrcElHTjBlQzVqZFhOMGIyMUpibk53WldOMElEMGdkSEoxWlR0Y2JpQWdhV1lnS0dOMGVDNWpiMnh2Y25NcElHTjBlQzV6ZEhsc2FYcGxJRDBnYzNSNWJHbDZaVmRwZEdoRGIyeHZjanRjYmlBZ2NtVjBkWEp1SUdadmNtMWhkRlpoYkhWbEtHTjBlQ3dnYjJKcUxDQmpkSGd1WkdWd2RHZ3BPMXh1ZlZ4dVpYaHdiM0owY3k1cGJuTndaV04wSUQwZ2FXNXpjR1ZqZER0Y2JseHVYRzR2THlCb2RIUndPaTh2Wlc0dWQybHJhWEJsWkdsaExtOXlaeTkzYVd0cEwwRk9VMGxmWlhOallYQmxYMk52WkdValozSmhjR2hwWTNOY2JtbHVjM0JsWTNRdVkyOXNiM0p6SUQwZ2UxeHVJQ0FuWW05c1pDY2dPaUJiTVN3Z01qSmRMRnh1SUNBbmFYUmhiR2xqSnlBNklGc3pMQ0F5TTEwc1hHNGdJQ2QxYm1SbGNteHBibVVuSURvZ1d6UXNJREkwWFN4Y2JpQWdKMmx1ZG1WeWMyVW5JRG9nV3pjc0lESTNYU3hjYmlBZ0ozZG9hWFJsSnlBNklGc3pOeXdnTXpsZExGeHVJQ0FuWjNKbGVTY2dPaUJiT1RBc0lETTVYU3hjYmlBZ0oySnNZV05ySnlBNklGc3pNQ3dnTXpsZExGeHVJQ0FuWW14MVpTY2dPaUJiTXpRc0lETTVYU3hjYmlBZ0oyTjVZVzRuSURvZ1d6TTJMQ0F6T1Ywc1hHNGdJQ2RuY21WbGJpY2dPaUJiTXpJc0lETTVYU3hjYmlBZ0oyMWhaMlZ1ZEdFbklEb2dXek0xTENBek9WMHNYRzRnSUNkeVpXUW5JRG9nV3pNeExDQXpPVjBzWEc0Z0lDZDVaV3hzYjNjbklEb2dXek16TENBek9WMWNibjA3WEc1Y2JpOHZJRVJ2YmlkMElIVnpaU0FuWW14MVpTY2dibTkwSUhacGMybGliR1VnYjI0Z1kyMWtMbVY0WlZ4dWFXNXpjR1ZqZEM1emRIbHNaWE1nUFNCN1hHNGdJQ2R6Y0dWamFXRnNKem9nSjJONVlXNG5MRnh1SUNBbmJuVnRZbVZ5SnpvZ0ozbGxiR3h2ZHljc1hHNGdJQ2RpYjI5c1pXRnVKem9nSjNsbGJHeHZkeWNzWEc0Z0lDZDFibVJsWm1sdVpXUW5PaUFuWjNKbGVTY3NYRzRnSUNkdWRXeHNKem9nSjJKdmJHUW5MRnh1SUNBbmMzUnlhVzVuSnpvZ0oyZHlaV1Z1Snl4Y2JpQWdKMlJoZEdVbk9pQW5iV0ZuWlc1MFlTY3NYRzRnSUM4dklGd2libUZ0WlZ3aU9pQnBiblJsYm5ScGIyNWhiR3g1SUc1dmRDQnpkSGxzYVc1blhHNGdJQ2R5WldkbGVIQW5PaUFuY21Wa0oxeHVmVHRjYmx4dVhHNW1kVzVqZEdsdmJpQnpkSGxzYVhwbFYybDBhRU52Ykc5eUtITjBjaXdnYzNSNWJHVlVlWEJsS1NCN1hHNGdJSFpoY2lCemRIbHNaU0E5SUdsdWMzQmxZM1F1YzNSNWJHVnpXM04wZVd4bFZIbHdaVjA3WEc1Y2JpQWdhV1lnS0hOMGVXeGxLU0I3WEc0Z0lDQWdjbVYwZFhKdUlDZGNYSFV3TURGaVd5Y2dLeUJwYm5Od1pXTjBMbU52Ykc5eWMxdHpkSGxzWlYxYk1GMGdLeUFuYlNjZ0t5QnpkSElnSzF4dUlDQWdJQ0FnSUNBZ0lDQW5YRngxTURBeFlsc25JQ3NnYVc1emNHVmpkQzVqYjJ4dmNuTmJjM1I1YkdWZFd6RmRJQ3NnSjIwbk8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCemRISTdYRzRnSUgxY2JuMWNibHh1WEc1bWRXNWpkR2x2YmlCemRIbHNhWHBsVG05RGIyeHZjaWh6ZEhJc0lITjBlV3hsVkhsd1pTa2dlMXh1SUNCeVpYUjFjbTRnYzNSeU8xeHVmVnh1WEc1Y2JtWjFibU4wYVc5dUlHRnljbUY1Vkc5SVlYTm9LR0Z5Y21GNUtTQjdYRzRnSUhaaGNpQm9ZWE5vSUQwZ2UzMDdYRzVjYmlBZ1lYSnlZWGt1Wm05eVJXRmphQ2htZFc1amRHbHZiaWgyWVd3c0lHbGtlQ2tnZTF4dUlDQWdJR2hoYzJoYmRtRnNYU0E5SUhSeWRXVTdYRzRnSUgwcE8xeHVYRzRnSUhKbGRIVnliaUJvWVhOb08xeHVmVnh1WEc1Y2JtWjFibU4wYVc5dUlHWnZjbTFoZEZaaGJIVmxLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5a2dlMXh1SUNBdkx5QlFjbTkyYVdSbElHRWdhRzl2YXlCbWIzSWdkWE5sY2kxemNHVmphV1pwWldRZ2FXNXpjR1ZqZENCbWRXNWpkR2x2Ym5NdVhHNGdJQzh2SUVOb1pXTnJJSFJvWVhRZ2RtRnNkV1VnYVhNZ1lXNGdiMkpxWldOMElIZHBkR2dnWVc0Z2FXNXpjR1ZqZENCbWRXNWpkR2x2YmlCdmJpQnBkRnh1SUNCcFppQW9ZM1I0TG1OMWMzUnZiVWx1YzNCbFkzUWdKaVpjYmlBZ0lDQWdJSFpoYkhWbElDWW1YRzRnSUNBZ0lDQnBjMFoxYm1OMGFXOXVLSFpoYkhWbExtbHVjM0JsWTNRcElDWW1YRzRnSUNBZ0lDQXZMeUJHYVd4MFpYSWdiM1YwSUhSb1pTQjFkR2xzSUcxdlpIVnNaU3dnYVhRbmN5QnBibk53WldOMElHWjFibU4wYVc5dUlHbHpJSE53WldOcFlXeGNiaUFnSUNBZ0lIWmhiSFZsTG1sdWMzQmxZM1FnSVQwOUlHVjRjRzl5ZEhNdWFXNXpjR1ZqZENBbUpseHVJQ0FnSUNBZ0x5OGdRV3h6YnlCbWFXeDBaWElnYjNWMElHRnVlU0J3Y205MGIzUjVjR1VnYjJKcVpXTjBjeUIxYzJsdVp5QjBhR1VnWTJseVkzVnNZWElnWTJobFkyc3VYRzRnSUNBZ0lDQWhLSFpoYkhWbExtTnZibk4wY25WamRHOXlJQ1ltSUhaaGJIVmxMbU52Ym5OMGNuVmpkRzl5TG5CeWIzUnZkSGx3WlNBOVBUMGdkbUZzZFdVcEtTQjdYRzRnSUNBZ2RtRnlJSEpsZENBOUlIWmhiSFZsTG1sdWMzQmxZM1FvY21WamRYSnpaVlJwYldWekxDQmpkSGdwTzF4dUlDQWdJR2xtSUNnaGFYTlRkSEpwYm1jb2NtVjBLU2tnZTF4dUlDQWdJQ0FnY21WMElEMGdabTl5YldGMFZtRnNkV1VvWTNSNExDQnlaWFFzSUhKbFkzVnljMlZVYVcxbGN5azdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJSDFjYmx4dUlDQXZMeUJRY21sdGFYUnBkbVVnZEhsd1pYTWdZMkZ1Ym05MElHaGhkbVVnY0hKdmNHVnlkR2xsYzF4dUlDQjJZWElnY0hKcGJXbDBhWFpsSUQwZ1ptOXliV0YwVUhKcGJXbDBhWFpsS0dOMGVDd2dkbUZzZFdVcE8xeHVJQ0JwWmlBb2NISnBiV2wwYVhabEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhCeWFXMXBkR2wyWlR0Y2JpQWdmVnh1WEc0Z0lDOHZJRXh2YjJzZ2RYQWdkR2hsSUd0bGVYTWdiMllnZEdobElHOWlhbVZqZEM1Y2JpQWdkbUZ5SUd0bGVYTWdQU0JQWW1wbFkzUXVhMlY1Y3loMllXeDFaU2s3WEc0Z0lIWmhjaUIyYVhOcFlteGxTMlY1Y3lBOUlHRnljbUY1Vkc5SVlYTm9LR3RsZVhNcE8xeHVYRzRnSUdsbUlDaGpkSGd1YzJodmQwaHBaR1JsYmlrZ2UxeHVJQ0FnSUd0bGVYTWdQU0JQWW1wbFkzUXVaMlYwVDNkdVVISnZjR1Z5ZEhsT1lXMWxjeWgyWVd4MVpTazdYRzRnSUgxY2JseHVJQ0F2THlCSlJTQmtiMlZ6YmlkMElHMWhhMlVnWlhKeWIzSWdabWxsYkdSeklHNXZiaTFsYm5WdFpYSmhZbXhsWEc0Z0lDOHZJR2gwZEhBNkx5OXRjMlJ1TG0xcFkzSnZjMjltZEM1amIyMHZaVzR0ZFhNdmJHbGljbUZ5ZVM5cFpTOWtkM2MxTW5OaWRDaDJQWFp6TGprMEtTNWhjM0I0WEc0Z0lHbG1JQ2hwYzBWeWNtOXlLSFpoYkhWbEtWeHVJQ0FnSUNBZ0ppWWdLR3RsZVhNdWFXNWtaWGhQWmlnbmJXVnpjMkZuWlNjcElENDlJREFnZkh3Z2EyVjVjeTVwYm1SbGVFOW1LQ2RrWlhOamNtbHdkR2x2YmljcElENDlJREFwS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1p2Y20xaGRFVnljbTl5S0haaGJIVmxLVHRjYmlBZ2ZWeHVYRzRnSUM4dklGTnZiV1VnZEhsd1pTQnZaaUJ2WW1wbFkzUWdkMmwwYUc5MWRDQndjbTl3WlhKMGFXVnpJR05oYmlCaVpTQnphRzl5ZEdOMWRIUmxaQzVjYmlBZ2FXWWdLR3RsZVhNdWJHVnVaM1JvSUQwOVBTQXdLU0I3WEc0Z0lDQWdhV1lnS0dselJuVnVZM1JwYjI0b2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNCMllYSWdibUZ0WlNBOUlIWmhiSFZsTG01aGJXVWdQeUFuT2lBbklDc2dkbUZzZFdVdWJtRnRaU0E2SUNjbk8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUdOMGVDNXpkSGxzYVhwbEtDZGJSblZ1WTNScGIyNG5JQ3NnYm1GdFpTQXJJQ2RkSnl3Z0ozTndaV05wWVd3bktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHbHpVbVZuUlhod0tIWmhiSFZsS1NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdOMGVDNXpkSGxzYVhwbEtGSmxaMFY0Y0M1d2NtOTBiM1I1Y0dVdWRHOVRkSEpwYm1jdVkyRnNiQ2gyWVd4MVpTa3NJQ2R5WldkbGVIQW5LVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLR2x6UkdGMFpTaDJZV3gxWlNrcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCamRIZ3VjM1I1YkdsNlpTaEVZWFJsTG5CeWIzUnZkSGx3WlM1MGIxTjBjbWx1Wnk1allXeHNLSFpoYkhWbEtTd2dKMlJoZEdVbktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHbHpSWEp5YjNJb2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWm05eWJXRjBSWEp5YjNJb2RtRnNkV1VwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhaaGNpQmlZWE5sSUQwZ0p5Y3NJR0Z5Y21GNUlEMGdabUZzYzJVc0lHSnlZV05sY3lBOUlGc25leWNzSUNkOUoxMDdYRzVjYmlBZ0x5OGdUV0ZyWlNCQmNuSmhlU0J6WVhrZ2RHaGhkQ0IwYUdWNUlHRnlaU0JCY25KaGVWeHVJQ0JwWmlBb2FYTkJjbkpoZVNoMllXeDFaU2twSUh0Y2JpQWdJQ0JoY25KaGVTQTlJSFJ5ZFdVN1hHNGdJQ0FnWW5KaFkyVnpJRDBnV3lkYkp5d2dKMTBuWFR0Y2JpQWdmVnh1WEc0Z0lDOHZJRTFoYTJVZ1puVnVZM1JwYjI1eklITmhlU0IwYUdGMElIUm9aWGtnWVhKbElHWjFibU4wYVc5dWMxeHVJQ0JwWmlBb2FYTkdkVzVqZEdsdmJpaDJZV3gxWlNrcElIdGNiaUFnSUNCMllYSWdiaUE5SUhaaGJIVmxMbTVoYldVZ1B5QW5PaUFuSUNzZ2RtRnNkV1V1Ym1GdFpTQTZJQ2NuTzF4dUlDQWdJR0poYzJVZ1BTQW5JRnRHZFc1amRHbHZiaWNnS3lCdUlDc2dKMTBuTzF4dUlDQjlYRzVjYmlBZ0x5OGdUV0ZyWlNCU1pXZEZlSEJ6SUhOaGVTQjBhR0YwSUhSb1pYa2dZWEpsSUZKbFowVjRjSE5jYmlBZ2FXWWdLR2x6VW1WblJYaHdLSFpoYkhWbEtTa2dlMXh1SUNBZ0lHSmhjMlVnUFNBbklDY2dLeUJTWldkRmVIQXVjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5MbU5oYkd3b2RtRnNkV1VwTzF4dUlDQjlYRzVjYmlBZ0x5OGdUV0ZyWlNCa1lYUmxjeUIzYVhSb0lIQnliM0JsY25ScFpYTWdabWx5YzNRZ2MyRjVJSFJvWlNCa1lYUmxYRzRnSUdsbUlDaHBjMFJoZEdVb2RtRnNkV1VwS1NCN1hHNGdJQ0FnWW1GelpTQTlJQ2NnSnlBcklFUmhkR1V1Y0hKdmRHOTBlWEJsTG5SdlZWUkRVM1J5YVc1bkxtTmhiR3dvZG1Gc2RXVXBPMXh1SUNCOVhHNWNiaUFnTHk4Z1RXRnJaU0JsY25KdmNpQjNhWFJvSUcxbGMzTmhaMlVnWm1seWMzUWdjMkY1SUhSb1pTQmxjbkp2Y2x4dUlDQnBaaUFvYVhORmNuSnZjaWgyWVd4MVpTa3BJSHRjYmlBZ0lDQmlZWE5sSUQwZ0p5QW5JQ3NnWm05eWJXRjBSWEp5YjNJb2RtRnNkV1VwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLR3RsZVhNdWJHVnVaM1JvSUQwOVBTQXdJQ1ltSUNnaFlYSnlZWGtnZkh3Z2RtRnNkV1V1YkdWdVozUm9JRDA5SURBcEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUdKeVlXTmxjMXN3WFNBcklHSmhjMlVnS3lCaWNtRmpaWE5iTVYwN1hHNGdJSDFjYmx4dUlDQnBaaUFvY21WamRYSnpaVlJwYldWeklEd2dNQ2tnZTF4dUlDQWdJR2xtSUNocGMxSmxaMFY0Y0NoMllXeDFaU2twSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJqZEhndWMzUjViR2w2WlNoU1pXZEZlSEF1Y0hKdmRHOTBlWEJsTG5SdlUzUnlhVzVuTG1OaGJHd29kbUZzZFdVcExDQW5jbVZuWlhod0p5azdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJqZEhndWMzUjViR2w2WlNnblcwOWlhbVZqZEYwbkxDQW5jM0JsWTJsaGJDY3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR04wZUM1elpXVnVMbkIxYzJnb2RtRnNkV1VwTzF4dVhHNGdJSFpoY2lCdmRYUndkWFE3WEc0Z0lHbG1JQ2hoY25KaGVTa2dlMXh1SUNBZ0lHOTFkSEIxZENBOUlHWnZjbTFoZEVGeWNtRjVLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5d2dkbWx6YVdKc1pVdGxlWE1zSUd0bGVYTXBPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJRzkxZEhCMWRDQTlJR3RsZVhNdWJXRndLR1oxYm1OMGFXOXVLR3RsZVNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdadmNtMWhkRkJ5YjNCbGNuUjVLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5d2dkbWx6YVdKc1pVdGxlWE1zSUd0bGVTd2dZWEp5WVhrcE8xeHVJQ0FnSUgwcE8xeHVJQ0I5WEc1Y2JpQWdZM1I0TG5ObFpXNHVjRzl3S0NrN1hHNWNiaUFnY21WMGRYSnVJSEpsWkhWalpWUnZVMmx1WjJ4bFUzUnlhVzVuS0c5MWRIQjFkQ3dnWW1GelpTd2dZbkpoWTJWektUdGNibjFjYmx4dVhHNW1kVzVqZEdsdmJpQm1iM0p0WVhSUWNtbHRhWFJwZG1Vb1kzUjRMQ0IyWVd4MVpTa2dlMXh1SUNCcFppQW9hWE5WYm1SbFptbHVaV1FvZG1Gc2RXVXBLVnh1SUNBZ0lISmxkSFZ5YmlCamRIZ3VjM1I1YkdsNlpTZ25kVzVrWldacGJtVmtKeXdnSjNWdVpHVm1hVzVsWkNjcE8xeHVJQ0JwWmlBb2FYTlRkSEpwYm1jb2RtRnNkV1VwS1NCN1hHNGdJQ0FnZG1GeUlITnBiWEJzWlNBOUlDZGNYQ2NuSUNzZ1NsTlBUaTV6ZEhKcGJtZHBabmtvZG1Gc2RXVXBMbkpsY0d4aFkyVW9MMTVjSW54Y0lpUXZaeXdnSnljcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVjbVZ3YkdGalpTZ3ZKeTluTENCY0lseGNYRnduWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVjbVZ3YkdGalpTZ3ZYRnhjWEZ3aUwyY3NJQ2RjSWljcElDc2dKMXhjSnljN1hHNGdJQ0FnY21WMGRYSnVJR04wZUM1emRIbHNhWHBsS0hOcGJYQnNaU3dnSjNOMGNtbHVaeWNwTzF4dUlDQjlYRzRnSUdsbUlDaHBjMDUxYldKbGNpaDJZV3gxWlNrcFhHNGdJQ0FnY21WMGRYSnVJR04wZUM1emRIbHNhWHBsS0NjbklDc2dkbUZzZFdVc0lDZHVkVzFpWlhJbktUdGNiaUFnYVdZZ0tHbHpRbTl2YkdWaGJpaDJZV3gxWlNrcFhHNGdJQ0FnY21WMGRYSnVJR04wZUM1emRIbHNhWHBsS0NjbklDc2dkbUZzZFdVc0lDZGliMjlzWldGdUp5azdYRzRnSUM4dklFWnZjaUJ6YjIxbElISmxZWE52YmlCMGVYQmxiMllnYm5Wc2JDQnBjeUJjSW05aWFtVmpkRndpTENCemJ5QnpjR1ZqYVdGc0lHTmhjMlVnYUdWeVpTNWNiaUFnYVdZZ0tHbHpUblZzYkNoMllXeDFaU2twWEc0Z0lDQWdjbVYwZFhKdUlHTjBlQzV6ZEhsc2FYcGxLQ2R1ZFd4c0p5d2dKMjUxYkd3bktUdGNibjFjYmx4dVhHNW1kVzVqZEdsdmJpQm1iM0p0WVhSRmNuSnZjaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnSjFzbklDc2dSWEp5YjNJdWNISnZkRzkwZVhCbExuUnZVM1J5YVc1bkxtTmhiR3dvZG1Gc2RXVXBJQ3NnSjEwbk8xeHVmVnh1WEc1Y2JtWjFibU4wYVc5dUlHWnZjbTFoZEVGeWNtRjVLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5d2dkbWx6YVdKc1pVdGxlWE1zSUd0bGVYTXBJSHRjYmlBZ2RtRnlJRzkxZEhCMWRDQTlJRnRkTzF4dUlDQm1iM0lnS0haaGNpQnBJRDBnTUN3Z2JDQTlJSFpoYkhWbExteGxibWQwYURzZ2FTQThJR3c3SUNzcmFTa2dlMXh1SUNBZ0lHbG1JQ2hvWVhOUGQyNVFjbTl3WlhKMGVTaDJZV3gxWlN3Z1UzUnlhVzVuS0drcEtTa2dlMXh1SUNBZ0lDQWdiM1YwY0hWMExuQjFjMmdvWm05eWJXRjBVSEp2Y0dWeWRIa29ZM1I0TENCMllXeDFaU3dnY21WamRYSnpaVlJwYldWekxDQjJhWE5wWW14bFMyVjVjeXhjYmlBZ0lDQWdJQ0FnSUNCVGRISnBibWNvYVNrc0lIUnlkV1VwS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdiM1YwY0hWMExuQjFjMmdvSnljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCclpYbHpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9hMlY1S1NCN1hHNGdJQ0FnYVdZZ0tDRnJaWGt1YldGMFkyZ29MMTVjWEdRckpDOHBLU0I3WEc0Z0lDQWdJQ0J2ZFhSd2RYUXVjSFZ6YUNobWIzSnRZWFJRY205d1pYSjBlU2hqZEhnc0lIWmhiSFZsTENCeVpXTjFjbk5sVkdsdFpYTXNJSFpwYzJsaWJHVkxaWGx6TEZ4dUlDQWdJQ0FnSUNBZ0lHdGxlU3dnZEhKMVpTa3BPMXh1SUNBZ0lIMWNiaUFnZlNrN1hHNGdJSEpsZEhWeWJpQnZkWFJ3ZFhRN1hHNTlYRzVjYmx4dVpuVnVZM1JwYjI0Z1ptOXliV0YwVUhKdmNHVnlkSGtvWTNSNExDQjJZV3gxWlN3Z2NtVmpkWEp6WlZScGJXVnpMQ0IyYVhOcFlteGxTMlY1Y3l3Z2EyVjVMQ0JoY25KaGVTa2dlMXh1SUNCMllYSWdibUZ0WlN3Z2MzUnlMQ0JrWlhOak8xeHVJQ0JrWlhOaklEMGdUMkpxWldOMExtZGxkRTkzYmxCeWIzQmxjblI1UkdWelkzSnBjSFJ2Y2loMllXeDFaU3dnYTJWNUtTQjhmQ0I3SUhaaGJIVmxPaUIyWVd4MVpWdHJaWGxkSUgwN1hHNGdJR2xtSUNoa1pYTmpMbWRsZENrZ2UxeHVJQ0FnSUdsbUlDaGtaWE5qTG5ObGRDa2dlMXh1SUNBZ0lDQWdjM1J5SUQwZ1kzUjRMbk4wZVd4cGVtVW9KMXRIWlhSMFpYSXZVMlYwZEdWeVhTY3NJQ2R6Y0dWamFXRnNKeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lITjBjaUE5SUdOMGVDNXpkSGxzYVhwbEtDZGJSMlYwZEdWeVhTY3NJQ2R6Y0dWamFXRnNKeWs3WEc0Z0lDQWdmVnh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR2xtSUNoa1pYTmpMbk5sZENrZ2UxeHVJQ0FnSUNBZ2MzUnlJRDBnWTNSNExuTjBlV3hwZW1Vb0oxdFRaWFIwWlhKZEp5d2dKM053WldOcFlXd25LVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdhV1lnS0NGb1lYTlBkMjVRY205d1pYSjBlU2gyYVhOcFlteGxTMlY1Y3l3Z2EyVjVLU2tnZTF4dUlDQWdJRzVoYldVZ1BTQW5XeWNnS3lCclpYa2dLeUFuWFNjN1hHNGdJSDFjYmlBZ2FXWWdLQ0Z6ZEhJcElIdGNiaUFnSUNCcFppQW9ZM1I0TG5ObFpXNHVhVzVrWlhoUFppaGtaWE5qTG5aaGJIVmxLU0E4SURBcElIdGNiaUFnSUNBZ0lHbG1JQ2hwYzA1MWJHd29jbVZqZFhKelpWUnBiV1Z6S1NrZ2UxeHVJQ0FnSUNBZ0lDQnpkSElnUFNCbWIzSnRZWFJXWVd4MVpTaGpkSGdzSUdSbGMyTXVkbUZzZFdVc0lHNTFiR3dwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYzNSeUlEMGdabTl5YldGMFZtRnNkV1VvWTNSNExDQmtaWE5qTG5aaGJIVmxMQ0J5WldOMWNuTmxWR2x0WlhNZ0xTQXhLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoemRISXVhVzVrWlhoUFppZ25YRnh1SnlrZ1BpQXRNU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9ZWEp5WVhrcElIdGNiaUFnSUNBZ0lDQWdJQ0J6ZEhJZ1BTQnpkSEl1YzNCc2FYUW9KMXhjYmljcExtMWhjQ2htZFc1amRHbHZiaWhzYVc1bEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlBZ0p5QXJJR3hwYm1VN1hHNGdJQ0FnSUNBZ0lDQWdmU2t1YW05cGJpZ25YRnh1SnlrdWMzVmljM1J5S0RJcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJSE4wY2lBOUlDZGNYRzRuSUNzZ2MzUnlMbk53YkdsMEtDZGNYRzRuS1M1dFlYQW9ablZ1WTNScGIyNG9iR2x1WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NnSUNBbklDc2diR2x1WlR0Y2JpQWdJQ0FnSUNBZ0lDQjlLUzVxYjJsdUtDZGNYRzRuS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J6ZEhJZ1BTQmpkSGd1YzNSNWJHbDZaU2duVzBOcGNtTjFiR0Z5WFNjc0lDZHpjR1ZqYVdGc0p5azdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lHbG1JQ2hwYzFWdVpHVm1hVzVsWkNodVlXMWxLU2tnZTF4dUlDQWdJR2xtSUNoaGNuSmhlU0FtSmlCclpYa3ViV0YwWTJnb0wxNWNYR1FySkM4cEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2MzUnlPMXh1SUNBZ0lIMWNiaUFnSUNCdVlXMWxJRDBnU2xOUFRpNXpkSEpwYm1kcFpua29KeWNnS3lCclpYa3BPMXh1SUNBZ0lHbG1JQ2h1WVcxbExtMWhkR05vS0M5ZVhDSW9XMkV0ZWtFdFdsOWRXMkV0ZWtFdFdsOHdMVGxkS2lsY0lpUXZLU2tnZTF4dUlDQWdJQ0FnYm1GdFpTQTlJRzVoYldVdWMzVmljM1J5S0RFc0lHNWhiV1V1YkdWdVozUm9JQzBnTWlrN1hHNGdJQ0FnSUNCdVlXMWxJRDBnWTNSNExuTjBlV3hwZW1Vb2JtRnRaU3dnSjI1aGJXVW5LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2JtRnRaU0E5SUc1aGJXVXVjbVZ3YkdGalpTZ3ZKeTluTENCY0lseGNYRnduWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDNXlaWEJzWVdObEtDOWNYRnhjWENJdlp5d2dKMXdpSnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0xuSmxjR3hoWTJVb0x5aGVYQ0o4WENJa0tTOW5MQ0JjSWlkY0lpazdYRzRnSUNBZ0lDQnVZVzFsSUQwZ1kzUjRMbk4wZVd4cGVtVW9ibUZ0WlN3Z0ozTjBjbWx1WnljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCdVlXMWxJQ3NnSnpvZ0p5QXJJSE4wY2p0Y2JuMWNibHh1WEc1bWRXNWpkR2x2YmlCeVpXUjFZMlZVYjFOcGJtZHNaVk4wY21sdVp5aHZkWFJ3ZFhRc0lHSmhjMlVzSUdKeVlXTmxjeWtnZTF4dUlDQjJZWElnYm5WdFRHbHVaWE5GYzNRZ1BTQXdPMXh1SUNCMllYSWdiR1Z1WjNSb0lEMGdiM1YwY0hWMExuSmxaSFZqWlNobWRXNWpkR2x2Ymlod2NtVjJMQ0JqZFhJcElIdGNiaUFnSUNCdWRXMU1hVzVsYzBWemRDc3JPMXh1SUNBZ0lHbG1JQ2hqZFhJdWFXNWtaWGhQWmlnblhGeHVKeWtnUGowZ01Da2diblZ0VEdsdVpYTkZjM1FyS3p0Y2JpQWdJQ0J5WlhSMWNtNGdjSEpsZGlBcklHTjFjaTV5WlhCc1lXTmxLQzljWEhVd01ERmlYRnhiWEZ4a1hGeGtQMjB2Wnl3Z0p5Y3BMbXhsYm1kMGFDQXJJREU3WEc0Z0lIMHNJREFwTzF4dVhHNGdJR2xtSUNoc1pXNW5kR2dnUGlBMk1Da2dlMXh1SUNBZ0lISmxkSFZ5YmlCaWNtRmpaWE5iTUYwZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FvWW1GelpTQTlQVDBnSnljZ1B5QW5KeUE2SUdKaGMyVWdLeUFuWEZ4dUlDY3BJQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0p5QW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ2IzVjBjSFYwTG1wdmFXNG9KeXhjWEc0Z0lDY3BJQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0p5QW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ1luSmhZMlZ6V3pGZE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHSnlZV05sYzFzd1hTQXJJR0poYzJVZ0t5QW5JQ2NnS3lCdmRYUndkWFF1YW05cGJpZ25MQ0FuS1NBcklDY2dKeUFySUdKeVlXTmxjMXN4WFR0Y2JuMWNibHh1WEc0dkx5Qk9UMVJGT2lCVWFHVnpaU0IwZVhCbElHTm9aV05yYVc1bklHWjFibU4wYVc5dWN5QnBiblJsYm5ScGIyNWhiR3g1SUdSdmJpZDBJSFZ6WlNCZ2FXNXpkR0Z1WTJWdlptQmNiaTh2SUdKbFkyRjFjMlVnYVhRZ2FYTWdabkpoWjJsc1pTQmhibVFnWTJGdUlHSmxJR1ZoYzJsc2VTQm1ZV3RsWkNCM2FYUm9JR0JQWW1wbFkzUXVZM0psWVhSbEtDbGdMbHh1Wm5WdVkzUnBiMjRnYVhOQmNuSmhlU2hoY2lrZ2UxeHVJQ0J5WlhSMWNtNGdRWEp5WVhrdWFYTkJjbkpoZVNoaGNpazdYRzU5WEc1bGVIQnZjblJ6TG1selFYSnlZWGtnUFNCcGMwRnljbUY1TzF4dVhHNW1kVzVqZEdsdmJpQnBjMEp2YjJ4bFlXNG9ZWEpuS1NCN1hHNGdJSEpsZEhWeWJpQjBlWEJsYjJZZ1lYSm5JRDA5UFNBblltOXZiR1ZoYmljN1hHNTlYRzVsZUhCdmNuUnpMbWx6UW05dmJHVmhiaUE5SUdselFtOXZiR1ZoYmp0Y2JseHVablZ1WTNScGIyNGdhWE5PZFd4c0tHRnlaeWtnZTF4dUlDQnlaWFIxY200Z1lYSm5JRDA5UFNCdWRXeHNPMXh1ZlZ4dVpYaHdiM0owY3k1cGMwNTFiR3dnUFNCcGMwNTFiR3c3WEc1Y2JtWjFibU4wYVc5dUlHbHpUblZzYkU5eVZXNWtaV1pwYm1Wa0tHRnlaeWtnZTF4dUlDQnlaWFIxY200Z1lYSm5JRDA5SUc1MWJHdzdYRzU5WEc1bGVIQnZjblJ6TG1selRuVnNiRTl5Vlc1a1pXWnBibVZrSUQwZ2FYTk9kV3hzVDNKVmJtUmxabWx1WldRN1hHNWNibVoxYm1OMGFXOXVJR2x6VG5WdFltVnlLR0Z5WnlrZ2UxeHVJQ0J5WlhSMWNtNGdkSGx3Wlc5bUlHRnlaeUE5UFQwZ0oyNTFiV0psY2ljN1hHNTlYRzVsZUhCdmNuUnpMbWx6VG5WdFltVnlJRDBnYVhOT2RXMWlaWEk3WEc1Y2JtWjFibU4wYVc5dUlHbHpVM1J5YVc1bktHRnlaeWtnZTF4dUlDQnlaWFIxY200Z2RIbHdaVzltSUdGeVp5QTlQVDBnSjNOMGNtbHVaeWM3WEc1OVhHNWxlSEJ2Y25SekxtbHpVM1J5YVc1bklEMGdhWE5UZEhKcGJtYzdYRzVjYm1aMWJtTjBhVzl1SUdselUzbHRZbTlzS0dGeVp5a2dlMXh1SUNCeVpYUjFjbTRnZEhsd1pXOW1JR0Z5WnlBOVBUMGdKM041YldKdmJDYzdYRzU5WEc1bGVIQnZjblJ6TG1selUzbHRZbTlzSUQwZ2FYTlRlVzFpYjJ3N1hHNWNibVoxYm1OMGFXOXVJR2x6Vlc1a1pXWnBibVZrS0dGeVp5a2dlMXh1SUNCeVpYUjFjbTRnWVhKbklEMDlQU0IyYjJsa0lEQTdYRzU5WEc1bGVIQnZjblJ6TG1selZXNWtaV1pwYm1Wa0lEMGdhWE5WYm1SbFptbHVaV1E3WEc1Y2JtWjFibU4wYVc5dUlHbHpVbVZuUlhod0tISmxLU0I3WEc0Z0lISmxkSFZ5YmlCcGMwOWlhbVZqZENoeVpTa2dKaVlnYjJKcVpXTjBWRzlUZEhKcGJtY29jbVVwSUQwOVBTQW5XMjlpYW1WamRDQlNaV2RGZUhCZEp6dGNibjFjYm1WNGNHOXlkSE11YVhOU1pXZEZlSEFnUFNCcGMxSmxaMFY0Y0R0Y2JseHVablZ1WTNScGIyNGdhWE5QWW1wbFkzUW9ZWEpuS1NCN1hHNGdJSEpsZEhWeWJpQjBlWEJsYjJZZ1lYSm5JRDA5UFNBbmIySnFaV04wSnlBbUppQmhjbWNnSVQwOUlHNTFiR3c3WEc1OVhHNWxlSEJ2Y25SekxtbHpUMkpxWldOMElEMGdhWE5QWW1wbFkzUTdYRzVjYm1aMWJtTjBhVzl1SUdselJHRjBaU2hrS1NCN1hHNGdJSEpsZEhWeWJpQnBjMDlpYW1WamRDaGtLU0FtSmlCdlltcGxZM1JVYjFOMGNtbHVaeWhrS1NBOVBUMGdKMXR2WW1wbFkzUWdSR0YwWlYwbk8xeHVmVnh1Wlhod2IzSjBjeTVwYzBSaGRHVWdQU0JwYzBSaGRHVTdYRzVjYm1aMWJtTjBhVzl1SUdselJYSnliM0lvWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhWE5QWW1wbFkzUW9aU2tnSmlaY2JpQWdJQ0FnSUNodlltcGxZM1JVYjFOMGNtbHVaeWhsS1NBOVBUMGdKMXR2WW1wbFkzUWdSWEp5YjNKZEp5QjhmQ0JsSUdsdWMzUmhibU5sYjJZZ1JYSnliM0lwTzF4dWZWeHVaWGh3YjNKMGN5NXBjMFZ5Y205eUlEMGdhWE5GY25KdmNqdGNibHh1Wm5WdVkzUnBiMjRnYVhOR2RXNWpkR2x2YmloaGNtY3BJSHRjYmlBZ2NtVjBkWEp1SUhSNWNHVnZaaUJoY21jZ1BUMDlJQ2RtZFc1amRHbHZiaWM3WEc1OVhHNWxlSEJ2Y25SekxtbHpSblZ1WTNScGIyNGdQU0JwYzBaMWJtTjBhVzl1TzF4dVhHNW1kVzVqZEdsdmJpQnBjMUJ5YVcxcGRHbDJaU2hoY21jcElIdGNiaUFnY21WMGRYSnVJR0Z5WnlBOVBUMGdiblZzYkNCOGZGeHVJQ0FnSUNBZ0lDQWdkSGx3Wlc5bUlHRnlaeUE5UFQwZ0oySnZiMnhsWVc0bklIeDhYRzRnSUNBZ0lDQWdJQ0IwZVhCbGIyWWdZWEpuSUQwOVBTQW5iblZ0WW1WeUp5QjhmRnh1SUNBZ0lDQWdJQ0FnZEhsd1pXOW1JR0Z5WnlBOVBUMGdKM04wY21sdVp5Y2dmSHhjYmlBZ0lDQWdJQ0FnSUhSNWNHVnZaaUJoY21jZ1BUMDlJQ2R6ZVcxaWIyd25JSHg4SUNBdkx5QkZVellnYzNsdFltOXNYRzRnSUNBZ0lDQWdJQ0IwZVhCbGIyWWdZWEpuSUQwOVBTQW5kVzVrWldacGJtVmtKenRjYm4xY2JtVjRjRzl5ZEhNdWFYTlFjbWx0YVhScGRtVWdQU0JwYzFCeWFXMXBkR2wyWlR0Y2JseHVaWGh3YjNKMGN5NXBjMEoxWm1abGNpQTlJSEpsY1hWcGNtVW9KeTR2YzNWd2NHOXlkQzlwYzBKMVptWmxjaWNwTzF4dVhHNW1kVzVqZEdsdmJpQnZZbXBsWTNSVWIxTjBjbWx1WnlodktTQjdYRzRnSUhKbGRIVnliaUJQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5MbU5oYkd3b2J5azdYRzU5WEc1Y2JseHVablZ1WTNScGIyNGdjR0ZrS0c0cElIdGNiaUFnY21WMGRYSnVJRzRnUENBeE1DQS9JQ2N3SnlBcklHNHVkRzlUZEhKcGJtY29NVEFwSURvZ2JpNTBiMU4wY21sdVp5Z3hNQ2s3WEc1OVhHNWNibHh1ZG1GeUlHMXZiblJvY3lBOUlGc25TbUZ1Snl3Z0owWmxZaWNzSUNkTllYSW5MQ0FuUVhCeUp5d2dKMDFoZVNjc0lDZEtkVzRuTENBblNuVnNKeXdnSjBGMVp5Y3NJQ2RUWlhBbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBblQyTjBKeXdnSjA1dmRpY3NJQ2RFWldNblhUdGNibHh1THk4Z01qWWdSbVZpSURFMk9qRTVPak0wWEc1bWRXNWpkR2x2YmlCMGFXMWxjM1JoYlhBb0tTQjdYRzRnSUhaaGNpQmtJRDBnYm1WM0lFUmhkR1VvS1R0Y2JpQWdkbUZ5SUhScGJXVWdQU0JiY0dGa0tHUXVaMlYwU0c5MWNuTW9LU2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoWkNoa0xtZGxkRTFwYm5WMFpYTW9LU2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoWkNoa0xtZGxkRk5sWTI5dVpITW9LU2xkTG1wdmFXNG9Kem9uS1R0Y2JpQWdjbVYwZFhKdUlGdGtMbWRsZEVSaGRHVW9LU3dnYlc5dWRHaHpXMlF1WjJWMFRXOXVkR2dvS1Ywc0lIUnBiV1ZkTG1wdmFXNG9KeUFuS1R0Y2JuMWNibHh1WEc0dkx5QnNiMmNnYVhNZ2FuVnpkQ0JoSUhSb2FXNGdkM0poY0hCbGNpQjBieUJqYjI1emIyeGxMbXh2WnlCMGFHRjBJSEJ5WlhCbGJtUnpJR0VnZEdsdFpYTjBZVzF3WEc1bGVIQnZjblJ6TG14dlp5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQmpiMjV6YjJ4bExteHZaeWduSlhNZ0xTQWxjeWNzSUhScGJXVnpkR0Z0Y0NncExDQmxlSEJ2Y25SekxtWnZjbTFoZEM1aGNIQnNlU2hsZUhCdmNuUnpMQ0JoY21kMWJXVnVkSE1wS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCSmJtaGxjbWwwSUhSb1pTQndjbTkwYjNSNWNHVWdiV1YwYUc5a2N5Qm1jbTl0SUc5dVpTQmpiMjV6ZEhKMVkzUnZjaUJwYm5SdklHRnViM1JvWlhJdVhHNGdLbHh1SUNvZ1ZHaGxJRVoxYm1OMGFXOXVMbkJ5YjNSdmRIbHdaUzVwYm1obGNtbDBjeUJtY205dElHeGhibWN1YW5NZ2NtVjNjbWwwZEdWdUlHRnpJR0VnYzNSaGJtUmhiRzl1WlZ4dUlDb2dablZ1WTNScGIyNGdLRzV2ZENCdmJpQkdkVzVqZEdsdmJpNXdjbTkwYjNSNWNHVXBMaUJPVDFSRk9pQkpaaUIwYUdseklHWnBiR1VnYVhNZ2RHOGdZbVVnYkc5aFpHVmtYRzRnS2lCa2RYSnBibWNnWW05dmRITjBjbUZ3Y0dsdVp5QjBhR2x6SUdaMWJtTjBhVzl1SUc1bFpXUnpJSFJ2SUdKbElISmxkM0pwZEhSbGJpQjFjMmx1WnlCemIyMWxJRzVoZEdsMlpWeHVJQ29nWm5WdVkzUnBiMjV6SUdGeklIQnliM1J2ZEhsd1pTQnpaWFIxY0NCMWMybHVaeUJ1YjNKdFlXd2dTbUYyWVZOamNtbHdkQ0JrYjJWeklHNXZkQ0IzYjNKcklHRnpYRzRnS2lCbGVIQmxZM1JsWkNCa2RYSnBibWNnWW05dmRITjBjbUZ3Y0dsdVp5QW9jMlZsSUcxcGNuSnZjaTVxY3lCcGJpQnlNVEUwT1RBektTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQmpkRzl5SUVOdmJuTjBjblZqZEc5eUlHWjFibU4wYVc5dUlIZG9hV05vSUc1bFpXUnpJSFJ2SUdsdWFHVnlhWFFnZEdobFhHNGdLaUFnSUNBZ2NISnZkRzkwZVhCbExseHVJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnYzNWd1pYSkRkRzl5SUVOdmJuTjBjblZqZEc5eUlHWjFibU4wYVc5dUlIUnZJR2x1YUdWeWFYUWdjSEp2ZEc5MGVYQmxJR1p5YjIwdVhHNGdLaTljYm1WNGNHOXlkSE11YVc1b1pYSnBkSE1nUFNCeVpYRjFhWEpsS0NkcGJtaGxjbWwwY3ljcE8xeHVYRzVsZUhCdmNuUnpMbDlsZUhSbGJtUWdQU0JtZFc1amRHbHZiaWh2Y21sbmFXNHNJR0ZrWkNrZ2UxeHVJQ0F2THlCRWIyNG5kQ0JrYnlCaGJubDBhR2x1WnlCcFppQmhaR1FnYVhOdUozUWdZVzRnYjJKcVpXTjBYRzRnSUdsbUlDZ2hZV1JrSUh4OElDRnBjMDlpYW1WamRDaGhaR1FwS1NCeVpYUjFjbTRnYjNKcFoybHVPMXh1WEc0Z0lIWmhjaUJyWlhseklEMGdUMkpxWldOMExtdGxlWE1vWVdSa0tUdGNiaUFnZG1GeUlHa2dQU0JyWlhsekxteGxibWQwYUR0Y2JpQWdkMmhwYkdVZ0tHa3RMU2tnZTF4dUlDQWdJRzl5YVdkcGJsdHJaWGx6VzJsZFhTQTlJR0ZrWkZ0clpYbHpXMmxkWFR0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjNKcFoybHVPMXh1ZlR0Y2JseHVablZ1WTNScGIyNGdhR0Z6VDNkdVVISnZjR1Z5ZEhrb2IySnFMQ0J3Y205d0tTQjdYRzRnSUhKbGRIVnliaUJQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMbWhoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvYjJKcUxDQndjbTl3S1R0Y2JuMWNiaUpkZlE9PSIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDE0IERhbiBUYW8gPGRhbmllbC50YW9AZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgQW5kcmV3IEVpc2VuYmVyZyA8YW5kcmV3QGVpc2VuYmVyZy5hcz5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0eXBlZCxcbiAgICAgICAgdXRpbGl0eSxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgICAganNkb2MsXG4gICAgICAgIGVzdXRpbHMsXG4gICAgICAgIGhhc093blByb3BlcnR5O1xuXG4gICAgZXN1dGlscyA9IHJlcXVpcmUoJ2VzdXRpbHMnKTtcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuICAgIHR5cGVkID0gcmVxdWlyZSgnLi90eXBlZCcpO1xuICAgIHV0aWxpdHkgPSByZXF1aXJlKCcuL3V0aWxpdHknKTtcblxuICAgIGZ1bmN0aW9uIHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIGxhc3QpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZShpbmRleCwgbGFzdCk7XG4gICAgfVxuXG4gICAgaGFzT3duUHJvcGVydHkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZnVuYyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwob2JqLCBuYW1lKTtcbiAgICAgICAgfTtcbiAgICB9KCkpO1xuXG4gICAgZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7XG4gICAgICAgIHZhciByZXQgPSB7fSwga2V5O1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FTQ0lJQWxwaGFudW1lcmljKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPj0gMHg2MSAgLyogJ2EnICovICYmIGNoIDw9IDB4N0EgIC8qICd6JyAqLykgfHxcbiAgICAgICAgICAgIChjaCA+PSAweDQxICAvKiAnQScgKi8gJiYgY2ggPD0gMHg1QSAgLyogJ1onICovKSB8fFxuICAgICAgICAgICAgKGNoID49IDB4MzAgIC8qICcwJyAqLyAmJiBjaCA8PSAweDM5ICAvKiAnOScgKi8pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUGFyYW1UaXRsZSh0aXRsZSkge1xuICAgICAgICByZXR1cm4gdGl0bGUgPT09ICdwYXJhbScgfHwgdGl0bGUgPT09ICdhcmd1bWVudCcgfHwgdGl0bGUgPT09ICdhcmcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUHJvcGVydHkodGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIHRpdGxlID09PSAncHJvcGVydHknIHx8IHRpdGxlID09PSAncHJvcCc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIGlzUGFyYW1UaXRsZSh0aXRsZSkgfHwgaXNQcm9wZXJ0eSh0aXRsZSkgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAnYWxpYXMnIHx8IHRpdGxlID09PSAndGhpcycgfHwgdGl0bGUgPT09ICdtaXhlcycgfHwgdGl0bGUgPT09ICdyZXF1aXJlcyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBbGxvd2VkTmFtZSh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHx8IHRpdGxlID09PSAnY29uc3QnIHx8IHRpdGxlID09PSAnY29uc3RhbnQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWxsb3dlZE5lc3RlZCh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNQcm9wZXJ0eSh0aXRsZSkgfHwgaXNQYXJhbVRpdGxlKHRpdGxlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNQYXJhbVRpdGxlKHRpdGxlKSB8fCB0aXRsZSA9PT0gJ2RlZmluZScgfHwgdGl0bGUgPT09ICdlbnVtJyB8fFxuICAgICAgICAgICAgdGl0bGUgPT09ICdpbXBsZW1lbnRzJyB8fCB0aXRsZSA9PT0gJ3JldHVybicgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAndGhpcycgfHwgdGl0bGUgPT09ICd0eXBlJyB8fCB0aXRsZSA9PT0gJ3R5cGVkZWYnIHx8XG4gICAgICAgICAgICB0aXRsZSA9PT0gJ3JldHVybnMnIHx8IGlzUHJvcGVydHkodGl0bGUpO1xuICAgIH1cblxuICAgIC8vIENvbnNpZGVyIGRlcHJlY2F0aW9uIGluc3RlYWQgdXNpbmcgJ2lzVHlwZVBhcmFtZXRlclJlcXVpcmVkJyBhbmQgJ1J1bGVzJyBkZWNsYXJhdGlvbiB0byBwaWNrIHdoZW4gYSB0eXBlIGlzIG9wdGlvbmFsL3JlcXVpcmVkXG4gICAgLy8gVGhpcyB3b3VsZCByZXF1aXJlIGNoYW5nZXMgdG8gJ3BhcnNlVHlwZSdcbiAgICBmdW5jdGlvbiBpc0FsbG93ZWRUeXBlKHRpdGxlKSB7XG4gICAgICAgIHJldHVybiBpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkgfHwgdGl0bGUgPT09ICd0aHJvd3MnIHx8IHRpdGxlID09PSAnY29uc3QnIHx8IHRpdGxlID09PSAnY29uc3RhbnQnIHx8XG4gICAgICAgICAgICB0aXRsZSA9PT0gJ25hbWVzcGFjZScgfHwgdGl0bGUgPT09ICdtZW1iZXInIHx8IHRpdGxlID09PSAndmFyJyB8fCB0aXRsZSA9PT0gJ21vZHVsZScgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAnY29uc3RydWN0b3InIHx8IHRpdGxlID09PSAnY2xhc3MnIHx8IHRpdGxlID09PSAnZXh0ZW5kcycgfHwgdGl0bGUgPT09ICdhdWdtZW50cycgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAncHVibGljJyB8fCB0aXRsZSA9PT0gJ3ByaXZhdGUnIHx8IHRpdGxlID09PSAncHJvdGVjdGVkJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmltKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrLywgJycpLnJlcGxhY2UoL1xccyskLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVud3JhcENvbW1lbnQoZG9jKSB7XG4gICAgICAgIC8vIEpTRG9jIGNvbW1lbnQgaXMgZm9sbG93aW5nIGZvcm1cbiAgICAgICAgLy8gICAvKipcbiAgICAgICAgLy8gICAgKiAuLi4uLi4uXG4gICAgICAgIC8vICAgICovXG4gICAgICAgIC8vIHJlbW92ZSAvKiosICovIGFuZCAqXG4gICAgICAgIHZhciBCRUZPUkVfU1RBUiA9IDAsXG4gICAgICAgICAgICBTVEFSID0gMSxcbiAgICAgICAgICAgIEFGVEVSX1NUQVIgPSAyLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBsZW4sXG4gICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgY2g7XG5cbiAgICAgICAgZG9jID0gZG9jLnJlcGxhY2UoL15cXC9cXCpcXCo/LywgJycpLnJlcGxhY2UoL1xcKlxcLyQvLCAnJyk7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgbGVuID0gZG9jLmxlbmd0aDtcbiAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFSO1xuICAgICAgICByZXN1bHQgPSAnJztcblxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGNoID0gZG9jLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEJFRk9SRV9TVEFSOlxuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEgIC8qICcqJyAqLykge1xuICAgICAgICAgICAgICAgICAgICBtb2RlID0gU1RBUjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGUgPSBBRlRFUl9TVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTVEFSOlxuICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb2RlID0gZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY2gpID8gQkVGT1JFX1NUQVIgOiBBRlRFUl9TVEFSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEFGVEVSX1NUQVI6XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIEpTRG9jIFRhZyBQYXJzZXJcblxuICAgIChmdW5jdGlvbiAoZXhwb3J0cykge1xuICAgICAgICB2YXIgUnVsZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICByZWNvdmVyYWJsZSxcbiAgICAgICAgICAgIHNsb3BweSxcbiAgICAgICAgICAgIHN0cmljdDtcblxuICAgICAgICBmdW5jdGlvbiBhZHZhbmNlKCkge1xuICAgICAgICAgICAgdmFyIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkgJiYgIShjaCA9PT0gMHgwRCAgLyogJ1xccicgKi8gJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBICAvKiAnXFxuJyAqLykpIHtcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzY2FuVGl0bGUoKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUgPSAnJztcbiAgICAgICAgICAgIC8vIHdhc3RlICdAJ1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuXG4gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgaXNBU0NJSUFscGhhbnVtZXJpYyhzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgdGl0bGUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzZWVrQ29udGVudCgpIHtcbiAgICAgICAgICAgIHZhciBjaCwgd2FpdGluZywgbGFzdCA9IGluZGV4O1xuXG4gICAgICAgICAgICB3YWl0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAobGFzdCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQobGFzdCk7XG4gICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoKSAmJiAhKGNoID09PSAweDBEICAvKiAnXFxyJyAqLyAmJiBzb3VyY2UuY2hhckNvZGVBdChsYXN0ICsgMSkgPT09IDB4MEEgIC8qICdcXG4nICovKSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2FpdGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4NDAgIC8qICdAJyAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3QgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsYXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHlwZSBleHByZXNzaW9uIG1heSBoYXZlIG5lc3QgYnJhY2UsIHN1Y2ggYXMsXG4gICAgICAgIC8vIHsgeyBvazogc3RyaW5nIH0gfVxuICAgICAgICAvL1xuICAgICAgICAvLyB0aGVyZWZvcmUsIHNjYW5uaW5nIHR5cGUgZXhwcmVzc2lvbiB3aXRoIGJhbGFuY2luZyBicmFjZXMuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVHlwZSh0aXRsZSwgbGFzdCkge1xuICAgICAgICAgICAgdmFyIGNoLCBicmFjZSwgdHlwZSwgZGlyZWN0ID0gZmFsc2U7XG5cblxuICAgICAgICAgICAgLy8gc2VhcmNoICd7J1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHg3QiAgLyogJ3snICovKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBkaXJlY3QgcGF0dGVyblxuICAgICAgICAgICAgICAgICAgICBkaXJlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKGRpcmVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0eXBlIGV4cHJlc3Npb24geyBpcyBmb3VuZFxuICAgICAgICAgICAgYnJhY2UgPSAxO1xuICAgICAgICAgICAgdHlwZSA9ICcnO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHg3RCAgLyogJ30nICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmFjZSAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyYWNlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDdCICAvKiAneycgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHlwZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnJhY2UgIT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBicmFjZXMgaXMgbm90IGJhbGFuY2VkXG4gICAgICAgICAgICAgICAgcmV0dXJuIHV0aWxpdHkudGhyb3dFcnJvcignQnJhY2VzIGFyZSBub3QgYmFsYW5jZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aXRsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZWQucGFyc2VQYXJhbVR5cGUodHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHlwZWQucGFyc2VUeXBlKHR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2NhbklkZW50aWZpZXIobGFzdCkge1xuICAgICAgICAgICAgdmFyIGlkZW50aWZpZXI7XG4gICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZGVudGlmaWVyID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCAmJiBlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyUGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgaWRlbnRpZmllciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNraXBXaGl0ZVNwYWNlKGxhc3QpIHtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxhc3QgJiYgKGVzdXRpbHMuY29kZS5pc1doaXRlU3BhY2Uoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSB8fCBlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSkge1xuICAgICAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlTmFtZShsYXN0LCBhbGxvd0JyYWNrZXRzLCBhbGxvd05lc3RlZFBhcmFtcykge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSAnJywgdXNlQnJhY2tldHM7XG5cbiAgICAgICAgICAgIHNraXBXaGl0ZVNwYWNlKGxhc3QpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gbGFzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYWxsb3dCcmFja2V0cyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUIgIC8qICdbJyAqLykge1xuICAgICAgICAgICAgICAgIHVzZUJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBuYW1lID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hbWUgKz0gc2NhbklkZW50aWZpZXIobGFzdCk7XG5cbiAgICAgICAgICAgIGlmIChhbGxvd05lc3RlZFBhcmFtcykge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0EgLyogJzonICovICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT09ICdtb2R1bGUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09PSAnZXh0ZXJuYWwnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09PSAnZXZlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBzY2FuSWRlbnRpZmllcihsYXN0KTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUIgIC8qICdbJyAqLyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDVEICAvKiAnXScgKi8pe1xuICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MkUgIC8qICcuJyAqLyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDIzICAvKiAnIycgKi8gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHg3RSAgLyogJ34nICovKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICBuYW1lICs9IHNjYW5JZGVudGlmaWVyKGxhc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVzZUJyYWNrZXRzKSB7XG4gICAgICAgICAgICAgICAgLy8gZG8gd2UgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXM/XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzRCAgLyogJz0nICovKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3VtZSB0aGUgJz0nJyBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNjYW4gaW4gdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NUQgIC8qICddJyAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGFzdCAgfHwgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDVEICAvKiAnXScgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmV2ZXIgZm91bmQgYSBjbG9zaW5nICddJ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IHRoZSBsYXN0ICddJ1xuICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNraXBUb1RhZygpIHtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NDAgIC8qICdAJyAqLykge1xuICAgICAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1dGlsaXR5LmFzc2VydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NDAgIC8qICdAJyAqLyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIFRhZ1BhcnNlcihvcHRpb25zLCB0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgdGhpcy5fdGFnID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmxpbmVOdW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFnLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbGFzdCA9IDA7XG4gICAgICAgICAgICAvLyBzcGFjZSB0byBzYXZlIHNwZWNpYWwgaW5mb3JtYXRpb24gZm9yIHRpdGxlIHBhcnNlcnMuXG4gICAgICAgICAgICB0aGlzLl9leHRyYSA9IHsgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZEVycm9yKGVyciwgLi4uKVxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmFkZEVycm9yID0gZnVuY3Rpb24gYWRkRXJyb3IoZXJyb3JUZXh0KSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICAgICAgbXNnID0gZXJyb3JUZXh0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC8lKFxcZCkvZyxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS5hc3NlcnQoaW5kZXggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLmVycm9ycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IobXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RhZy5lcnJvcnMucHVzaChtc2cpO1xuICAgICAgICAgICAgcmV0dXJuIHJlY292ZXJhYmxlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gdHlwZSByZXF1aXJlZCB0aXRsZXNcbiAgICAgICAgICAgIGlmIChpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlwZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyB0eXBlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZy50eXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQWxsb3dlZFR5cGUodGhpcy5fdGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gb3B0aW9uYWwgdHlwZXNcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlwZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFzdCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvL0ZvciBvcHRpb25hbCB0eXBlcywgbGV0cyBkcm9wIHRoZSB0aHJvd24gZXJyb3Igd2hlbiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgZmlsZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuX3BhcnNlTmFtZVBhdGggPSBmdW5jdGlvbiAob3B0aW9uYWwpIHtcbiAgICAgICAgICAgIHZhciBuYW1lO1xuICAgICAgICAgICAgbmFtZSA9IHBhcnNlTmFtZSh0aGlzLl9sYXN0LCBzbG9wcHkgJiYgaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyBuYW1lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RhZy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VOYW1lUGF0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZU5hbWVQYXRoKGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlTmFtZVBhdGhPcHRpb25hbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZU5hbWVQYXRoKHRydWUpO1xuICAgICAgICB9O1xuXG5cbiAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXNzaWduLCBuYW1lO1xuXG4gICAgICAgICAgICAvLyBwYXJhbSwgcHJvcGVydHkgcmVxdWlyZXMgbmFtZVxuICAgICAgICAgICAgaWYgKGlzQWxsb3dlZE5hbWUodGhpcy5fdGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSBwYXJzZU5hbWUodGhpcy5fbGFzdCwgc2xvcHB5ICYmIGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSksIGlzQWxsb3dlZE5lc3RlZCh0aGlzLl90aXRsZSkpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hbWVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGUgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIHBhcnNlZCBidXQgaW50ZXJwcmV0ZWQgYXMgYSB0eXBlXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0J3MgYWxzbyBwb3NzaWJsZSB0aGlzIGlzIGEgc2xvcHB5IGRlY2xhcmF0aW9uLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmVcbiAgICAgICAgICAgICAgICAgICAgLy8gZml4ZWQgYXQgdGhlIGVuZFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSAmJiB0aGlzLl90YWcudHlwZSAmJiB0aGlzLl90YWcudHlwZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9leHRyYS5uYW1lID0gdGhpcy5fdGFnLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcubmFtZSA9IHRoaXMuX3RhZy50eXBlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0YWcgbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMuX3RhZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdbJyAmJiBuYW1lLmNoYXJBdChuYW1lLmxlbmd0aCAtIDEpID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4dHJhY3QgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgaXMgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBleGFtcGxlOiBAcGFyYW0ge3N0cmluZ30gW3NvbWVib2R5PUpvaG4gRG9lXSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduID0gbmFtZS5zdWJzdHJpbmcoMSwgbmFtZS5sZW5ndGggLSAxKS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2lnblsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZ1snZGVmYXVsdCddID0gYXNzaWduWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSBhc3NpZ25bMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gYW4gb3B0aW9uYWwgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhZy50eXBlICYmIHRoaXMuX3RhZy50eXBlLnR5cGUgIT09ICdPcHRpb25hbFR5cGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb25hbFR5cGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLl90YWcudHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VEZXNjcmlwdGlvbiA9IGZ1bmN0aW9uIHBhcnNlRGVzY3JpcHRpb24oKSB7XG4gICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICgoL14tXFxzKy8pLnRlc3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uc3Vic3RyaW5nKDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl90YWcuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VLaW5kID0gZnVuY3Rpb24gcGFyc2VLaW5kKCkge1xuICAgICAgICAgICAgdmFyIGtpbmQsIGtpbmRzO1xuICAgICAgICAgICAga2luZHMgPSB7XG4gICAgICAgICAgICAgICAgJ2NsYXNzJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnY29uc3RhbnQnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdldmVudCc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2V4dGVybmFsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZmlsZSc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2Z1bmN0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnbWVtYmVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnbWl4aW4nOiB0cnVlLFxuICAgICAgICAgICAgICAgICdtb2R1bGUnOiB0cnVlLFxuICAgICAgICAgICAgICAgICduYW1lc3BhY2UnOiB0cnVlLFxuICAgICAgICAgICAgICAgICd0eXBlZGVmJzogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGtpbmQgPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTtcbiAgICAgICAgICAgIHRoaXMuX3RhZy5raW5kID0ga2luZDtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcGVydHkoa2luZHMsIGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdJbnZhbGlkIGtpbmQgbmFtZSBcXCclMFxcJycsIGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlQWNjZXNzID0gZnVuY3Rpb24gcGFyc2VBY2Nlc3MoKSB7XG4gICAgICAgICAgICB2YXIgYWNjZXNzO1xuICAgICAgICAgICAgYWNjZXNzID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7XG4gICAgICAgICAgICB0aGlzLl90YWcuYWNjZXNzID0gYWNjZXNzO1xuICAgICAgICAgICAgaWYgKGFjY2VzcyAhPT0gJ3ByaXZhdGUnICYmIGFjY2VzcyAhPT0gJ3Byb3RlY3RlZCcgJiYgYWNjZXNzICE9PSAncHVibGljJykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxpZCBhY2Nlc3MgbmFtZSBcXCclMFxcJycsIGFjY2VzcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VWYXJpYXRpb24gPSBmdW5jdGlvbiBwYXJzZVZhcmlhdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB2YXJpYXRpb24sIHRleHQ7XG4gICAgICAgICAgICB0ZXh0ID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7XG4gICAgICAgICAgICB2YXJpYXRpb24gPSBwYXJzZUZsb2F0KHRleHQsIDEwKTtcbiAgICAgICAgICAgIHRoaXMuX3RhZy52YXJpYXRpb24gPSB2YXJpYXRpb247XG4gICAgICAgICAgICBpZiAoaXNOYU4odmFyaWF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxpZCB2YXJpYXRpb24gXFwnJTBcXCcnLCB0ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5lbnN1cmVFbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2hvdWxkQmVFbXB0eSA9IHRyaW0oc2xpY2VTb3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpO1xuICAgICAgICAgICAgaWYgKHNob3VsZEJlRW1wdHkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ1Vua25vd24gY29udGVudCBcXCclMFxcJycsIHNob3VsZEJlRW1wdHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmVwaWxvZ3VlID0gZnVuY3Rpb24gZXBpbG9ndWUoKSB7XG4gICAgICAgICAgICB2YXIgZGVzY3JpcHRpb247XG5cbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5fdGFnLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgLy8gdW4tZml4IHBvdGVudGlhbGx5IHNsb3BweSBkZWNsYXJhdGlvblxuICAgICAgICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSkgJiYgIXRoaXMuX3RhZy50eXBlICYmIGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLmNoYXJBdCgwKSA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSB0aGlzLl9leHRyYS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFzbG9wcHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgdGFnIG5hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBSdWxlcyA9IHtcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hY2Nlc3MuaHRtbFxuICAgICAgICAgICAgJ2FjY2Vzcyc6IFsncGFyc2VBY2Nlc3MnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hbGlhcy5odG1sXG4gICAgICAgICAgICAnYWxpYXMnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtYXVnbWVudHMuaHRtbFxuICAgICAgICAgICAgJ2F1Z21lbnRzJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWNvbnN0cnVjdG9yLmh0bWxcbiAgICAgICAgICAgICdjb25zdHJ1Y3Rvcic6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1jb25zdHJ1Y3Rvci5odG1sXG4gICAgICAgICAgICAnY2xhc3MnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZXh0ZW5kcy5odG1sXG4gICAgICAgICAgICAnZXh0ZW5kcyc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1kZXByZWNhdGVkLmh0bWxcbiAgICAgICAgICAgICdkZXByZWNhdGVkJzogWydwYXJzZURlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZ2xvYmFsLmh0bWxcbiAgICAgICAgICAgICdnbG9iYWwnOiBbJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWlubmVyLmh0bWxcbiAgICAgICAgICAgICdpbm5lcic6IFsnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtaW5zdGFuY2UuaHRtbFxuICAgICAgICAgICAgJ2luc3RhbmNlJzogWydlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1raW5kLmh0bWxcbiAgICAgICAgICAgICdraW5kJzogWydwYXJzZUtpbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1taXhlcy5odG1sXG4gICAgICAgICAgICAnbWl4ZXMnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWl4aW4uaHRtbFxuICAgICAgICAgICAgJ21peGluJzogWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWxcbiAgICAgICAgICAgICdtZW1iZXInOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWV0aG9kLmh0bWxcbiAgICAgICAgICAgICdtZXRob2QnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tb2R1bGUuaHRtbFxuICAgICAgICAgICAgJ21vZHVsZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tZXRob2QuaHRtbFxuICAgICAgICAgICAgJ2Z1bmMnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tZXRob2QuaHRtbFxuICAgICAgICAgICAgJ2Z1bmN0aW9uJzogWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWxcbiAgICAgICAgICAgICd2YXInOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbmFtZS5odG1sXG4gICAgICAgICAgICAnbmFtZSc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1uYW1lc3BhY2UuaHRtbFxuICAgICAgICAgICAgJ25hbWVzcGFjZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1wcml2YXRlLmh0bWxcbiAgICAgICAgICAgICdwcml2YXRlJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXByb3RlY3RlZC5odG1sXG4gICAgICAgICAgICAncHJvdGVjdGVkJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXB1YmxpYy5odG1sXG4gICAgICAgICAgICAncHVibGljJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXJlYWRvbmx5Lmh0bWxcbiAgICAgICAgICAgICdyZWFkb25seSc6IFsnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcmVxdWlyZXMuaHRtbFxuICAgICAgICAgICAgJ3JlcXVpcmVzJzogWydwYXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXNpbmNlLmh0bWxcbiAgICAgICAgICAgICdzaW5jZSc6IFsncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXN0YXRpYy5odG1sXG4gICAgICAgICAgICAnc3RhdGljJzogWydlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zdW1tYXJ5Lmh0bWxcbiAgICAgICAgICAgICdzdW1tYXJ5JzogWydwYXJzZURlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdGhpcy5odG1sXG4gICAgICAgICAgICAndGhpcyc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy10b2RvLmh0bWxcbiAgICAgICAgICAgICd0b2RvJzogWydwYXJzZURlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdHlwZWRlZi5odG1sXG4gICAgICAgICAgICAndHlwZWRlZic6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXZhcmlhdGlvbi5odG1sXG4gICAgICAgICAgICAndmFyaWF0aW9uJzogWydwYXJzZVZhcmlhdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXZlcnNpb24uaHRtbFxuICAgICAgICAgICAgJ3ZlcnNpb24nOiBbJ3BhcnNlRGVzY3JpcHRpb24nXVxuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSgpIHtcbiAgICAgICAgICAgIHZhciBpLCBpeiwgc2VxdWVuY2VzLCBtZXRob2Q7XG5cbiAgICAgICAgICAgIC8vIGVtcHR5IHRpdGxlXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RpdGxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgdGl0bGUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNlZWsgdG8gY29udGVudCBsYXN0IGluZGV4LlxuICAgICAgICAgICAgdGhpcy5fbGFzdCA9IHNlZWtDb250ZW50KHRoaXMuX3RpdGxlKTtcblxuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5KFJ1bGVzLCB0aGlzLl90aXRsZSkpIHtcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZXMgPSBSdWxlc1t0aGlzLl90aXRsZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgc2VxdWVuY2VzXG4gICAgICAgICAgICAgICAgc2VxdWVuY2VzID0gWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lJywgJ3BhcnNlRGVzY3JpcHRpb24nLCAnZXBpbG9ndWUnXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBzZXF1ZW5jZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgIG1ldGhvZCA9IHNlcXVlbmNlc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNbbWV0aG9kXSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2VlayBnbG9iYWwgaW5kZXggdG8gZW5kIG9mIHRoaXMgdGFnLlxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLl9sYXN0O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RhZztcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRhZyhvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUsIHBhcnNlcjtcblxuICAgICAgICAgICAgLy8gc2tpcCB0byB0YWdcbiAgICAgICAgICAgIGlmICghc2tpcFRvVGFnKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc2NhbiB0aXRsZVxuICAgICAgICAgICAgdGl0bGUgPSBzY2FuVGl0bGUoKTtcblxuICAgICAgICAgICAgLy8gY29uc3RydWN0IHRhZyBwYXJzZXJcbiAgICAgICAgICAgIHBhcnNlciA9IG5ldyBUYWdQYXJzZXIob3B0aW9ucywgdGl0bGUpO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gUGFyc2UgSlNEb2NcbiAgICAgICAgLy9cblxuICAgICAgICBmdW5jdGlvbiBzY2FuSlNEb2NEZXNjcmlwdGlvbihwcmVzZXJ2ZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9ICcnLCBjaCwgYXRBbGxvd2VkO1xuXG4gICAgICAgICAgICBhdEFsbG93ZWQgPSB0cnVlO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXRBbGxvd2VkICYmIGNoID09PSAweDQwICAvKiAnQCcgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBhdEFsbG93ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXRBbGxvd2VkICYmICFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBhdEFsbG93ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwcmVzZXJ2ZVdoaXRlc3BhY2UgPyBkZXNjcmlwdGlvbiA6IHRyaW0oZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcGFyc2UoY29tbWVudCwgb3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIHRhZ3MgPSBbXSwgdGFnLCBkZXNjcmlwdGlvbiwgaW50ZXJlc3RpbmdUYWdzLCBpLCBpejtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnVud3JhcCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudW53cmFwKSB7XG4gICAgICAgICAgICAgICAgc291cmNlID0gdW53cmFwQ29tbWVudChjb21tZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc291cmNlID0gY29tbWVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYXJyYXkgb2YgcmVsZXZhbnQgdGFnc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGFncykge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KG9wdGlvbnMudGFncykpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RpbmdUYWdzID0geyB9O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG9wdGlvbnMudGFncy5sZW5ndGg7IGkgPCBpejsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudGFnc1tpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmVzdGluZ1RhZ3Nbb3B0aW9ucy50YWdzW2ldXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcignSW52YWxpZCBcInRhZ3NcIiBwYXJhbWV0ZXI6ICcgKyBvcHRpb25zLnRhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCdJbnZhbGlkIFwidGFnc1wiIHBhcmFtZXRlcjogJyArIG9wdGlvbnMudGFncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICAgICAgbGluZU51bWJlciA9IDA7XG4gICAgICAgICAgICByZWNvdmVyYWJsZSA9IG9wdGlvbnMucmVjb3ZlcmFibGU7XG4gICAgICAgICAgICBzbG9wcHkgPSBvcHRpb25zLnNsb3BweTtcbiAgICAgICAgICAgIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHNjYW5KU0RvY0Rlc2NyaXB0aW9uKG9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlKTtcblxuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICB0YWcgPSBwYXJzZVRhZyhvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRhZykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFpbnRlcmVzdGluZ1RhZ3MgfHwgaW50ZXJlc3RpbmdUYWdzLmhhc093blByb3BlcnR5KHRhZy50aXRsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFncy5wdXNoKHRhZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICB0YWdzOiB0YWdzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbiAgICB9KGpzZG9jID0ge30pKTtcblxuICAgIGV4cG9ydHMudmVyc2lvbiA9IHV0aWxpdHkuVkVSU0lPTjtcbiAgICBleHBvcnRzLnBhcnNlID0ganNkb2MucGFyc2U7XG4gICAgZXhwb3J0cy5wYXJzZVR5cGUgPSB0eXBlZC5wYXJzZVR5cGU7XG4gICAgZXhwb3J0cy5wYXJzZVBhcmFtVHlwZSA9IHR5cGVkLnBhcnNlUGFyYW1UeXBlO1xuICAgIGV4cG9ydHMudW53cmFwQ29tbWVudCA9IHVud3JhcENvbW1lbnQ7XG4gICAgZXhwb3J0cy5TeW50YXggPSBzaGFsbG93Q29weSh0eXBlZC5TeW50YXgpO1xuICAgIGV4cG9ydHMuRXJyb3IgPSB1dGlsaXR5LkRvY3RyaW5lRXJyb3I7XG4gICAgZXhwb3J0cy50eXBlID0ge1xuICAgICAgICBTeW50YXg6IGV4cG9ydHMuU3ludGF4LFxuICAgICAgICBwYXJzZVR5cGU6IHR5cGVkLnBhcnNlVHlwZSxcbiAgICAgICAgcGFyc2VQYXJhbVR5cGU6IHR5cGVkLnBhcnNlUGFyYW1UeXBlLFxuICAgICAgICBzdHJpbmdpZnk6IHR5cGVkLnN0cmluZ2lmeVxuICAgIH07XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDE0IERhbiBUYW8gPGRhbmllbC50YW9AZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgQW5kcmV3IEVpc2VuYmVyZyA8YW5kcmV3QGVpc2VuYmVyZy5hcz5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4vLyBcInR5cGVkXCIsIHRoZSBUeXBlIEV4cHJlc3Npb24gUGFyc2VyIGZvciBkb2N0cmluZS5cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgU3ludGF4LFxuICAgICAgICBUb2tlbixcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZW5ndGgsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBwcmV2aW91cyxcbiAgICAgICAgdG9rZW4sXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBlc3V0aWxzLFxuICAgICAgICB1dGlsaXR5O1xuXG4gICAgZXN1dGlscyA9IHJlcXVpcmUoJ2VzdXRpbHMnKTtcbiAgICB1dGlsaXR5ID0gcmVxdWlyZSgnLi91dGlsaXR5Jyk7XG5cbiAgICBTeW50YXggPSB7XG4gICAgICAgIE51bGxhYmxlTGl0ZXJhbDogJ051bGxhYmxlTGl0ZXJhbCcsXG4gICAgICAgIEFsbExpdGVyYWw6ICdBbGxMaXRlcmFsJyxcbiAgICAgICAgTnVsbExpdGVyYWw6ICdOdWxsTGl0ZXJhbCcsXG4gICAgICAgIFVuZGVmaW5lZExpdGVyYWw6ICdVbmRlZmluZWRMaXRlcmFsJyxcbiAgICAgICAgVm9pZExpdGVyYWw6ICdWb2lkTGl0ZXJhbCcsXG4gICAgICAgIFVuaW9uVHlwZTogJ1VuaW9uVHlwZScsXG4gICAgICAgIEFycmF5VHlwZTogJ0FycmF5VHlwZScsXG4gICAgICAgIFJlY29yZFR5cGU6ICdSZWNvcmRUeXBlJyxcbiAgICAgICAgRmllbGRUeXBlOiAnRmllbGRUeXBlJyxcbiAgICAgICAgRnVuY3Rpb25UeXBlOiAnRnVuY3Rpb25UeXBlJyxcbiAgICAgICAgUGFyYW1ldGVyVHlwZTogJ1BhcmFtZXRlclR5cGUnLFxuICAgICAgICBSZXN0VHlwZTogJ1Jlc3RUeXBlJyxcbiAgICAgICAgTm9uTnVsbGFibGVUeXBlOiAnTm9uTnVsbGFibGVUeXBlJyxcbiAgICAgICAgT3B0aW9uYWxUeXBlOiAnT3B0aW9uYWxUeXBlJyxcbiAgICAgICAgTnVsbGFibGVUeXBlOiAnTnVsbGFibGVUeXBlJyxcbiAgICAgICAgTmFtZUV4cHJlc3Npb246ICdOYW1lRXhwcmVzc2lvbicsXG4gICAgICAgIFR5cGVBcHBsaWNhdGlvbjogJ1R5cGVBcHBsaWNhdGlvbidcbiAgICB9O1xuXG4gICAgVG9rZW4gPSB7XG4gICAgICAgIElMTEVHQUw6IDAsICAgIC8vIElMTEVHQUxcbiAgICAgICAgRE9UX0xUOiAxLCAgICAgLy8gLjxcbiAgICAgICAgUkVTVDogMiwgICAgICAgLy8gLi4uXG4gICAgICAgIExUOiAzLCAgICAgICAgIC8vIDxcbiAgICAgICAgR1Q6IDQsICAgICAgICAgLy8gPlxuICAgICAgICBMUEFSRU46IDUsICAgICAvLyAoXG4gICAgICAgIFJQQVJFTjogNiwgICAgIC8vIClcbiAgICAgICAgTEJSQUNFOiA3LCAgICAgLy8ge1xuICAgICAgICBSQlJBQ0U6IDgsICAgICAvLyB9XG4gICAgICAgIExCUkFDSzogOSwgICAgLy8gW1xuICAgICAgICBSQlJBQ0s6IDEwLCAgICAvLyBdXG4gICAgICAgIENPTU1BOiAxMSwgICAgIC8vICxcbiAgICAgICAgQ09MT046IDEyLCAgICAgLy8gOlxuICAgICAgICBTVEFSOiAxMywgICAgICAvLyAqXG4gICAgICAgIFBJUEU6IDE0LCAgICAgIC8vIHxcbiAgICAgICAgUVVFU1RJT046IDE1LCAgLy8gP1xuICAgICAgICBCQU5HOiAxNiwgICAgICAvLyAhXG4gICAgICAgIEVRVUFMOiAxNywgICAgIC8vID1cbiAgICAgICAgTkFNRTogMTgsICAgICAgLy8gbmFtZSB0b2tlblxuICAgICAgICBTVFJJTkc6IDE5LCAgICAvLyBzdHJpbmdcbiAgICAgICAgTlVNQkVSOiAyMCwgICAgLy8gbnVtYmVyXG4gICAgICAgIEVPRjogMjFcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaXNUeXBlTmFtZShjaCkge1xuICAgICAgICByZXR1cm4gJz48KCl7fVtdLDoqfD8hPScuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkgPT09IC0xICYmICFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSAmJiAhZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY2gpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIENvbnRleHQocHJldmlvdXMsIGluZGV4LCB0b2tlbiwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcHJldmlvdXMgPSBwcmV2aW91cztcbiAgICAgICAgdGhpcy5faW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5fdG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBDb250ZXh0LnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwcmV2aW91cyA9IHRoaXMuX3ByZXZpb3VzO1xuICAgICAgICBpbmRleCA9IHRoaXMuX2luZGV4O1xuICAgICAgICB0b2tlbiA9IHRoaXMuX3Rva2VuO1xuICAgICAgICB2YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIH07XG5cbiAgICBDb250ZXh0LnNhdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udGV4dChwcmV2aW91cywgaW5kZXgsIHRva2VuLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7XG4gICAgICAgIHZhciBjaCA9IHNvdXJjZS5jaGFyQXQoaW5kZXgpO1xuICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NhbkhleEVzY2FwZShwcmVmaXgpIHtcbiAgICAgICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwO1xuXG4gICAgICAgIGxlbiA9IChwcmVmaXggPT09ICd1JykgPyA0IDogMjtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgZXN1dGlscy5jb2RlLmlzSGV4RGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgIGNoID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYW5TdHJpbmcoKSB7XG4gICAgICAgIHZhciBzdHIgPSAnJywgcXVvdGUsIGNoLCBjb2RlLCB1bmVzY2FwZWQsIHJlc3RvcmU7IC8vVE9ETyByZXZpZXcgcmVtb3ZhbCBvY3RhbCA9IGZhbHNlXG4gICAgICAgIHF1b3RlID0gc291cmNlLmNoYXJBdChpbmRleCk7XG4gICAgICAgICsraW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaCA9IGFkdmFuY2UoKTtcblxuICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkge1xuICAgICAgICAgICAgICAgIHF1b3RlID0gJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBjaCA9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xccic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcdCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkID0gc2NhbkhleEVzY2FwZShjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxiJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxmJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFx2JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXByZWNhdGluZyB1bnVzZWQgY29kZS4gVE9ETyByZXZpZXcgcmVtb3ZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBvY3RhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETyBSZXZpZXcgUmVtb3ZhbCBvY3RhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihhZHZhbmNlKCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3RhcnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggMCwgMSwgMiwgM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gpID49IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdXRpbHMuY29kZS5pc09jdGFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKGFkdmFuY2UoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAgJ1xccicgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBICAvKiAnXFxuJyAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHF1b3RlICE9PSAnJykge1xuICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHF1b3RlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IHN0cjtcbiAgICAgICAgcmV0dXJuIFRva2VuLlNUUklORztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2FuTnVtYmVyKCkge1xuICAgICAgICB2YXIgbnVtYmVyLCBjaDtcblxuICAgICAgICBudW1iZXIgPSAnJztcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICAgICAgaWYgKGNoICE9PSAweDJFICAvKiAnLicgKi8pIHtcbiAgICAgICAgICAgIG51bWJlciA9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4NzggIC8qICd4JyAqLyB8fCBjaCA9PT0gMHg1OCAgLyogJ1gnICovKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0hleERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgMHhcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludChudW1iZXIsIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5VTUJFUjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQobnVtYmVyLCA4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5VTUJFUjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaCA9PT0gMHgyRSAgLyogJy4nICovKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKCFlc3V0aWxzLmNvZGUuaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSAweDY1ICAvKiAnZScgKi8gfHwgY2ggPT09IDB4NDUgIC8qICdFJyAqLykge1xuICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcblxuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09IDB4MkIgIC8qICcrJyAqLyB8fCBjaCA9PT0gMHgyRCAgLyogJy0nICovKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0RlY2ltYWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KG51bWJlcik7XG4gICAgICAgIHJldHVybiBUb2tlbi5OVU1CRVI7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBzY2FuVHlwZU5hbWUoKSB7XG4gICAgICAgIHZhciBjaCwgY2gyO1xuXG4gICAgICAgIHZhbHVlID0gYWR2YW5jZSgpO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgaXNUeXBlTmFtZShzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRSAgLyogJy4nICovKSB7XG4gICAgICAgICAgICAgICAgaWYgKChpbmRleCArIDEpID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4uSUxMRUdBTDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2gyID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAoY2gyID09PSAweDNDICAvKiAnPCcgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgKz0gYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBUb2tlbi5OQU1FO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgIHZhciBjaDtcblxuICAgICAgICBwcmV2aW91cyA9IGluZGV4O1xuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkVPRjtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgMHgyNzogIC8qICcnJyAqL1xuICAgICAgICBjYXNlIDB4MjI6ICAvKiAnXCInICovXG4gICAgICAgICAgICB0b2tlbiA9IHNjYW5TdHJpbmcoKTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4M0E6ICAvKiAnOicgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uQ09MT047XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDJDOiAgLyogJywnICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkNPTU1BO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgyODogIC8qICcoJyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5MUEFSRU47XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDI5OiAgLyogJyknICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJQQVJFTjtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4NUI6ICAvKiAnWycgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTEJSQUNLO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHg1RDogIC8qICddJyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5SQlJBQ0s7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDdCOiAgLyogJ3snICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxCUkFDRTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4N0Q6ICAvKiAnfScgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNFO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgyRTogIC8qICcuJyAqL1xuICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4M0MgIC8qICc8JyAqLykge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7ICAvLyAnLidcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOyAgLy8gJzwnXG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRE9UX0xUO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDJFICAvKiAnLicgKi8gJiYgaW5kZXggKyAyIDwgbGVuZ3RoICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMikgPT09IDB4MkUgIC8qICcuJyAqLykge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7ICAvLyAnLidcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOyAgLy8gJy4nXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsgIC8vICcuJ1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJFU1Q7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHNjYW5OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uSUxMRUdBTDtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4M0M6ICAvKiAnPCcgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTFQ7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDNFOiAgLyogJz4nICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkdUO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgyQTogIC8qICcqJyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5TVEFSO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHg3QzogIC8qICd8JyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5QSVBFO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgzRjogIC8qICc/JyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5RVUVTVElPTjtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4MjE6ICAvKiAnIScgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uQkFORztcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4M0Q6ICAvKiAnPScgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRVFVQUw7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBzY2FuTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0eXBlIHN0cmluZyBwZXJtaXRzIGZvbGxvd2luZyBjYXNlLFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIG5hbWVzcGFjZS5tb2R1bGUuTXlDbGFzc1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIHRoaXMgcmVkdWNlZCAxIHRva2VuIFRLX05BTUVcbiAgICAgICAgICAgIHV0aWxpdHkuYXNzZXJ0KGlzVHlwZU5hbWUoY2gpKTtcbiAgICAgICAgICAgIHRva2VuID0gc2NhblR5cGVOYW1lKCk7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25zdW1lKHRhcmdldCwgdGV4dCkge1xuICAgICAgICB1dGlsaXR5LmFzc2VydCh0b2tlbiA9PT0gdGFyZ2V0LCB0ZXh0IHx8ICdjb25zdW1lZCB0b2tlbiBub3QgbWF0Y2hlZCcpO1xuICAgICAgICBuZXh0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhwZWN0KHRhcmdldCwgbWVzc2FnZSkge1xuICAgICAgICBpZiAodG9rZW4gIT09IHRhcmdldCkge1xuICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKG1lc3NhZ2UgfHwgJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxuXG4gICAgLy8gVW5pb25UeXBlIDo9ICcoJyBUeXBlVW5pb25MaXN0ICcpJ1xuICAgIC8vXG4gICAgLy8gVHlwZVVuaW9uTGlzdCA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgIHwgTm9uZW1wdHlUeXBlVW5pb25MaXN0XG4gICAgLy9cbiAgICAvLyBOb25lbXB0eVR5cGVVbmlvbkxpc3QgOj1cbiAgICAvLyAgICAgVHlwZUV4cHJlc3Npb25cbiAgICAvLyAgIHwgVHlwZUV4cHJlc3Npb24gJ3wnIE5vbmVtcHR5VHlwZVVuaW9uTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlVW5pb25UeXBlKCkge1xuICAgICAgICB2YXIgZWxlbWVudHM7XG4gICAgICAgIGNvbnN1bWUoVG9rZW4uTFBBUkVOLCAnVW5pb25UeXBlIHNob3VsZCBzdGFydCB3aXRoICgnKTtcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcbiAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVR5cGVFeHByZXNzaW9uKCkpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUlBBUkVOKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uUElQRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3VtZShUb2tlbi5SUEFSRU4sICdVbmlvblR5cGUgc2hvdWxkIGVuZCB3aXRoICknKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmlvblR5cGUsXG4gICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBcnJheVR5cGUgOj0gJ1snIEVsZW1lbnRUeXBlTGlzdCAnXSdcbiAgICAvL1xuICAgIC8vIEVsZW1lbnRUeXBlTGlzdCA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgfCBUeXBlRXhwcmVzc2lvblxuICAgIC8vICB8ICcuLi4nIFR5cGVFeHByZXNzaW9uXG4gICAgLy8gIHwgVHlwZUV4cHJlc3Npb24gJywnIEVsZW1lbnRUeXBlTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXlUeXBlKCkge1xuICAgICAgICB2YXIgZWxlbWVudHM7XG4gICAgICAgIGNvbnN1bWUoVG9rZW4uTEJSQUNLLCAnQXJyYXlUeXBlIHNob3VsZCBzdGFydCB3aXRoIFsnKTtcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0spIHtcbiAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkge1xuICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUkVTVCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXN0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VUeXBlRXhwcmVzc2lvbigpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNLKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkNPTU1BKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoVG9rZW4uUkJSQUNLKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFN5bnRheC5BcnJheVR5cGUsXG4gICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUZpZWxkTmFtZSgpIHtcbiAgICAgICAgdmFyIHYgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FIHx8IHRva2VuID09PSBUb2tlbi5TVFJJTkcpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OVU1CRVIpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTlVNQkVSKTtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodik7XG4gICAgICAgIH1cblxuICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICB9XG5cbiAgICAvLyBGaWVsZFR5cGUgOj1cbiAgICAvLyAgICAgRmllbGROYW1lXG4gICAgLy8gICB8IEZpZWxkTmFtZSAnOicgVHlwZUV4cHJlc3Npb25cbiAgICAvL1xuICAgIC8vIEZpZWxkTmFtZSA6PVxuICAgIC8vICAgICBOYW1lRXhwcmVzc2lvblxuICAgIC8vICAgfCBTdHJpbmdMaXRlcmFsXG4gICAgLy8gICB8IE51bWJlckxpdGVyYWxcbiAgICAvLyAgIHwgUmVzZXJ2ZWRJZGVudGlmaWVyXG4gICAgZnVuY3Rpb24gcGFyc2VGaWVsZFR5cGUoKSB7XG4gICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAga2V5ID0gcGFyc2VGaWVsZE5hbWUoKTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT0xPTikge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT0xPTik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlVHlwZUV4cHJlc3Npb24oKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4LkZpZWxkVHlwZSxcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBSZWNvcmRUeXBlIDo9ICd7JyBGaWVsZFR5cGVMaXN0ICd9J1xuICAgIC8vXG4gICAgLy8gRmllbGRUeXBlTGlzdCA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgIHwgRmllbGRUeXBlXG4gICAgLy8gICB8IEZpZWxkVHlwZSAnLCcgRmllbGRUeXBlTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZSgpIHtcbiAgICAgICAgdmFyIGZpZWxkcztcblxuICAgICAgICBjb25zdW1lKFRva2VuLkxCUkFDRSwgJ1JlY29yZFR5cGUgc2hvdWxkIHN0YXJ0IHdpdGggeycpO1xuICAgICAgICBmaWVsZHMgPSBbXTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT01NQSkge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aGlsZSAodG9rZW4gIT09IFRva2VuLlJCUkFDRSkge1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHBhcnNlRmllbGRUeXBlKCkpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNFKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5DT01NQSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4cGVjdChUb2tlbi5SQlJBQ0UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlY29yZFR5cGUsXG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIE5hbWVFeHByZXNzaW9uIDo9XG4gICAgLy8gICAgSWRlbnRpZmllclxuICAgIC8vICB8IFRhZ0lkZW50aWZpZXIgJzonIElkZW50aWZpZXJcbiAgICAvL1xuICAgIC8vIFRhZyBpZGVudGlmaWVyIGlzIG9uZSBvZiBcIm1vZHVsZVwiLCBcImV4dGVybmFsXCIgb3IgXCJldmVudFwiXG4gICAgLy8gSWRlbnRpZmllciBpcyB0aGUgc2FtZSBhcyBUb2tlbi5OQU1FLCBpbmNsdWRpbmcgYW55IGRvdHMsIHNvbWV0aGluZyBsaWtlXG4gICAgLy8gbmFtZXNwYWNlLm1vZHVsZS5NeUNsYXNzXG4gICAgZnVuY3Rpb24gcGFyc2VOYW1lRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIG5hbWUgPSB2YWx1ZTtcbiAgICAgICAgZXhwZWN0KFRva2VuLk5BTUUpO1xuXG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09MT04gJiYgKFxuICAgICAgICAgICAgICAgIG5hbWUgPT09ICdtb2R1bGUnIHx8XG4gICAgICAgICAgICAgICAgbmFtZSA9PT0gJ2V4dGVybmFsJyB8fFxuICAgICAgICAgICAgICAgIG5hbWUgPT09ICdldmVudCcpKSB7XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTE9OKTtcbiAgICAgICAgICAgIG5hbWUgKz0gJzonICsgdmFsdWU7XG4gICAgICAgICAgICBleHBlY3QoVG9rZW4uTkFNRSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5hbWVFeHByZXNzaW9uLFxuICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIFR5cGVFeHByZXNzaW9uTGlzdCA6PVxuICAgIC8vICAgICBUb3BMZXZlbFR5cGVFeHByZXNzaW9uXG4gICAgLy8gICB8IFRvcExldmVsVHlwZUV4cHJlc3Npb24gJywnIFR5cGVFeHByZXNzaW9uTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlVHlwZUV4cHJlc3Npb25MaXN0KCkge1xuICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTtcblxuICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVG9wKCkpO1xuICAgICAgICB3aGlsZSAodG9rZW4gPT09IFRva2VuLkNPTU1BKSB7XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTU1BKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUb3AoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgIH1cblxuICAgIC8vIFR5cGVOYW1lIDo9XG4gICAgLy8gICAgIE5hbWVFeHByZXNzaW9uXG4gICAgLy8gICB8IE5hbWVFeHByZXNzaW9uIFR5cGVBcHBsaWNhdGlvblxuICAgIC8vXG4gICAgLy8gVHlwZUFwcGxpY2F0aW9uIDo9XG4gICAgLy8gICAgICcuPCcgVHlwZUV4cHJlc3Npb25MaXN0ICc+J1xuICAgIC8vICAgfCAnPCcgVHlwZUV4cHJlc3Npb25MaXN0ICc+JyAgIC8vIHRoaXMgaXMgZXh0ZW5zaW9uIG9mIGRvY3RyaW5lXG4gICAgZnVuY3Rpb24gcGFyc2VUeXBlTmFtZSgpIHtcbiAgICAgICAgdmFyIGV4cHIsIGFwcGxpY2F0aW9ucztcblxuICAgICAgICBleHByID0gcGFyc2VOYW1lRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkRPVF9MVCB8fCB0b2tlbiA9PT0gVG9rZW4uTFQpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9ucyA9IHBhcnNlVHlwZUV4cHJlc3Npb25MaXN0KCk7XG4gICAgICAgICAgICBleHBlY3QoVG9rZW4uR1QpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVHlwZUFwcGxpY2F0aW9uLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsXG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25zOiBhcHBsaWNhdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG4gICAgLy8gUmVzdWx0VHlwZSA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgIHwgJzonIHZvaWRcbiAgICAvLyAgIHwgJzonIFR5cGVFeHByZXNzaW9uXG4gICAgLy9cbiAgICAvLyBCTkYgaXMgYWJvdmVcbiAgICAvLyBidXQsIHdlIHJlbW92ZSA8PGVtcHR5Pj4gcGF0dGVybiwgc28gdG9rZW4gaXMgYWx3YXlzIFR5cGVUb2tlbjo6Q09MT05cbiAgICBmdW5jdGlvbiBwYXJzZVJlc3VsdFR5cGUoKSB7XG4gICAgICAgIGNvbnN1bWUoVG9rZW4uQ09MT04sICdSZXN1bHRUeXBlIHNob3VsZCBzdGFydCB3aXRoIDonKTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FICYmIHZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Wb2lkTGl0ZXJhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VUeXBlRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIC8vIFBhcmFtZXRlcnNUeXBlIDo9XG4gICAgLy8gICAgIFJlc3RQYXJhbWV0ZXJUeXBlXG4gICAgLy8gICB8IE5vblJlc3RQYXJhbWV0ZXJzVHlwZVxuICAgIC8vICAgfCBOb25SZXN0UGFyYW1ldGVyc1R5cGUgJywnIFJlc3RQYXJhbWV0ZXJUeXBlXG4gICAgLy9cbiAgICAvLyBSZXN0UGFyYW1ldGVyVHlwZSA6PVxuICAgIC8vICAgICAnLi4uJ1xuICAgIC8vICAgICAnLi4uJyBJZGVudGlmaWVyXG4gICAgLy9cbiAgICAvLyBOb25SZXN0UGFyYW1ldGVyc1R5cGUgOj1cbiAgICAvLyAgICAgUGFyYW1ldGVyVHlwZSAnLCcgTm9uUmVzdFBhcmFtZXRlcnNUeXBlXG4gICAgLy8gICB8IFBhcmFtZXRlclR5cGVcbiAgICAvLyAgIHwgT3B0aW9uYWxQYXJhbWV0ZXJzVHlwZVxuICAgIC8vXG4gICAgLy8gT3B0aW9uYWxQYXJhbWV0ZXJzVHlwZSA6PVxuICAgIC8vICAgICBPcHRpb25hbFBhcmFtZXRlclR5cGVcbiAgICAvLyAgIHwgT3B0aW9uYWxQYXJhbWV0ZXJUeXBlLCBPcHRpb25hbFBhcmFtZXRlcnNUeXBlXG4gICAgLy9cbiAgICAvLyBPcHRpb25hbFBhcmFtZXRlclR5cGUgOj0gUGFyYW1ldGVyVHlwZT1cbiAgICAvL1xuICAgIC8vIFBhcmFtZXRlclR5cGUgOj0gVHlwZUV4cHJlc3Npb24gfCBJZGVudGlmaWVyICc6JyBUeXBlRXhwcmVzc2lvblxuICAgIC8vXG4gICAgLy8gSWRlbnRpZmllciBpcyBcIm5ld1wiIG9yIFwidGhpc1wiXG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXJzVHlwZSgpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IFtdLCBvcHRpb25hbFNlcXVlbmNlID0gZmFsc2UsIGV4cHIsIHJlc3QgPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAodG9rZW4gIT09IFRva2VuLlJQQVJFTikge1xuICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5SRVNUKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVzdFBhcmFtZXRlclR5cGVcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLlJFU1QpO1xuICAgICAgICAgICAgICAgIHJlc3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHByID0gcGFyc2VUeXBlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4Lk5hbWVFeHByZXNzaW9uICYmIHRva2VuID09PSBUb2tlbi5DT0xPTikge1xuICAgICAgICAgICAgICAgIC8vIElkZW50aWZpZXIgJzonIFR5cGVFeHByZXNzaW9uXG4gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT0xPTik7XG4gICAgICAgICAgICAgICAgZXhwciA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlBhcmFtZXRlclR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGV4cHIubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VUeXBlRXhwcmVzc2lvbigpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uRVFVQUwpIHtcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkVRVUFMKTtcbiAgICAgICAgICAgICAgICBleHByID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguT3B0aW9uYWxUeXBlLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBvcHRpb25hbFNlcXVlbmNlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgICAgICBleHByID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmVzdFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW1zLnB1c2goZXhwcik7XG4gICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikge1xuICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5DT01NQSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvblR5cGUgOj0gJ2Z1bmN0aW9uJyBGdW5jdGlvblNpZ25hdHVyZVR5cGVcbiAgICAvL1xuICAgIC8vIEZ1bmN0aW9uU2lnbmF0dXJlVHlwZSA6PVxuICAgIC8vICAgfCBUeXBlUGFyYW1ldGVycyAnKCcgJyknIFJlc3VsdFR5cGVcbiAgICAvLyAgIHwgVHlwZVBhcmFtZXRlcnMgJygnIFBhcmFtZXRlcnNUeXBlICcpJyBSZXN1bHRUeXBlXG4gICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAndGhpcycgJzonIFR5cGVOYW1lICcpJyBSZXN1bHRUeXBlXG4gICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAndGhpcycgJzonIFR5cGVOYW1lICcsJyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZVxuICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25UeXBlKCkge1xuICAgICAgICB2YXIgaXNOZXcsIHRoaXNCaW5kaW5nLCBwYXJhbXMsIHJlc3VsdCwgZm5UeXBlO1xuICAgICAgICB1dGlsaXR5LmFzc2VydCh0b2tlbiA9PT0gVG9rZW4uTkFNRSAmJiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJywgJ0Z1bmN0aW9uVHlwZSBzaG91bGQgc3RhcnQgd2l0aCBcXCdmdW5jdGlvblxcJycpO1xuICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpO1xuXG4gICAgICAgIC8vIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVyIGlzIG5vdCBpbXBsZW1lbnRpbmcgVHlwZVBhcmFtZXRlcnMuXG4gICAgICAgIC8vIFNvIHdlIGRvIG5vdC4gaWYgd2UgZG9uJ3QgZ2V0ICcoJywgd2Ugc2VlIGl0IGFzIGVycm9yLlxuICAgICAgICBleHBlY3QoVG9rZW4uTFBBUkVOKTtcblxuICAgICAgICBpc05ldyA9IGZhbHNlO1xuICAgICAgICBwYXJhbXMgPSBbXTtcbiAgICAgICAgdGhpc0JpbmRpbmcgPSBudWxsO1xuICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikge1xuICAgICAgICAgICAgLy8gUGFyYW1ldGVyc1R5cGUgb3IgJ3RoaXMnXG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLk5BTUUgJiZcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSAndGhpcycgfHwgdmFsdWUgPT09ICduZXcnKSkge1xuICAgICAgICAgICAgICAgIC8vICd0aGlzJyBvciAnbmV3J1xuICAgICAgICAgICAgICAgIC8vICduZXcnIGlzIENsb3N1cmUgQ29tcGlsZXIgZXh0ZW5zaW9uXG4gICAgICAgICAgICAgICAgaXNOZXcgPSB2YWx1ZSA9PT0gJ25ldyc7XG4gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uQ09MT04pO1xuICAgICAgICAgICAgICAgIHRoaXNCaW5kaW5nID0gcGFyc2VUeXBlTmFtZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09NTUEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1ldGVyc1R5cGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1ldGVyc1R5cGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChUb2tlbi5SUEFSRU4pO1xuXG4gICAgICAgIHJlc3VsdCA9IG51bGw7XG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09MT04pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlUmVzdWx0VHlwZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm5UeXBlID0ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4LkZ1bmN0aW9uVHlwZSxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgcmVzdWx0OiByZXN1bHRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXNCaW5kaW5nKSB7XG4gICAgICAgICAgICAvLyBhdm9pZCBhZGRpbmcgbnVsbCAnbmV3JyBhbmQgJ3RoaXMnIHByb3BlcnRpZXNcbiAgICAgICAgICAgIGZuVHlwZVsndGhpcyddID0gdGhpc0JpbmRpbmc7XG4gICAgICAgICAgICBpZiAoaXNOZXcpIHtcbiAgICAgICAgICAgICAgICBmblR5cGVbJ25ldyddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm5UeXBlO1xuICAgIH1cblxuICAgIC8vIEJhc2ljVHlwZUV4cHJlc3Npb24gOj1cbiAgICAvLyAgICAgJyonXG4gICAgLy8gICB8ICdudWxsJ1xuICAgIC8vICAgfCAndW5kZWZpbmVkJ1xuICAgIC8vICAgfCBUeXBlTmFtZVxuICAgIC8vICAgfCBGdW5jdGlvblR5cGVcbiAgICAvLyAgIHwgVW5pb25UeXBlXG4gICAgLy8gICB8IFJlY29yZFR5cGVcbiAgICAvLyAgIHwgQXJyYXlUeXBlXG4gICAgZnVuY3Rpb24gcGFyc2VCYXNpY1R5cGVFeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgY29udGV4dDtcbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlIFRva2VuLlNUQVI6XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLlNUQVIpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQWxsTGl0ZXJhbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICBjYXNlIFRva2VuLkxQQVJFTjpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVVuaW9uVHlwZSgpO1xuXG4gICAgICAgIGNhc2UgVG9rZW4uTEJSQUNLOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlUeXBlKCk7XG5cbiAgICAgICAgY2FzZSBUb2tlbi5MQlJBQ0U6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmRUeXBlKCk7XG5cbiAgICAgICAgY2FzZSBUb2tlbi5OQU1FOlxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsTGl0ZXJhbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmRlZmluZWRMaXRlcmFsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGV4dCA9IENvbnRleHQuc2F2ZSgpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25UeXBlKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVOYW1lKCk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHlwZUV4cHJlc3Npb24gOj1cbiAgICAvLyAgICAgQmFzaWNUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgfCAnPycgQmFzaWNUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgfCAnIScgQmFzaWNUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgfCBCYXNpY1R5cGVFeHByZXNzaW9uICc/J1xuICAgIC8vICAgfCBCYXNpY1R5cGVFeHByZXNzaW9uICchJ1xuICAgIC8vICAgfCAnPydcbiAgICAvLyAgIHwgQmFzaWNUeXBlRXhwcmVzc2lvbiAnW10nXG4gICAgZnVuY3Rpb24gcGFyc2VUeXBlRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIGV4cHI7XG5cbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5RVUVTVElPTikge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5RVUVTVElPTik7XG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTU1BIHx8IHRva2VuID09PSBUb2tlbi5FUVVBTCB8fCB0b2tlbiA9PT0gVG9rZW4uUkJSQUNFIHx8XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID09PSBUb2tlbi5SUEFSRU4gfHwgdG9rZW4gPT09IFRva2VuLlBJUEUgfHwgdG9rZW4gPT09IFRva2VuLkVPRiB8fFxuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9PT0gVG9rZW4uUkJSQUNLIHx8IHRva2VuID09PSBUb2tlbi5HVCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsYWJsZUxpdGVyYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbGFibGVUeXBlLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlQmFzaWNUeXBlRXhwcmVzc2lvbigpLFxuICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQkFORykge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5CQU5HKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5vbk51bGxhYmxlVHlwZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBwYXJzZUJhc2ljVHlwZUV4cHJlc3Npb24oKSxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gcGFyc2VCYXNpY1R5cGVFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQkFORykge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5CQU5HKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5vbk51bGxhYmxlVHlwZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICAgICAgICAgIHByZWZpeDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlFVRVNUSU9OKSB7XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLlFVRVNUSU9OKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxlVHlwZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICAgICAgICAgIHByZWZpeDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkxCUkFDSykge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5MQlJBQ0spO1xuICAgICAgICAgICAgZXhwZWN0KFRva2VuLlJCUkFDSywgJ2V4cGVjdGVkIGFuIGFycmF5LXN0eWxlIHR5cGUgZGVjbGFyYXRpb24gKCcgKyB2YWx1ZSArICdbXSknKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlR5cGVBcHBsaWNhdGlvbixcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1lRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FycmF5J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25zOiBbZXhwcl1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICAvLyBUb3BMZXZlbFR5cGVFeHByZXNzaW9uIDo9XG4gICAgLy8gICAgICBUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgIHwgVHlwZVVuaW9uTGlzdFxuICAgIC8vXG4gICAgLy8gVGhpcyBydWxlIGlzIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVyIGV4dGVuc2lvbiwgbm90IEVTNFxuICAgIC8vIGxpa2UsXG4gICAgLy8gICB7IG51bWJlciB8IHN0cmluZyB9XG4gICAgLy8gSWYgc3RyaWN0IHRvIEVTNCwgd2Ugc2hvdWxkIHdyaXRlIGl0IGFzXG4gICAgLy8gICB7IChudW1iZXJ8c3RyaW5nKSB9XG4gICAgZnVuY3Rpb24gcGFyc2VUb3AoKSB7XG4gICAgICAgIHZhciBleHByLCBlbGVtZW50cztcblxuICAgICAgICBleHByID0gcGFyc2VUeXBlRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlBJUEUpIHtcbiAgICAgICAgICAgIHJldHVybiBleHByO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudHMgPSBbIGV4cHIgXTtcbiAgICAgICAgY29uc3VtZShUb2tlbi5QSVBFKTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUElQRSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5QSVBFKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTeW50YXguVW5pb25UeXBlLFxuICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VUb3BQYXJhbVR5cGUoKSB7XG4gICAgICAgIHZhciBleHByO1xuXG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SRVNUKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlc3RUeXBlLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlVG9wKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gcGFyc2VUb3AoKTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5FUVVBTCkge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5FUVVBTCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5PcHRpb25hbFR5cGUsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwclxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlVHlwZShzcmMsIG9wdCkge1xuICAgICAgICB2YXIgZXhwcjtcblxuICAgICAgICBzb3VyY2UgPSBzcmM7XG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgcHJldmlvdXMgPSAwO1xuXG4gICAgICAgIG5leHQoKTtcbiAgICAgICAgZXhwciA9IHBhcnNlVG9wKCk7XG5cbiAgICAgICAgaWYgKG9wdCAmJiBvcHQubWlkc3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsXG4gICAgICAgICAgICAgICAgaW5kZXg6IHByZXZpb3VzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcignbm90IHJlYWNoIHRvIEVPRicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbVR5cGUoc3JjLCBvcHQpIHtcbiAgICAgICAgdmFyIGV4cHI7XG5cbiAgICAgICAgc291cmNlID0gc3JjO1xuICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIHByZXZpb3VzID0gMDtcblxuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVRvcFBhcmFtVHlwZSgpO1xuXG4gICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICAgICAgICAgIGluZGV4OiBwcmV2aW91c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ25vdCByZWFjaCB0byBFT0YnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ2lmeUltcGwobm9kZSwgY29tcGFjdCwgdG9wTGV2ZWwpIHtcbiAgICAgICAgdmFyIHJlc3VsdCwgaSwgaXo7XG5cbiAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVMaXRlcmFsOlxuICAgICAgICAgICAgcmVzdWx0ID0gJz8nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguQWxsTGl0ZXJhbDpcbiAgICAgICAgICAgIHJlc3VsdCA9ICcqJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4Lk51bGxMaXRlcmFsOlxuICAgICAgICAgICAgcmVzdWx0ID0gJ251bGwnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguVW5kZWZpbmVkTGl0ZXJhbDpcbiAgICAgICAgICAgIHJlc3VsdCA9ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguVm9pZExpdGVyYWw6XG4gICAgICAgICAgICByZXN1bHQgPSAndm9pZCc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5VbmlvblR5cGU6XG4gICAgICAgICAgICBpZiAoIXRvcExldmVsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJygnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmVsZW1lbnRzW2ldLCBjb21wYWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICd8JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdG9wTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguQXJyYXlUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gJ1snO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmVsZW1lbnRzW2ldLCBjb21wYWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAnLCAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSAnXSc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5SZWNvcmRUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gJ3snO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmZpZWxkcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5maWVsZHNbaV0sIGNvbXBhY3QpO1xuICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICE9PSBpeikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ICs9ICd9JztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LkZpZWxkVHlwZTpcbiAgICAgICAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5rZXkgKyAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3RyaW5naWZ5SW1wbChub2RlLnZhbHVlLCBjb21wYWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5rZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5GdW5jdGlvblR5cGU6XG4gICAgICAgICAgICByZXN1bHQgPSBjb21wYWN0ID8gJ2Z1bmN0aW9uKCcgOiAnZnVuY3Rpb24gKCc7XG5cbiAgICAgICAgICAgIGlmIChub2RlWyd0aGlzJ10pIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZVsnbmV3J10pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IChjb21wYWN0ID8gJ25ldzonIDogJ25ldzogJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IChjb21wYWN0ID8gJ3RoaXM6JyA6ICd0aGlzOiAnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlWyd0aGlzJ10sIGNvbXBhY3QpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyYW1zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUucGFyYW1zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLnBhcmFtc1tpXSwgY29tcGFjdCk7XG4gICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCArPSAnKSc7XG5cbiAgICAgICAgICAgIGlmIChub2RlLnJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3RyaW5naWZ5SW1wbChub2RlLnJlc3VsdCwgY29tcGFjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5QYXJhbWV0ZXJUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5uYW1lICsgKGNvbXBhY3QgPyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LlJlc3RUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gJy4uLic7XG4gICAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4Lk5vbk51bGxhYmxlVHlwZTpcbiAgICAgICAgICAgIGlmIChub2RlLnByZWZpeCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9ICchJyArIHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpICsgJyEnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguT3B0aW9uYWxUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpICsgJz0nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVUeXBlOlxuICAgICAgICAgICAgaWYgKG5vZGUucHJlZml4KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJz8nICsgc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnPyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5OYW1lRXhwcmVzc2lvbjpcbiAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUubmFtZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LlR5cGVBcHBsaWNhdGlvbjpcbiAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KSArICcuPCc7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUuYXBwbGljYXRpb25zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmFwcGxpY2F0aW9uc1tpXSwgY29tcGFjdCk7XG4gICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gJz4nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcignVW5rbm93biB0eXBlICcgKyBub2RlLnR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdpZnkobm9kZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUltcGwobm9kZSwgb3B0aW9ucy5jb21wYWN0LCBvcHRpb25zLnRvcExldmVsKTtcbiAgICB9XG5cbiAgICBleHBvcnRzLnBhcnNlVHlwZSA9IHBhcnNlVHlwZTtcbiAgICBleHBvcnRzLnBhcnNlUGFyYW1UeXBlID0gcGFyc2VQYXJhbVR5cGU7XG4gICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7XG4gICAgZXhwb3J0cy5TeW50YXggPSBTeW50YXg7XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBWRVJTSU9OO1xuXG4gICAgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4gICAgZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAgIGZ1bmN0aW9uIERvY3RyaW5lRXJyb3IobWVzc2FnZSkge1xuICAgICAgICB0aGlzLm5hbWUgPSAnRG9jdHJpbmVFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuICAgIERvY3RyaW5lRXJyb3IucHJvdG90eXBlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIE1pZGRsZSA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAgICAgTWlkZGxlLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcbiAgICAgICAgcmV0dXJuIG5ldyBNaWRkbGUoKTtcbiAgICB9KCkpO1xuICAgIERvY3RyaW5lRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG9jdHJpbmVFcnJvcjtcbiAgICBleHBvcnRzLkRvY3RyaW5lRXJyb3IgPSBEb2N0cmluZUVycm9yO1xuXG4gICAgZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBEb2N0cmluZUVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBleHBvcnRzLnRocm93RXJyb3IgPSB0aHJvd0Vycm9yO1xuXG4gICAgZXhwb3J0cy5hc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbn0oKSk7XG5cbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgJ0FTIElTJ1xuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGZ1bmN0aW9uIGlzRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdBcnJheUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnQXNzaWdubWVudEV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnQmluYXJ5RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdDYWxsRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdDb25kaXRpb25hbEV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnRnVuY3Rpb25FeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ0lkZW50aWZpZXInOlxuICAgICAgICAgICAgY2FzZSAnTGl0ZXJhbCc6XG4gICAgICAgICAgICBjYXNlICdMb2dpY2FsRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ05ld0V4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnT2JqZWN0RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdTZXF1ZW5jZUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnVGhpc0V4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1VwZGF0ZUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0l0ZXJhdGlvblN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdEb1doaWxlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0ZvckluU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0ZvclN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdXaGlsZVN0YXRlbWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Jsb2NrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0JyZWFrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0NvbnRpbnVlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0RlYnVnZ2VyU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0RvV2hpbGVTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRW1wdHlTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRXhwcmVzc2lvblN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdGb3JJblN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdGb3JTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnSWZTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnTGFiZWxlZFN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdSZXR1cm5TdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnU3dpdGNoU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1Rocm93U3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1RyeVN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdWYXJpYWJsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1doaWxlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1dpdGhTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NvdXJjZUVsZW1lbnQobm9kZSkge1xuICAgICAgcmV0dXJuIGlzU3RhdGVtZW50KG5vZGUpIHx8IG5vZGUgIT0gbnVsbCAmJiBub2RlLnR5cGUgPT09ICdGdW5jdGlvbkRlY2xhcmF0aW9uJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFpbGluZ1N0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0lmU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY29uc2VxdWVudDtcblxuICAgICAgICBjYXNlICdMYWJlbGVkU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnRm9yU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnRm9ySW5TdGF0ZW1lbnQnOlxuICAgICAgICBjYXNlICdXaGlsZVN0YXRlbWVudCc6XG4gICAgICAgIGNhc2UgJ1dpdGhTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Byb2JsZW1hdGljSWZTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB2YXIgY3VycmVudDtcblxuICAgICAgICBpZiAobm9kZS50eXBlICE9PSAnSWZTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gbm9kZS5jb25zZXF1ZW50O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC50eXBlID09PSAnSWZTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuYWx0ZXJuYXRlID09IG51bGwpICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSB0cmFpbGluZ1N0YXRlbWVudChjdXJyZW50KTtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBpc0V4cHJlc3Npb246IGlzRXhwcmVzc2lvbixcbiAgICAgICAgaXNTdGF0ZW1lbnQ6IGlzU3RhdGVtZW50LFxuICAgICAgICBpc0l0ZXJhdGlvblN0YXRlbWVudDogaXNJdGVyYXRpb25TdGF0ZW1lbnQsXG4gICAgICAgIGlzU291cmNlRWxlbWVudDogaXNTb3VyY2VFbGVtZW50LFxuICAgICAgICBpc1Byb2JsZW1hdGljSWZTdGF0ZW1lbnQ6IGlzUHJvYmxlbWF0aWNJZlN0YXRlbWVudCxcblxuICAgICAgICB0cmFpbGluZ1N0YXRlbWVudDogdHJhaWxpbmdTdGF0ZW1lbnRcbiAgICB9O1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxNCBJdmFuIE5pa3VsaW4gPGlmYWFhbkBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgUmVnZXgsIE5PTl9BU0NJSV9XSElURVNQQUNFUztcblxuICAgIC8vIFNlZSBgdG9vbHMvZ2VuZXJhdGUtaWRlbnRpZmllci1yZWdleC5qc2AuXG4gICAgUmVnZXggPSB7XG4gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiBuZXcgUmVnRXhwKCdbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk3N1xcdTA5NzktXFx1MDk3RlxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGMFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjk3XFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE4MC1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQkMwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdJyksXG4gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5ldyBSZWdFeHAoJ1tcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDMwMC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0ODMtXFx1MDQ4N1xcdTA0OEEtXFx1MDUyN1xcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjEwLVxcdTA2MUFcXHUwNjIwLVxcdTA2NjlcXHUwNjZFLVxcdTA2RDNcXHUwNkQ1LVxcdTA2RENcXHUwNkRGLVxcdTA2RThcXHUwNkVBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMC1cXHUwNzRBXFx1MDc0RC1cXHUwN0IxXFx1MDdDMC1cXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgyRFxcdTA4NDAtXFx1MDg1QlxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOEU0LVxcdTA4RkVcXHUwOTAwLVxcdTA5NjNcXHUwOTY2LVxcdTA5NkZcXHUwOTcxLVxcdTA5NzdcXHUwOTc5LVxcdTA5N0ZcXHUwOTgxLVxcdTA5ODNcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJDLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRVxcdTA5RDdcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFM1xcdTA5RTYtXFx1MDlGMVxcdTBBMDEtXFx1MEEwM1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEEzQ1xcdTBBM0UtXFx1MEE0MlxcdTBBNDdcXHUwQTQ4XFx1MEE0Qi1cXHUwQTREXFx1MEE1MVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTY2LVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkMtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRDBcXHUwQUUwLVxcdTBBRTNcXHUwQUU2LVxcdTBBRUZcXHUwQjAxLVxcdTBCMDNcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzQy1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYzXFx1MEI2Ni1cXHUwQjZGXFx1MEI3MVxcdTBCODJcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCQkUtXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDRFxcdTBCRDBcXHUwQkQ3XFx1MEJFNi1cXHUwQkVGXFx1MEMwMS1cXHUwQzAzXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRC1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzU4XFx1MEM1OVxcdTBDNjAtXFx1MEM2M1xcdTBDNjYtXFx1MEM2RlxcdTBDODJcXHUwQzgzXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCQy1cXHUwQ0M0XFx1MENDNi1cXHUwQ0M4XFx1MENDQS1cXHUwQ0NEXFx1MENENVxcdTBDRDZcXHUwQ0RFXFx1MENFMC1cXHUwQ0UzXFx1MENFNi1cXHUwQ0VGXFx1MENGMVxcdTBDRjJcXHUwRDAyXFx1MEQwM1xcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0QtXFx1MEQ0NFxcdTBENDYtXFx1MEQ0OFxcdTBENEEtXFx1MEQ0RVxcdTBENTdcXHUwRDYwLVxcdTBENjNcXHUwRDY2LVxcdTBENkZcXHUwRDdBLVxcdTBEN0ZcXHUwRDgyXFx1MEQ4M1xcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEUwMS1cXHUwRTNBXFx1MEU0MC1cXHUwRTRFXFx1MEU1MC1cXHUwRTU5XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjlcXHUwRUJCLVxcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVDOC1cXHUwRUNEXFx1MEVEMC1cXHUwRUQ5XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGMThcXHUwRjE5XFx1MEYyMC1cXHUwRjI5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRS1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY3MS1cXHUwRjg0XFx1MEY4Ni1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMDAtXFx1MTA0OVxcdTEwNTAtXFx1MTA5RFxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzVELVxcdTEzNUZcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjBcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTRcXHUxNzIwLVxcdTE3MzRcXHUxNzQwLVxcdTE3NTNcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzcyXFx1MTc3M1xcdTE3ODAtXFx1MTdEM1xcdTE3RDdcXHUxN0RDXFx1MTdERFxcdTE3RTAtXFx1MTdFOVxcdTE4MEItXFx1MTgwRFxcdTE4MTAtXFx1MTgxOVxcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5MjAtXFx1MTkyQlxcdTE5MzAtXFx1MTkzQlxcdTE5NDYtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTE5RDAtXFx1MTlEOVxcdTFBMDAtXFx1MUExQlxcdTFBMjAtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0YtXFx1MUE4OVxcdTFBOTAtXFx1MUE5OVxcdTFBQTdcXHUxQjAwLVxcdTFCNEJcXHUxQjUwLVxcdTFCNTlcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCRjNcXHUxQzAwLVxcdTFDMzdcXHUxQzQwLVxcdTFDNDlcXHUxQzRELVxcdTFDN0RcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRjZcXHUxRDAwLVxcdTFERTZcXHUxREZDLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjAwQ1xcdTIwMERcXHUyMDNGXFx1MjA0MFxcdTIwNTRcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIwRDAtXFx1MjBEQ1xcdTIwRTFcXHUyMEU1LVxcdTIwRjBcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE2MC1cXHUyMTg4XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ3Ri1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkRFMC1cXHUyREZGXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyRlxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOTlcXHUzMDlBXFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkNDXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjJCXFx1QTY0MC1cXHVBNjZGXFx1QTY3NC1cXHVBNjdEXFx1QTY3Ri1cXHVBNjk3XFx1QTY5Ri1cXHVBNkYxXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODI3XFx1QTg0MC1cXHVBODczXFx1QTg4MC1cXHVBOEM0XFx1QThEMC1cXHVBOEQ5XFx1QThFMC1cXHVBOEY3XFx1QThGQlxcdUE5MDAtXFx1QTkyRFxcdUE5MzAtXFx1QTk1M1xcdUE5NjAtXFx1QTk3Q1xcdUE5ODAtXFx1QTlDMFxcdUE5Q0YtXFx1QTlEOVxcdUFBMDAtXFx1QUEzNlxcdUFBNDAtXFx1QUE0RFxcdUFBNTAtXFx1QUE1OVxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdCXFx1QUE4MC1cXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVGXFx1QUFGMi1cXHVBQUY2XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUJDMC1cXHVBQkVBXFx1QUJFQ1xcdUFCRURcXHVBQkYwLVxcdUFCRjlcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFELVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyNlxcdUZFMzNcXHVGRTM0XFx1RkU0RC1cXHVGRTRGXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYxMC1cXHVGRjE5XFx1RkYyMS1cXHVGRjNBXFx1RkYzRlxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ10nKVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gaXNEZWNpbWFsRGlnaXQoY2gpIHx8ICAgIC8vIDAuLjlcbiAgICAgICAgICAgICg5NyA8PSBjaCAmJiBjaCA8PSAxMDIpIHx8ICAvLyBhLi5mXG4gICAgICAgICAgICAoNjUgPD0gY2ggJiYgY2ggPD0gNzApOyAgICAgLy8gQS4uRlxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2N0YWxEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU1KTsgICAvLyAwLi43XG4gICAgfVxuXG4gICAgLy8gNy4yIFdoaXRlIFNwYWNlXG5cbiAgICBOT05fQVNDSUlfV0hJVEVTUEFDRVMgPSBbXG4gICAgICAgIDB4MTY4MCwgMHgxODBFLFxuICAgICAgICAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSxcbiAgICAgICAgMHgyMDJGLCAweDIwNUYsXG4gICAgICAgIDB4MzAwMCxcbiAgICAgICAgMHhGRUZGXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkge1xuICAgICAgICByZXR1cm4gKGNoID09PSAweDIwKSB8fCAoY2ggPT09IDB4MDkpIHx8IChjaCA9PT0gMHgwQikgfHwgKGNoID09PSAweDBDKSB8fCAoY2ggPT09IDB4QTApIHx8XG4gICAgICAgICAgICAoY2ggPj0gMHgxNjgwICYmIE5PTl9BU0NJSV9XSElURVNQQUNFUy5pbmRleE9mKGNoKSA+PSAwKTtcbiAgICB9XG5cbiAgICAvLyA3LjMgTGluZSBUZXJtaW5hdG9yc1xuXG4gICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihjaCkge1xuICAgICAgICByZXR1cm4gKGNoID09PSAweDBBKSB8fCAoY2ggPT09IDB4MEQpIHx8IChjaCA9PT0gMHgyMDI4KSB8fCAoY2ggPT09IDB4MjAyOSk7XG4gICAgfVxuXG4gICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzXG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgICAgIC8vIGEuLnpcbiAgICAgICAgICAgIChjaCA+PSA2NSAmJiBjaCA8PSA5MCkgfHwgICAgICAgICAvLyBBLi5aXG4gICAgICAgICAgICAoY2ggPT09IDM2KSB8fCAoY2ggPT09IDk1KSB8fCAgICAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA9PT0gOTIpIHx8ICAgICAgICAgICAgICAgICAgICAvLyBcXCAoYmFja3NsYXNoKVxuICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFydChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgICAgIC8vIGEuLnpcbiAgICAgICAgICAgIChjaCA+PSA2NSAmJiBjaCA8PSA5MCkgfHwgICAgICAgICAvLyBBLi5aXG4gICAgICAgICAgICAoY2ggPj0gNDggJiYgY2ggPD0gNTcpIHx8ICAgICAgICAgLy8gMC4uOVxuICAgICAgICAgICAgKGNoID09PSAzNikgfHwgKGNoID09PSA5NSkgfHwgICAgIC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpXG4gICAgICAgICAgICAoY2ggPT09IDkyKSB8fCAgICAgICAgICAgICAgICAgICAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfVxuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIGlzRGVjaW1hbERpZ2l0OiBpc0RlY2ltYWxEaWdpdCxcbiAgICAgICAgaXNIZXhEaWdpdDogaXNIZXhEaWdpdCxcbiAgICAgICAgaXNPY3RhbERpZ2l0OiBpc09jdGFsRGlnaXQsXG4gICAgICAgIGlzV2hpdGVTcGFjZTogaXNXaGl0ZVNwYWNlLFxuICAgICAgICBpc0xpbmVUZXJtaW5hdG9yOiBpc0xpbmVUZXJtaW5hdG9yLFxuICAgICAgICBpc0lkZW50aWZpZXJTdGFydDogaXNJZGVudGlmaWVyU3RhcnQsXG4gICAgICAgIGlzSWRlbnRpZmllclBhcnQ6IGlzSWRlbnRpZmllclBhcnRcbiAgICB9O1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGNvZGUgPSByZXF1aXJlKCcuL2NvZGUnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZEVTNihpZCkge1xuICAgICAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICAgIGNhc2UgJ2ltcGxlbWVudHMnOlxuICAgICAgICBjYXNlICdpbnRlcmZhY2UnOlxuICAgICAgICBjYXNlICdwYWNrYWdlJzpcbiAgICAgICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICAgIGNhc2UgJ3Byb3RlY3RlZCc6XG4gICAgICAgIGNhc2UgJ3B1YmxpYyc6XG4gICAgICAgIGNhc2UgJ3N0YXRpYyc6XG4gICAgICAgIGNhc2UgJ2xldCc6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzS2V5d29yZEVTNShpZCwgc3RyaWN0KSB7XG4gICAgICAgIC8vIHlpZWxkIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBrZXl3b3JkIHVuZGVyIG5vbi1zdHJpY3QgbW9kZS5cbiAgICAgICAgaWYgKCFzdHJpY3QgJiYgaWQgPT09ICd5aWVsZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNLZXl3b3JkRVM2KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzS2V5d29yZEVTNihpZCwgc3RyaWN0KSB7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkRVM2KGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaWYnKSB8fCAoaWQgPT09ICdpbicpIHx8IChpZCA9PT0gJ2RvJyk7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd2YXInKSB8fCAoaWQgPT09ICdmb3InKSB8fCAoaWQgPT09ICduZXcnKSB8fCAoaWQgPT09ICd0cnknKTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlkID09PSAnY2FzZScpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9PT0gJ3dpdGgnKSB8fCAoaWQgPT09ICdlbnVtJyk7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09PSAnY2F0Y2gnKSB8fFxuICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAnY29uc3QnKSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAnY2xhc3MnKSB8fCAoaWQgPT09ICdzdXBlcicpO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlkID09PSAnZGVsZXRlJykgfHxcbiAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAoaWQgPT09ICdleHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5JykgfHwgKGlkID09PSAnZXh0ZW5kcycpO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdjb250aW51ZScpIHx8IChpZCA9PT0gJ2RlYnVnZ2VyJyk7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaW5zdGFuY2VvZicpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSZXNlcnZlZFdvcmRFUzUoaWQsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gaWQgPT09ICdudWxsJyB8fCBpZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFsc2UnIHx8IGlzS2V5d29yZEVTNShpZCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Jlc2VydmVkV29yZEVTNihpZCwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBpZCA9PT0gJ251bGwnIHx8IGlkID09PSAndHJ1ZScgfHwgaWQgPT09ICdmYWxzZScgfHwgaXNLZXl3b3JkRVM2KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVzdHJpY3RlZFdvcmQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkID09PSAnZXZhbCcgfHwgaWQgPT09ICdhcmd1bWVudHMnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllck5hbWUoaWQpIHtcbiAgICAgICAgdmFyIGksIGl6LCBjaDtcblxuICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjaCA9IGlkLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIGlmICghY29kZS5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgY2ggPT09IDkyKSB7ICAvLyBcXCAoYmFja3NsYXNoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMSwgaXogPSBpZC5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICBjaCA9IGlkLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBpZiAoIWNvZGUuaXNJZGVudGlmaWVyUGFydChjaCkgfHwgY2ggPT09IDkyKSB7ICAvLyBcXCAoYmFja3NsYXNoKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJFUzUoaWQsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gaXNJZGVudGlmaWVyTmFtZShpZCkgJiYgIWlzUmVzZXJ2ZWRXb3JkRVM1KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllckVTNihpZCwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBpc0lkZW50aWZpZXJOYW1lKGlkKSAmJiAhaXNSZXNlcnZlZFdvcmRFUzYoaWQsIHN0cmljdCk7XG4gICAgfVxuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIGlzS2V5d29yZEVTNTogaXNLZXl3b3JkRVM1LFxuICAgICAgICBpc0tleXdvcmRFUzY6IGlzS2V5d29yZEVTNixcbiAgICAgICAgaXNSZXNlcnZlZFdvcmRFUzU6IGlzUmVzZXJ2ZWRXb3JkRVM1LFxuICAgICAgICBpc1Jlc2VydmVkV29yZEVTNjogaXNSZXNlcnZlZFdvcmRFUzYsXG4gICAgICAgIGlzUmVzdHJpY3RlZFdvcmQ6IGlzUmVzdHJpY3RlZFdvcmQsXG4gICAgICAgIGlzSWRlbnRpZmllck5hbWU6IGlzSWRlbnRpZmllck5hbWUsXG4gICAgICAgIGlzSWRlbnRpZmllckVTNTogaXNJZGVudGlmaWVyRVM1LFxuICAgICAgICBpc0lkZW50aWZpZXJFUzY6IGlzSWRlbnRpZmllckVTNlxuICAgIH07XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGV4cG9ydHMuYXN0ID0gcmVxdWlyZSgnLi9hc3QnKTtcbiAgICBleHBvcnRzLmNvZGUgPSByZXF1aXJlKCcuL2NvZGUnKTtcbiAgICBleHBvcnRzLmtleXdvcmQgPSByZXF1aXJlKCcuL2tleXdvcmQnKTtcbn0oKSk7XG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIiwibW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJkb2N0cmluZVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiSlNEb2MgcGFyc2VyXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9Db25zdGVsbGF0aW9uL2RvY3RyaW5lLmh0bWxcIixcbiAgXCJtYWluXCI6IFwibGliL2RvY3RyaW5lLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjAuNy4wXCIsXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0wLjEwLjBcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHtcbiAgICBcImxpYlwiOiBcIi4vbGliXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJsaWJcIixcbiAgICBcIkxJQ0VOU0UuQlNEXCIsXG4gICAgXCJMSUNFTlNFLmNsb3N1cmUtY29tcGlsZXJcIixcbiAgICBcIkxJQ0VOU0UuZXNwcmltYVwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJtYWludGFpbmVyc1wiOiBbXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiY29uc3RlbGxhdGlvblwiLFxuICAgICAgXCJlbWFpbFwiOiBcInV0YXRhbmUudGVhQGdtYWlsLmNvbVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJuemFrYXNcIixcbiAgICAgIFwiZW1haWxcIjogXCJuaWNob2xhc0BuY3pjb25zdWx0aW5nLmNvbVwiXG4gICAgfVxuICBdLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXNsaW50L2RvY3RyaW5lLmdpdFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImNvdmVyYWxsc1wiOiBcIl4yLjExLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy44LjEwXCIsXG4gICAgXCJndWxwLWJ1bXBcIjogXCJeMC4xLjEzXCIsXG4gICAgXCJndWxwLWVzbGludFwiOiBcIl4wLjUuMFwiLFxuICAgIFwiZ3VscC1maWx0ZXJcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHAtZ2l0XCI6IFwiXjEuMC4wXCIsXG4gICAgXCJndWxwLWlzdGFuYnVsXCI6IFwiXjAuNi4wXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjkuMFwiLFxuICAgIFwiZ3VscC1tb2NoYVwiOiBcIl4yLjAuMFwiLFxuICAgIFwiZ3VscC10YWctdmVyc2lvblwiOiBcIl4xLjIuMVwiLFxuICAgIFwianNoaW50LXN0eWxpc2hcIjogXCJeMS4wLjBcIixcbiAgICBcInNob3VsZFwiOiBcIl41LjAuMVwiXG4gIH0sXG4gIFwibGljZW5zZXNcIjogW1xuICAgIHtcbiAgICAgIFwidHlwZVwiOiBcIkJTRFwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9lc2xpbnQvZG9jdHJpbmUvcmF3L21hc3Rlci9MSUNFTlNFLkJTRFwiXG4gICAgfVxuICBdLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwidGVzdFwiOiBcImd1bHBcIixcbiAgICBcInVuaXQtdGVzdFwiOiBcImd1bHAgdGVzdFwiLFxuICAgIFwibGludFwiOiBcImd1bHAgbGludFwiLFxuICAgIFwiY292ZXJhbGxzXCI6IFwiY2F0IC4vY292ZXJhZ2UvbGNvdi5pbmZvIHwgY292ZXJhbGxzICYmIHJtIC1yZiAuL2NvdmVyYWdlXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiZXN1dGlsc1wiOiBcIl4xLjEuNlwiLFxuICAgIFwiaXNhcnJheVwiOiBcIjAuMC4xXCJcbiAgfSxcbiAgXCJnaXRIZWFkXCI6IFwiMGQwNTllNDIyYmRmZDYzMGVhYTE1ZDU4MzU2N2M4NjY4OTIzZjdlNlwiLFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9kb2N0cmluZS9pc3N1ZXNcIlxuICB9LFxuICBcIl9pZFwiOiBcImRvY3RyaW5lQDAuNy4wXCIsXG4gIFwiX3NoYXN1bVwiOiBcImRjYzk1ODk4NTBiMDQzZDZlNThhYmUyNGI1NjFjY2Q1NzE3NmNmZDNcIixcbiAgXCJfZnJvbVwiOiBcImRvY3RyaW5lQCpcIixcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjEuNC4yOFwiLFxuICBcIl9ucG1Vc2VyXCI6IHtcbiAgICBcIm5hbWVcIjogXCJuemFrYXNcIixcbiAgICBcImVtYWlsXCI6IFwibmljaG9sYXNAbmN6Y29uc3VsdGluZy5jb21cIlxuICB9LFxuICBcImRpc3RcIjoge1xuICAgIFwic2hhc3VtXCI6IFwiZGNjOTU4OTg1MGIwNDNkNmU1OGFiZTI0YjU2MWNjZDU3MTc2Y2ZkM1wiLFxuICAgIFwidGFyYmFsbFwiOiBcImh0dHA6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9jdHJpbmUvLS9kb2N0cmluZS0wLjcuMC50Z3pcIlxuICB9LFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvY3RyaW5lLy0vZG9jdHJpbmUtMC43LjAudGd6XCJcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGVJbmRleChlbGVtZW50LCBuYW1lKSB7XG4gIGlmICghZWxlbWVudC5hdHRycykge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgbiA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50LmF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGVsZW1lbnQuYXR0cnNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWZmIFtlbGVtZW50XSBoYXMgdGhlIGF0dHJpYnV0ZSBbbmFtZV0sIGBmYWxzZWBcbiAqICAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBoYXNBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xuICByZXR1cm4gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSkgIT09IC0xO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gVGhlIHN0cmluZyB2YWx1ZSBvZiBhdHRyaWJ1dGUgYG5hbWVgLCBvciBgbnVsbGAuXG4gKi9cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lKSB7XG4gIHZhciBpID0gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSk7XG4gIGlmIChpID4gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5hdHRyc1tpXS52YWx1ZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpID0gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSk7XG4gIGlmIChpID4gLTEpIHtcbiAgICBlbGVtZW50LmF0dHJzW2ldLnZhbHVlID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5hdHRycy5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xuICB2YXIgaSA9IGdldEF0dHJpYnV0ZUluZGV4KGVsZW1lbnQsIG5hbWUpO1xuICBpZiAoaSA+IC0xKSB7XG4gICAgZWxlbWVudC5hdHRycy5zcGxpY2UoaSwgMSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzVGFnTmFtZShuYW1lKSB7XG4gIHZhciBuID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS50YWdOYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gbjtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHJlZ2V4Lm1hdGNoKHRhZ05hbWUpYCBmaW5kcyBhIG1hdGNoLlxuICpcbiAqIFRoaXMgd2lsbCB1c2UgdGhlIGxvd2VyY2FzZWQgdGFnTmFtZSBmb3IgY29tcGFyaXNvbi5cbiAqIFxuICogQHBhcmFtICB7UmVnRXhwfSByZWdleFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzTWF0Y2hpbmdUYWdOYW1lKHJlZ2V4KSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLnRhZ05hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3Qobm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNDbGFzcyhuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG4gICAgaWYgKCFhdHRyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBhdHRyLnNwbGl0KCcgJykuaW5kZXhPZihuYW1lKSA+IC0xO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjb2xsYXBzZVRleHRSYW5nZShwYXJlbnQsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRleHQgPSAnJztcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgdGV4dCArPSBnZXRUZXh0Q29udGVudChwYXJlbnQuY2hpbGROb2Rlc1tpXSk7XG4gIH1cbiAgcGFyZW50LmNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0LCAoZW5kIC0gc3RhcnQpICsgMSk7XG4gIGlmICh0ZXh0KSB7XG4gICAgdmFyIHRuID0gbmV3VGV4dE5vZGUodGV4dCk7XG4gICAgdG4ucGFyZW50Tm9kZSA9IHBhcmVudDtcbiAgICBwYXJlbnQuY2hpbGROb2Rlcy5zcGxpY2Uoc3RhcnQsIDAsIHRuKTtcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgdGV4dCBpbnNpZGUgYW4gZWxlbWVudFxuICpcbiAqIEVxdWl2YWxlbnQgdG8gYGVsZW1lbnQubm9ybWFsaXplKClgIGluIHRoZSBicm93c2VyXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvbm9ybWFsaXplXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShub2RlKSB7XG4gIGlmICghKGlzRWxlbWVudChub2RlKSB8fCBpc0RvY3VtZW50KG5vZGUpIHx8IGlzRG9jdW1lbnRGcmFnbWVudChub2RlKSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHRleHRSYW5nZVN0YXJ0ID0gLTE7XG4gIGZvciAodmFyIGkgPSBub2RlLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgbjsgaSA+PSAwOyBpLS0pIHtcbiAgICBuID0gbm9kZS5jaGlsZE5vZGVzW2ldO1xuICAgIGlmIChpc1RleHROb2RlKG4pKSB7XG4gICAgICBpZiAodGV4dFJhbmdlU3RhcnQgPT0gLTEpIHtcbiAgICAgICAgdGV4dFJhbmdlU3RhcnQgPSBpO1xuICAgICAgfVxuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgLy8gY29sbGFwc2UgbGVhZGluZyB0ZXh0IG5vZGVzXG4gICAgICAgIGNvbGxhcHNlVGV4dFJhbmdlKG5vZGUsIDAsIHRleHRSYW5nZVN0YXJ0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVjdXJzZVxuICAgICAgbm9ybWFsaXplKG4pO1xuICAgICAgLy8gY29sbGFwc2UgdGhlIHJhbmdlIGFmdGVyIHRoaXMgbm9kZVxuICAgICAgaWYgKHRleHRSYW5nZVN0YXJ0ID4gLTEpIHtcbiAgICAgICAgY29sbGFwc2VUZXh0UmFuZ2Uobm9kZSwgaSArIDEsIHRleHRSYW5nZVN0YXJ0KTtcbiAgICAgICAgdGV4dFJhbmdlU3RhcnQgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRleHQgdmFsdWUgb2YgYSBub2RlIG9yIGVsZW1lbnRcbiAqXG4gKiBFcXVpdmFsZW50IHRvIGBub2RlLnRleHRDb250ZW50YCBpbiB0aGUgYnJvd3NlclxuICovXG5mdW5jdGlvbiBnZXRUZXh0Q29udGVudChub2RlKSB7XG4gIGlmIChpc0NvbW1lbnROb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUuZGF0YTtcbiAgfVxuICBpZiAoaXNUZXh0Tm9kZShub2RlKSkge1xuICAgIHJldHVybiBub2RlLnZhbHVlO1xuICB9XG4gIHZhciBzdWJ0cmVlID0gbm9kZVdhbGtBbGwobm9kZSwgaXNUZXh0Tm9kZSk7XG4gIHJldHVybiBzdWJ0cmVlLm1hcChnZXRUZXh0Q29udGVudCkuam9pbignJyk7XG59XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0IHZhbHVlIG9mIGEgbm9kZSBvciBlbGVtZW50XG4gKlxuICogRXF1aXZhbGVudCB0byBgbm9kZS50ZXh0Q29udGVudCA9IHZhbHVlYCBpbiB0aGUgYnJvd3NlclxuICovXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudChub2RlLCB2YWx1ZSkge1xuICBpZiAoaXNDb21tZW50Tm9kZShub2RlKSkge1xuICAgIG5vZGUuZGF0YSA9IHZhbHVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUobm9kZSkpIHtcbiAgICBub2RlLnZhbHVlID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRuID0gbmV3VGV4dE5vZGUodmFsdWUpO1xuICAgIHRuLnBhcmVudE5vZGUgPSBub2RlO1xuICAgIG5vZGUuY2hpbGROb2RlcyA9IFt0bl07XG4gIH1cbn1cblxuLyoqXG4gKiBNYXRjaCB0aGUgdGV4dCBpbnNpZGUgYW4gZWxlbWVudCwgdGV4dG5vZGUsIG9yIGNvbW1lbnRcbiAqXG4gKiBOb3RlOiBub2RlV2Fsa0FsbCB3aXRoIGhhc1RleHRWYWx1ZSBtYXkgcmV0dXJuIGFuIHRleHRub2RlIGFuZCBpdHMgcGFyZW50IGlmXG4gKiB0aGUgdGV4dG5vZGUgaXMgdGhlIG9ubHkgY2hpbGQgaW4gdGhhdCBwYXJlbnQuXG4gKi9cbmZ1bmN0aW9uIGhhc1RleHRWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXRUZXh0Q29udGVudChub2RlKSA9PT0gdmFsdWU7XG4gIH07XG59XG5cbi8qKlxuICogT1IgYW4gYXJyYXkgb2YgcHJlZGljYXRlc1xuICovXG5mdW5jdGlvbiBPUigvKiAuLi5ydWxlcyAqLykge1xuICB2YXIgcnVsZXMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgcnVsZXNbaV0gPSBhcmd1bWVudHNbaV07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocnVsZXNbaV0obm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBBTkQgYW4gYXJyYXkgb2YgcHJlZGljYXRlc1xuICovXG5mdW5jdGlvbiBBTkQoLyogLi4ucnVsZXMgKi8pIHtcbiAgdmFyIHJ1bGVzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHJ1bGVzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFydWxlc1tpXShub2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuXG4vKipcbiAqIG5lZ2F0ZSBhbiBpbmRpdmlkdWFsIHByZWRpY2F0ZSwgb3IgYSBncm91cCB3aXRoIEFORCBvciBPUlxuICovXG5mdW5jdGlvbiBOT1QocHJlZGljYXRlRm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gIXByZWRpY2F0ZUZuKG5vZGUpO1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcmVkaWNhdGUgdGhhdCBtYXRjaGVzIGFueSBub2RlIHdpdGggYSBwYXJlbnQgbWF0Y2hpbmcgYHByZWRpY2F0ZUZuYC5cbiAqL1xuZnVuY3Rpb24gcGFyZW50TWF0Y2hlcyhwcmVkaWNhdGVGbikge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgd2hpbGUocGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwcmVkaWNhdGVGbihwYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzQXR0cihhdHRyKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUluZGV4KG5vZGUsIGF0dHIpID4gLTE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0F0dHJWYWx1ZShhdHRyLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobm9kZSwgYXR0cikgPT09IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc0RvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnQnO1xufVxuXG5mdW5jdGlvbiBpc0RvY3VtZW50RnJhZ21lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudC1mcmFnbWVudCc7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lID09PSBub2RlLnRhZ05hbWU7XG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jztcbn1cblxuZnVuY3Rpb24gaXNDb21tZW50Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2NvbW1lbnQnO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYG1hcGZuYCB0byBgbm9kZWAgYW5kIHRoZSB0cmVlIGJlbG93IGBub2RlYCwgcmV0dXJuaW5nIGEgZmxhdHRlbmVkXG4gKiBsaXN0IG9mIHJlc3VsdHMuXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdHJlZU1hcChub2RlLCBtYXBmbikge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICBub2RlV2Fsayhub2RlLCBmdW5jdGlvbihub2RlKXtcbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQobWFwZm4obm9kZSkpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIFdhbGsgdGhlIHRyZWUgZG93biBmcm9tIGBub2RlYCwgYXBwbHlpbmcgdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogUmV0dXJuIHRoZSBmaXJzdCBub2RlIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcHJlZGljYXRlLlxuICpcbiAqIEByZXR1cm5zIHtOb2RlfSBgbnVsbGAgaWYgbm8gbm9kZSBtYXRjaGVzLCBwYXJzZTUgbm9kZSBvYmplY3QgaWYgYSBub2RlXG4gKiBtYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG5vZGVXYWxrKG5vZGUsIHByZWRpY2F0ZSkge1xuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgdmFyIG1hdGNoID0gbnVsbDtcbiAgaWYgKG5vZGUuY2hpbGROb2Rlcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXRjaCA9IG5vZGVXYWxrKG5vZGUuY2hpbGROb2Rlc1tpXSwgcHJlZGljYXRlKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdGNoO1xufVxuXG4vKipcbiAqIFdhbGsgdGhlIHRyZWUgZG93biBmcm9tIGBub2RlYCwgYXBwbHlpbmcgdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogQWxsIG5vZGVzIG1hdGNoaW5nIHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gZnJvbSBgbm9kZWAgdG8gbGVhdmVzIHdpbGwgYmVcbiAqIHJldHVybmVkLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheVtOb2RlXX1cbiAqL1xuZnVuY3Rpb24gbm9kZVdhbGtBbGwobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIGlmICghbWF0Y2hlcykge1xuICAgIG1hdGNoZXMgPSBbXTtcbiAgfVxuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgbWF0Y2hlcy5wdXNoKG5vZGUpO1xuICB9XG4gIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZVdhbGtBbGwobm9kZS5jaGlsZE5vZGVzW2ldLCBwcmVkaWNhdGUsIG1hdGNoZXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gX3JldmVyc2VOb2RlV2Fsa0FsbChub2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMpIHtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgbWF0Y2hlcyA9IFtdO1xuICB9XG4gIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBub2RlV2Fsa0FsbChub2RlLmNoaWxkTm9kZXNbaV0sIHByZWRpY2F0ZSwgbWF0Y2hlcyk7XG4gICAgfVxuICB9XG4gIGlmIChwcmVkaWNhdGUobm9kZSkpIHtcbiAgICBtYXRjaGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtgLCBidXQgb25seSByZXR1cm5zIG5vZGVzIHRoYXQgYXJlIGVpdGhlclxuICogYW5jZXN0b3JzIG9yIGVhcmxpZXIgY291c2lucy9zaWJsaW5ncyBpbiB0aGUgZG9jdW1lbnQuXG4gKlxuICogTm9kZXMgYXJlIHNlYXJjaGVkIGluIHJldmVyc2UgZG9jdW1lbnQgb3JkZXIsIHN0YXJ0aW5nIGZyb20gdGhlIHNpYmxpbmdcbiAqIHByaW9yIHRvIGBub2RlYC5cbiAqL1xuZnVuY3Rpb24gbm9kZVdhbGtQcmlvcihub2RlLCBwcmVkaWNhdGUpIHtcbiAgLy8gU2VhcmNoIG91ciBlYXJsaWVyIHNpYmxpbmdzIGFuZCB0aGVpciBkZXNjZW5kZW50cy5cbiAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkge1xuICAgIHZhciBpZHggPSBwYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgIHZhciBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZE5vZGVzLnNsaWNlKDAsIGlkeCk7XG4gICAgZm9yICh2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIHNpYmxpbmcgPSBzaWJsaW5nc1tpXTtcbiAgICAgIGlmIChwcmVkaWNhdGUoc2libGluZykpIHtcbiAgICAgICAgcmV0dXJuIHNpYmxpbmc7XG4gICAgICB9XG4gICAgICB2YXIgZm91bmQgPSBub2RlV2Fsa1ByaW9yKHNpYmxpbmcsIHByZWRpY2F0ZSk7XG4gICAgfVxuICAgIGlmIChwcmVkaWNhdGUocGFyZW50KSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVXYWxrUHJpb3IocGFyZW50LCBwcmVkaWNhdGUpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtBbGxgLCBidXQgb25seSByZXR1cm5zIG5vZGVzIHRoYXQgYXJlIGVpdGhlciBcbiAqIGFuY2VzdG9ycyBvciBlYXJsaWVyIGNvdXNpbnMvc2libGluZ3MgaW4gdGhlIGRvY3VtZW50LlxuICpcbiAqIE5vZGVzIGFyZSByZXR1cm5lZCBpbiByZXZlcnNlIGRvY3VtZW50IG9yZGVyLCBzdGFydGluZyBmcm9tIGBub2RlYC5cbiAqL1xuZnVuY3Rpb24gbm9kZVdhbGtBbGxQcmlvcihub2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMpIHtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgbWF0Y2hlcyA9IFtdO1xuICB9XG4gIGlmIChwcmVkaWNhdGUobm9kZSkpIHtcbiAgICBtYXRjaGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgLy8gU2VhcmNoIG91ciBlYXJsaWVyIHNpYmxpbmdzIGFuZCB0aGVpciBkZXNjZW5kZW50cy5cbiAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkge1xuICAgIHZhciBpZHggPSBwYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgIHZhciBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZE5vZGVzLnNsaWNlKDAsIGlkeCk7XG4gICAgZm9yICh2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuICAgICAgX3JldmVyc2VOb2RlV2Fsa0FsbChzaWJsaW5nc1tpXSwgcHJlZGljYXRlLCBtYXRjaGVzKTtcbiAgICB9XG4gICAgbm9kZVdhbGtBbGxQcmlvcihwYXJlbnQsIHByZWRpY2F0ZSwgbWF0Y2hlcyk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtgLCBidXQgb25seSBtYXRjaGVzIGVsZW1lbnRzXG4gKlxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5KG5vZGUsIHByZWRpY2F0ZSkge1xuICB2YXIgZWxlbWVudFByZWRpY2F0ZSA9IEFORChpc0VsZW1lbnQsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBub2RlV2Fsayhub2RlLCBlbGVtZW50UHJlZGljYXRlKTtcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIGBub2RlV2Fsa0FsbGAsIGJ1dCBvbmx5IG1hdGNoZXMgZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheVtFbGVtZW50XX1cbiAqL1xuZnVuY3Rpb24gcXVlcnlBbGwobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIHZhciBlbGVtZW50UHJlZGljYXRlID0gQU5EKGlzRWxlbWVudCwgcHJlZGljYXRlKTtcbiAgcmV0dXJuIG5vZGVXYWxrQWxsKG5vZGUsIGVsZW1lbnRQcmVkaWNhdGUsIG1hdGNoZXMpO1xufVxuXG5mdW5jdGlvbiBuZXdUZXh0Tm9kZSh2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIG5vZGVOYW1lOiAnI3RleHQnLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBwYXJlbnROb2RlOiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5ld0NvbW1lbnROb2RlKGNvbW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlTmFtZTogJyNjb21tZW50JyxcbiAgICBkYXRhOiBjb21tZW50LFxuICAgIHBhcmVudE5vZGU6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbmV3RWxlbWVudCh0YWdOYW1lLCBuYW1lc3BhY2UpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlTmFtZTogdGFnTmFtZSxcbiAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgIGNoaWxkTm9kZXM6IFtdLFxuICAgIG5hbWVzcGFjZVVSSTogbmFtZXNwYWNlIHx8ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyxcbiAgICBhdHRyczogW10sXG4gICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZShvbGROb2RlLCBuZXdOb2RlKSB7XG4gIGluc2VydEJlZm9yZShvbGROb2RlLnBhcmVudE5vZGUsIG9sZE5vZGUsIG5ld05vZGUpO1xuICByZW1vdmUob2xkTm9kZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShub2RlKSB7XG4gIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHtcbiAgICB2YXIgaWR4ID0gcGFyZW50LmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcbiAgICBwYXJlbnQuY2hpbGROb2Rlcy5zcGxpY2UoaWR4LCAxKTtcbiAgfVxuICBub2RlLnBhcmVudE5vZGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50LCBvbGROb2RlLCBuZXdOb2RlKSB7XG4gIHJlbW92ZShuZXdOb2RlKTtcbiAgdmFyIGlkeCA9IHBhcmVudC5jaGlsZE5vZGVzLmluZGV4T2Yob2xkTm9kZSk7XG4gIHBhcmVudC5jaGlsZE5vZGVzLnNwbGljZShpZHgsIDAsIG5ld05vZGUpO1xuICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZChwYXJlbnQsIG5vZGUpIHtcbiAgcmVtb3ZlKG5vZGUpO1xuICBwYXJlbnQuY2hpbGROb2Rlcy5wdXNoKG5vZGUpO1xuICBub2RlLnBhcmVudE5vZGUgPSBwYXJlbnQ7XG59XG5cbnZhciBwYXJzZTUgPSByZXF1aXJlKCdwYXJzZTUnKTtcbmZ1bmN0aW9uIHBhcnNlKHRleHQsIG9wdGlvbnMpIHtcbiAgdmFyIHBhcnNlciA9IG5ldyBwYXJzZTUuUGFyc2VyKHBhcnNlNS5UcmVlQWRhcHRlcnMuZGVmYXVsdCwgb3B0aW9ucyk7XG4gIHJldHVybiBwYXJzZXIucGFyc2UodGV4dCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQodGV4dCkge1xuICB2YXIgcGFyc2VyID0gbmV3IHBhcnNlNS5QYXJzZXIoKTtcbiAgcmV0dXJuIHBhcnNlci5wYXJzZUZyYWdtZW50KHRleHQpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemUoYXN0KSB7XG4gIHZhciBzZXJpYWxpemVyID0gbmV3IHBhcnNlNS5TZXJpYWxpemVyKCk7XG4gIHJldHVybiBzZXJpYWxpemVyLnNlcmlhbGl6ZShhc3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0QXR0cmlidXRlOiBnZXRBdHRyaWJ1dGUsXG4gIGhhc0F0dHJpYnV0ZTogaGFzQXR0cmlidXRlLFxuICBzZXRBdHRyaWJ1dGU6IHNldEF0dHJpYnV0ZSxcbiAgcmVtb3ZlQXR0cmlidXRlOiByZW1vdmVBdHRyaWJ1dGUsXG4gIGdldFRleHRDb250ZW50OiBnZXRUZXh0Q29udGVudCxcbiAgc2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuICByZW1vdmU6IHJlbW92ZSxcbiAgcmVwbGFjZTogcmVwbGFjZSxcbiAgYXBwZW5kOiBhcHBlbmQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcbiAgaXNEb2N1bWVudDogaXNEb2N1bWVudCxcbiAgaXNEb2N1bWVudEZyYWdtZW50OiBpc0RvY3VtZW50RnJhZ21lbnQsXG4gIGlzRWxlbWVudDogaXNFbGVtZW50LFxuICBpc1RleHROb2RlOiBpc1RleHROb2RlLFxuICBpc0NvbW1lbnROb2RlOiBpc0NvbW1lbnROb2RlLFxuICBxdWVyeTogcXVlcnksXG4gIHF1ZXJ5QWxsOiBxdWVyeUFsbCxcbiAgbm9kZVdhbGs6IG5vZGVXYWxrLFxuICBub2RlV2Fsa0FsbDogbm9kZVdhbGtBbGwsXG4gIG5vZGVXYWxrUHJpb3I6IG5vZGVXYWxrUHJpb3IsXG4gIG5vZGVXYWxrQWxsUHJpb3I6IG5vZGVXYWxrQWxsUHJpb3IsXG4gIHRyZWVNYXA6IHRyZWVNYXAsXG4gIHByZWRpY2F0ZXM6IHtcbiAgICBoYXNDbGFzczogaGFzQ2xhc3MsXG4gICAgaGFzQXR0cjogaGFzQXR0cixcbiAgICBoYXNBdHRyVmFsdWU6IGhhc0F0dHJWYWx1ZSxcbiAgICBoYXNNYXRjaGluZ1RhZ05hbWU6IGhhc01hdGNoaW5nVGFnTmFtZSxcbiAgICBoYXNUYWdOYW1lOiBoYXNUYWdOYW1lLFxuICAgIGhhc1RleHRWYWx1ZTogaGFzVGV4dFZhbHVlLFxuICAgIEFORDogQU5ELFxuICAgIE9SOiBPUixcbiAgICBOT1Q6IE5PVCxcbiAgICBwYXJlbnRNYXRjaGVzOiBwYXJlbnRNYXRjaGVzXG4gIH0sXG4gIGNvbnN0cnVjdG9yczoge1xuICAgIHRleHQ6IG5ld1RleHROb2RlLFxuICAgIGNvbW1lbnQ6IG5ld0NvbW1lbnROb2RlLFxuICAgIGVsZW1lbnQ6IG5ld0VsZW1lbnRcbiAgfSxcbiAgcGFyc2U6IHBhcnNlLFxuICBwYXJzZUZyYWdtZW50OiBwYXJzZUZyYWdtZW50LFxuICBzZXJpYWxpemU6IHNlcmlhbGl6ZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydHMuUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vcGFyc2VyJyk7XHJcbmV4cG9ydHMuU2ltcGxlQXBpUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvc2ltcGxlX2FwaS9zaW1wbGVfYXBpX3BhcnNlcicpO1xyXG5leHBvcnRzLlRyZWVTZXJpYWxpemVyID1cclxuZXhwb3J0cy5TZXJpYWxpemVyID0gcmVxdWlyZSgnLi9saWIvc2VyaWFsaXphdGlvbi9zZXJpYWxpemVyJyk7XHJcbmV4cG9ydHMuSnNEb21QYXJzZXIgPSByZXF1aXJlKCcuL2xpYi9qc2RvbS9qc2RvbV9wYXJzZXInKTtcclxuXHJcbmV4cG9ydHMuVHJlZUFkYXB0ZXJzID0ge1xyXG4gICAgZGVmYXVsdDogcmVxdWlyZSgnLi9saWIvdHJlZV9hZGFwdGVycy9kZWZhdWx0JyksXHJcbiAgICBodG1scGFyc2VyMjogcmVxdWlyZSgnLi9saWIvdHJlZV9hZGFwdGVycy9odG1scGFyc2VyMicpXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcblxuLy9Db25zdFxudmFyIFZBTElEX0RPQ1RZUEVfTkFNRSA9ICdodG1sJyxcbiAgICBRVUlSS1NfTU9ERV9TWVNURU1fSUQgPSAnaHR0cDovL3d3dy5pYm0uY29tL2RhdGEvZHRkL3YxMS9pYm14aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCcsXG4gICAgUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xuICAgICAgICBcIisvL3NpbG1hcmlsLy9kdGQgaHRtbCBwcm8gdjByMTEgMTk5NzAxMDEvL2VuXCIsXG4gICAgICAgIFwiLS8vYWR2YXNvZnQgbHRkLy9kdGQgaHRtbCAzLjAgYXN3ZWRpdCArIGV4dGVuc2lvbnMvL2VuXCIsXG4gICAgICAgIFwiLS8vYXMvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMS8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMi8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDEvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdCBsZXZlbCAyLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMWUvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy4wLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMC8vZW4vL1wiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMiBmaW5hbC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAzLjIvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAwLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDEvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAyLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDIvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAzLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvL2VuLy8zLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vZW4vLzIuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vZW4vLzMuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuLy8zLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW4vLzIuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sLy9lbi8vMy4wXCIsXG4gICAgICAgIFwiLS8vbWV0cml1cy8vZHRkIG1ldHJpdXMgcHJlc2VudGF0aW9uYWwvL2VuXCIsXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwgc3RyaWN0Ly9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCB0YWJsZXMvL2VuXCIsXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwgc3RyaWN0Ly9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCB0YWJsZXMvL2VuXCIsXG4gICAgICAgIFwiLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgc3RyaWN0IGh0bWwvL2VuXCIsXG4gICAgICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIDIuMC8vZW5cIixcbiAgICAgICAgXCItLy9vJ3JlaWxseSBhbmQgYXNzb2NpYXRlcy8vZHRkIGh0bWwgZXh0ZW5kZWQgMS4wLy9lblwiLFxuICAgICAgICBcIi0vL3NweWdsYXNzLy9kdGQgaHRtbCAyLjAgZXh0ZW5kZWQvL2VuXCIsXG4gICAgICAgIFwiLS8vc3EvL2R0ZCBodG1sIDIuMCBob3RtZXRhbCArIGV4dGVuc2lvbnMvL2VuXCIsXG4gICAgICAgIFwiLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9zdW4gbWljcm9zeXN0ZW1zIGNvcnAuLy9kdGQgaG90amF2YSBzdHJpY3QgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMgMTk5NS0wMy0yNC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMiBkcmFmdC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMiBmaW5hbC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMi8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMnMgZHJhZnQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCA0LjAgZnJhbWVzZXQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsLy9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDE5OTYwNzEyLy9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDk3MDQyMS8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCB3MyBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL3czby8vZHRkIHczIGh0bWwgMy4wLy9lblwiLFxuICAgICAgICBcIi0vL3czby8vZHRkIHczIGh0bWwgMy4wLy9lbi8vXCIsXG4gICAgICAgIFwiLS8vd2VidGVjaHMvL2R0ZCBtb3ppbGxhIGh0bWwgMi4wLy9lblwiLFxuICAgICAgICBcIi0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sLy9lblwiXG4gICAgXSxcbiAgICBRVUlSS1NfTU9ERV9OT19TWVNURU1fSURfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xuICAgICAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIGZyYW1lc2V0Ly8nLFxuICAgICAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIHRyYW5zaXRpb25hbC8vJ1xuICAgIF0sXG4gICAgUVVJUktTX01PREVfUFVCTElDX0lEUyA9IFtcbiAgICAgICAgJy0vL3czby8vZHRkIHczIGh0bWwgc3RyaWN0IDMuMC8vZW4vLycsXG4gICAgICAgICctL3czYy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsL2VuJyxcbiAgICAgICAgJ2h0bWwnXG4gICAgXTtcblxuXG4vL1V0aWxzXG5mdW5jdGlvbiBlbnF1b3RlRG9jdHlwZUlkKGlkKSB7XG4gICAgdmFyIHF1b3RlID0gaWQuaW5kZXhPZignXCInKSAhPT0gLTEgPyAnXFwnJyA6ICdcIic7XG5cbiAgICByZXR1cm4gcXVvdGUgKyBpZCArIHF1b3RlO1xufVxuXG5cbi8vQVBJXG5leHBvcnRzLmlzUXVpcmtzID0gZnVuY3Rpb24gKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIGlmIChuYW1lICE9PSBWQUxJRF9ET0NUWVBFX05BTUUpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKHN5c3RlbUlkICYmIHN5c3RlbUlkLnRvTG93ZXJDYXNlKCkgPT09IFFVSVJLU19NT0RFX1NZU1RFTV9JRClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAocHVibGljSWQgIT09IG51bGwpIHtcbiAgICAgICAgcHVibGljSWQgPSBwdWJsaWNJZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChRVUlSS1NfTU9ERV9QVUJMSUNfSURTLmluZGV4T2YocHVibGljSWQpID4gLTEpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICB2YXIgcHJlZml4ZXMgPSBRVUlSS1NfTU9ERV9QVUJMSUNfSURfUFJFRklYRVM7XG5cbiAgICAgICAgaWYgKHN5c3RlbUlkID09PSBudWxsKVxuICAgICAgICAgICAgcHJlZml4ZXMgPSBwcmVmaXhlcy5jb25jYXQoUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHB1YmxpY0lkLmluZGV4T2YocHJlZml4ZXNbaV0pID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5zZXJpYWxpemVDb250ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIHZhciBzdHIgPSAnIURPQ1RZUEUgJyArIG5hbWU7XG5cbiAgICBpZiAocHVibGljSWQgIT09IG51bGwpXG4gICAgICAgIHN0ciArPSAnIFBVQkxJQyAnICsgZW5xdW90ZURvY3R5cGVJZChwdWJsaWNJZCk7XG5cbiAgICBlbHNlIGlmIChzeXN0ZW1JZCAhPT0gbnVsbClcbiAgICAgICAgc3RyICs9ICcgU1lTVEVNJztcblxuICAgIGlmIChzeXN0ZW1JZCAhPT0gbnVsbClcbiAgICAgICAgc3RyICs9ICcgJyArIGVucXVvdGVEb2N0eXBlSWQoc3lzdGVtSWQpO1xuXG4gICAgcmV0dXJuIHN0cjtcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxyXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4vaHRtbCcpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gSFRNTC5UQUdfTkFNRVMsXHJcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUyxcclxuICAgIEFUVFJTID0gSFRNTC5BVFRSUztcclxuXHJcblxyXG4vL01JTUUgdHlwZXNcclxudmFyIE1JTUVfVFlQRVMgPSB7XHJcbiAgICBURVhUX0hUTUw6ICd0ZXh0L2h0bWwnLFxyXG4gICAgQVBQTElDQVRJT05fWE1MOiAnYXBwbGljYXRpb24veGh0bWwreG1sJ1xyXG59O1xyXG5cclxuLy9BdHRyaWJ1dGVzXHJcbnZhciBERUZJTklUSU9OX1VSTF9BVFRSID0gJ2RlZmluaXRpb251cmwnLFxyXG4gICAgQURKVVNURURfREVGSU5JVElPTl9VUkxfQVRUUiA9ICdkZWZpbml0aW9uVVJMJyxcclxuICAgIFNWR19BVFRSU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICAgICAnYXR0cmlidXRlbmFtZSc6ICdhdHRyaWJ1dGVOYW1lJyxcclxuICAgICAgICAnYXR0cmlidXRldHlwZSc6ICdhdHRyaWJ1dGVUeXBlJyxcclxuICAgICAgICAnYmFzZWZyZXF1ZW5jeSc6ICdiYXNlRnJlcXVlbmN5JyxcclxuICAgICAgICAnYmFzZXByb2ZpbGUnOiAnYmFzZVByb2ZpbGUnLFxyXG4gICAgICAgICdjYWxjbW9kZSc6ICdjYWxjTW9kZScsXHJcbiAgICAgICAgJ2NsaXBwYXRodW5pdHMnOiAnY2xpcFBhdGhVbml0cycsXHJcbiAgICAgICAgJ2NvbnRlbnRzY3JpcHR0eXBlJzogJ2NvbnRlbnRTY3JpcHRUeXBlJyxcclxuICAgICAgICAnY29udGVudHN0eWxldHlwZSc6ICdjb250ZW50U3R5bGVUeXBlJyxcclxuICAgICAgICAnZGlmZnVzZWNvbnN0YW50JzogJ2RpZmZ1c2VDb25zdGFudCcsXHJcbiAgICAgICAgJ2VkZ2Vtb2RlJzogJ2VkZ2VNb2RlJyxcclxuICAgICAgICAnZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZCc6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcclxuICAgICAgICAnZmlsdGVycmVzJzogJ2ZpbHRlclJlcycsXHJcbiAgICAgICAgJ2ZpbHRlcnVuaXRzJzogJ2ZpbHRlclVuaXRzJyxcclxuICAgICAgICAnZ2x5cGhyZWYnOiAnZ2x5cGhSZWYnLFxyXG4gICAgICAgICdncmFkaWVudHRyYW5zZm9ybSc6ICdncmFkaWVudFRyYW5zZm9ybScsXHJcbiAgICAgICAgJ2dyYWRpZW50dW5pdHMnOiAnZ3JhZGllbnRVbml0cycsXHJcbiAgICAgICAgJ2tlcm5lbG1hdHJpeCc6ICdrZXJuZWxNYXRyaXgnLFxyXG4gICAgICAgICdrZXJuZWx1bml0bGVuZ3RoJzogJ2tlcm5lbFVuaXRMZW5ndGgnLFxyXG4gICAgICAgICdrZXlwb2ludHMnOiAna2V5UG9pbnRzJyxcclxuICAgICAgICAna2V5c3BsaW5lcyc6ICdrZXlTcGxpbmVzJyxcclxuICAgICAgICAna2V5dGltZXMnOiAna2V5VGltZXMnLFxyXG4gICAgICAgICdsZW5ndGhhZGp1c3QnOiAnbGVuZ3RoQWRqdXN0JyxcclxuICAgICAgICAnbGltaXRpbmdjb25lYW5nbGUnOiAnbGltaXRpbmdDb25lQW5nbGUnLFxyXG4gICAgICAgICdtYXJrZXJoZWlnaHQnOiAnbWFya2VySGVpZ2h0JyxcclxuICAgICAgICAnbWFya2VydW5pdHMnOiAnbWFya2VyVW5pdHMnLFxyXG4gICAgICAgICdtYXJrZXJ3aWR0aCc6ICdtYXJrZXJXaWR0aCcsXHJcbiAgICAgICAgJ21hc2tjb250ZW50dW5pdHMnOiAnbWFza0NvbnRlbnRVbml0cycsXHJcbiAgICAgICAgJ21hc2t1bml0cyc6ICdtYXNrVW5pdHMnLFxyXG4gICAgICAgICdudW1vY3RhdmVzJzogJ251bU9jdGF2ZXMnLFxyXG4gICAgICAgICdwYXRobGVuZ3RoJzogJ3BhdGhMZW5ndGgnLFxyXG4gICAgICAgICdwYXR0ZXJuY29udGVudHVuaXRzJzogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxyXG4gICAgICAgICdwYXR0ZXJudHJhbnNmb3JtJzogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxyXG4gICAgICAgICdwYXR0ZXJudW5pdHMnOiAncGF0dGVyblVuaXRzJyxcclxuICAgICAgICAncG9pbnRzYXR4JzogJ3BvaW50c0F0WCcsXHJcbiAgICAgICAgJ3BvaW50c2F0eSc6ICdwb2ludHNBdFknLFxyXG4gICAgICAgICdwb2ludHNhdHonOiAncG9pbnRzQXRaJyxcclxuICAgICAgICAncHJlc2VydmVhbHBoYSc6ICdwcmVzZXJ2ZUFscGhhJyxcclxuICAgICAgICAncHJlc2VydmVhc3BlY3RyYXRpbyc6ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcclxuICAgICAgICAncHJpbWl0aXZldW5pdHMnOiAncHJpbWl0aXZlVW5pdHMnLFxyXG4gICAgICAgICdyZWZ4JzogJ3JlZlgnLFxyXG4gICAgICAgICdyZWZ5JzogJ3JlZlknLFxyXG4gICAgICAgICdyZXBlYXRjb3VudCc6ICdyZXBlYXRDb3VudCcsXHJcbiAgICAgICAgJ3JlcGVhdGR1cic6ICdyZXBlYXREdXInLFxyXG4gICAgICAgICdyZXF1aXJlZGV4dGVuc2lvbnMnOiAncmVxdWlyZWRFeHRlbnNpb25zJyxcclxuICAgICAgICAncmVxdWlyZWRmZWF0dXJlcyc6ICdyZXF1aXJlZEZlYXR1cmVzJyxcclxuICAgICAgICAnc3BlY3VsYXJjb25zdGFudCc6ICdzcGVjdWxhckNvbnN0YW50JyxcclxuICAgICAgICAnc3BlY3VsYXJleHBvbmVudCc6ICdzcGVjdWxhckV4cG9uZW50JyxcclxuICAgICAgICAnc3ByZWFkbWV0aG9kJzogJ3NwcmVhZE1ldGhvZCcsXHJcbiAgICAgICAgJ3N0YXJ0b2Zmc2V0JzogJ3N0YXJ0T2Zmc2V0JyxcclxuICAgICAgICAnc3RkZGV2aWF0aW9uJzogJ3N0ZERldmlhdGlvbicsXHJcbiAgICAgICAgJ3N0aXRjaHRpbGVzJzogJ3N0aXRjaFRpbGVzJyxcclxuICAgICAgICAnc3VyZmFjZXNjYWxlJzogJ3N1cmZhY2VTY2FsZScsXHJcbiAgICAgICAgJ3N5c3RlbWxhbmd1YWdlJzogJ3N5c3RlbUxhbmd1YWdlJyxcclxuICAgICAgICAndGFibGV2YWx1ZXMnOiAndGFibGVWYWx1ZXMnLFxyXG4gICAgICAgICd0YXJnZXR4JzogJ3RhcmdldFgnLFxyXG4gICAgICAgICd0YXJnZXR5JzogJ3RhcmdldFknLFxyXG4gICAgICAgICd0ZXh0bGVuZ3RoJzogJ3RleHRMZW5ndGgnLFxyXG4gICAgICAgICd2aWV3Ym94JzogJ3ZpZXdCb3gnLFxyXG4gICAgICAgICd2aWV3dGFyZ2V0JzogJ3ZpZXdUYXJnZXQnLFxyXG4gICAgICAgICd4Y2hhbm5lbHNlbGVjdG9yJzogJ3hDaGFubmVsU2VsZWN0b3InLFxyXG4gICAgICAgICd5Y2hhbm5lbHNlbGVjdG9yJzogJ3lDaGFubmVsU2VsZWN0b3InLFxyXG4gICAgICAgICd6b29tYW5kcGFuJzogJ3pvb21BbmRQYW4nXHJcbiAgICB9LFxyXG4gICAgWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQID0ge1xyXG4gICAgICAgICd4bGluazphY3R1YXRlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2FjdHVhdGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6YXJjcm9sZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdhcmNyb2xlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOmhyZWYnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAnaHJlZicsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazpyb2xlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3JvbGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6c2hvdyc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdzaG93JywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnRpdGxlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3RpdGxlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnR5cGUnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAndHlwZScsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bWw6YmFzZSc6IHtwcmVmaXg6ICd4bWwnLCBuYW1lOiAnYmFzZScsIG5hbWVzcGFjZTogTlMuWE1MfSxcclxuICAgICAgICAneG1sOmxhbmcnOiB7cHJlZml4OiAneG1sJywgbmFtZTogJ2xhbmcnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbDpzcGFjZSc6IHtwcmVmaXg6ICd4bWwnLCBuYW1lOiAnc3BhY2UnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbG5zJzoge3ByZWZpeDogJycsIG5hbWU6ICd4bWxucycsIG5hbWVzcGFjZTogTlMuWE1MTlN9LFxyXG4gICAgICAgICd4bWxuczp4bGluayc6IHtwcmVmaXg6ICd4bWxucycsIG5hbWU6ICd4bGluaycsIG5hbWVzcGFjZTogTlMuWE1MTlN9XHJcblxyXG4gICAgfTtcclxuXHJcbi8vU1ZHIHRhZyBuYW1lcyBhZGp1c3RtZW50IG1hcFxyXG52YXIgU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICdhbHRnbHlwaCc6ICdhbHRHbHlwaCcsXHJcbiAgICAnYWx0Z2x5cGhkZWYnOiAnYWx0R2x5cGhEZWYnLFxyXG4gICAgJ2FsdGdseXBoaXRlbSc6ICdhbHRHbHlwaEl0ZW0nLFxyXG4gICAgJ2FuaW1hdGVjb2xvcic6ICdhbmltYXRlQ29sb3InLFxyXG4gICAgJ2FuaW1hdGVtb3Rpb24nOiAnYW5pbWF0ZU1vdGlvbicsXHJcbiAgICAnYW5pbWF0ZXRyYW5zZm9ybSc6ICdhbmltYXRlVHJhbnNmb3JtJyxcclxuICAgICdjbGlwcGF0aCc6ICdjbGlwUGF0aCcsXHJcbiAgICAnZmVibGVuZCc6ICdmZUJsZW5kJyxcclxuICAgICdmZWNvbG9ybWF0cml4JzogJ2ZlQ29sb3JNYXRyaXgnLFxyXG4gICAgJ2ZlY29tcG9uZW50dHJhbnNmZXInOiAnZmVDb21wb25lbnRUcmFuc2ZlcicsXHJcbiAgICAnZmVjb21wb3NpdGUnOiAnZmVDb21wb3NpdGUnLFxyXG4gICAgJ2ZlY29udm9sdmVtYXRyaXgnOiAnZmVDb252b2x2ZU1hdHJpeCcsXHJcbiAgICAnZmVkaWZmdXNlbGlnaHRpbmcnOiAnZmVEaWZmdXNlTGlnaHRpbmcnLFxyXG4gICAgJ2ZlZGlzcGxhY2VtZW50bWFwJzogJ2ZlRGlzcGxhY2VtZW50TWFwJyxcclxuICAgICdmZWRpc3RhbnRsaWdodCc6ICdmZURpc3RhbnRMaWdodCcsXHJcbiAgICAnZmVmbG9vZCc6ICdmZUZsb29kJyxcclxuICAgICdmZWZ1bmNhJzogJ2ZlRnVuY0EnLFxyXG4gICAgJ2ZlZnVuY2InOiAnZmVGdW5jQicsXHJcbiAgICAnZmVmdW5jZyc6ICdmZUZ1bmNHJyxcclxuICAgICdmZWZ1bmNyJzogJ2ZlRnVuY1InLFxyXG4gICAgJ2ZlZ2F1c3NpYW5ibHVyJzogJ2ZlR2F1c3NpYW5CbHVyJyxcclxuICAgICdmZWltYWdlJzogJ2ZlSW1hZ2UnLFxyXG4gICAgJ2ZlbWVyZ2UnOiAnZmVNZXJnZScsXHJcbiAgICAnZmVtZXJnZW5vZGUnOiAnZmVNZXJnZU5vZGUnLFxyXG4gICAgJ2ZlbW9ycGhvbG9neSc6ICdmZU1vcnBob2xvZ3knLFxyXG4gICAgJ2Zlb2Zmc2V0JzogJ2ZlT2Zmc2V0JyxcclxuICAgICdmZXBvaW50bGlnaHQnOiAnZmVQb2ludExpZ2h0JyxcclxuICAgICdmZXNwZWN1bGFybGlnaHRpbmcnOiAnZmVTcGVjdWxhckxpZ2h0aW5nJyxcclxuICAgICdmZXNwb3RsaWdodCc6ICdmZVNwb3RMaWdodCcsXHJcbiAgICAnZmV0aWxlJzogJ2ZlVGlsZScsXHJcbiAgICAnZmV0dXJidWxlbmNlJzogJ2ZlVHVyYnVsZW5jZScsXHJcbiAgICAnZm9yZWlnbm9iamVjdCc6ICdmb3JlaWduT2JqZWN0JyxcclxuICAgICdnbHlwaHJlZic6ICdnbHlwaFJlZicsXHJcbiAgICAnbGluZWFyZ3JhZGllbnQnOiAnbGluZWFyR3JhZGllbnQnLFxyXG4gICAgJ3JhZGlhbGdyYWRpZW50JzogJ3JhZGlhbEdyYWRpZW50JyxcclxuICAgICd0ZXh0cGF0aCc6ICd0ZXh0UGF0aCdcclxufTtcclxuXHJcbi8vVGFncyB0aGF0IGNhdXNlcyBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XHJcbnZhciBFWElUU19GT1JFSUdOX0NPTlRFTlQgPSB7fTtcclxuXHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQklHXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJMT0NLUVVPVEVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQk9EWV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5CUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5DRU5URVJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQ09ERV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5ERF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5ESVZdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRExdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRFRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRU1dID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRU1CRURdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDFdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDNdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDZdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSEVBRF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5IUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5JXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLklNR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5MSV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5MSVNUSU5HXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk1FTlVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTUVUQV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5OT0JSXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk9MXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlBdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuUFJFXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlJVQlldID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TTUFMTF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TUEFOXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNUUk9OR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TVFJJS0VdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU1VCXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNVUF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5UQUJMRV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5UVF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5VXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlVMXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlZBUl0gPSB0cnVlO1xyXG5cclxuLy9DaGVjayBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XHJcbmV4cG9ydHMuY2F1c2VzRXhpdCA9IGZ1bmN0aW9uIChzdGFydFRhZ1Rva2VuKSB7XHJcbiAgICB2YXIgdG4gPSBzdGFydFRhZ1Rva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkZPTlQgJiYgKFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuQ09MT1IpICE9PSBudWxsIHx8XHJcbiAgICAgICAgVG9rZW5pemVyLmdldFRva2VuQXR0cihzdGFydFRhZ1Rva2VuLCBBVFRSUy5TSVpFKSAhPT0gbnVsbCB8fFxyXG4gICAgICAgIFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuRkFDRSkgIT09IG51bGwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEVYSVRTX0ZPUkVJR05fQ09OVEVOVFt0bl07XHJcbn07XHJcblxyXG4vL1Rva2VuIGFkanVzdG1lbnRzXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0b2tlbi5hdHRyc1tpXS5uYW1lID09PSBERUZJTklUSU9OX1VSTF9BVFRSKSB7XHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBBREpVU1RFRF9ERUZJTklUSU9OX1VSTF9BVFRSO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmFkanVzdFRva2VuU1ZHQXR0cnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYWRqdXN0ZWRBdHRyTmFtZSA9IFNWR19BVFRSU19BREpVU1RNRU5UX01BUFt0b2tlbi5hdHRyc1tpXS5uYW1lXTtcclxuXHJcbiAgICAgICAgaWYgKGFkanVzdGVkQXR0ck5hbWUpXHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBhZGp1c3RlZEF0dHJOYW1lO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5hZGp1c3RUb2tlblhNTEF0dHJzID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGFkanVzdGVkQXR0ckVudHJ5ID0gWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQW3Rva2VuLmF0dHJzW2ldLm5hbWVdO1xyXG5cclxuICAgICAgICBpZiAoYWRqdXN0ZWRBdHRyRW50cnkpIHtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ucHJlZml4ID0gYWRqdXN0ZWRBdHRyRW50cnkucHJlZml4O1xyXG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZTtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZXNwYWNlID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZXNwYWNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5TVkdUYWdOYW1lID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICB2YXIgYWRqdXN0ZWRUYWdOYW1lID0gU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUFt0b2tlbi50YWdOYW1lXTtcclxuXHJcbiAgICBpZiAoYWRqdXN0ZWRUYWdOYW1lKVxyXG4gICAgICAgIHRva2VuLnRhZ05hbWUgPSBhZGp1c3RlZFRhZ05hbWU7XHJcbn07XHJcblxyXG4vL0ludGVncmF0aW9uIHBvaW50c1xyXG5leHBvcnRzLmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAodG4sIG5zKSB7XHJcbiAgICByZXR1cm4gbnMgPT09IE5TLk1BVEhNTCAmJiAodG4gPT09ICQuTUkgfHwgdG4gPT09ICQuTU8gfHwgdG4gPT09ICQuTU4gfHwgdG4gPT09ICQuTVMgfHwgdG4gPT09ICQuTVRFWFQpO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0h0bWxJbnRlZ3JhdGlvblBvaW50ID0gZnVuY3Rpb24gKHRuLCBucywgYXR0cnMpIHtcclxuICAgIGlmIChucyA9PT0gTlMuTUFUSE1MICYmIHRuID09PSAkLkFOTk9UQVRJT05fWE1MKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gQVRUUlMuRU5DT0RJTkcpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJzW2ldLnZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSBNSU1FX1RZUEVTLlRFWFRfSFRNTCB8fCB2YWx1ZSA9PT0gTUlNRV9UWVBFUy5BUFBMSUNBVElPTl9YTUw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5zID09PSBOUy5TVkcgJiYgKHRuID09PSAkLkZPUkVJR05fT0JKRUNUIHx8IHRuID09PSAkLkRFU0MgfHwgdG4gPT09ICQuVElUTEUpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgTlMgPSBleHBvcnRzLk5BTUVTUEFDRVMgPSB7XHJcbiAgICBIVE1MOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsXHJcbiAgICBNQVRITUw6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJyxcclxuICAgIFNWRzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyxcclxuICAgIFhMSU5LOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsXHJcbiAgICBYTUw6ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLFxyXG4gICAgWE1MTlM6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLydcclxufTtcclxuXHJcbmV4cG9ydHMuQVRUUlMgPSB7XHJcbiAgICBUWVBFOiAndHlwZScsXHJcbiAgICBBQ1RJT046ICdhY3Rpb24nLFxyXG4gICAgRU5DT0RJTkc6ICdlbmNvZGluZycsXHJcbiAgICBQUk9NUFQ6ICdwcm9tcHQnLFxyXG4gICAgTkFNRTogJ25hbWUnLFxyXG4gICAgQ09MT1I6ICdjb2xvcicsXHJcbiAgICBGQUNFOiAnZmFjZScsXHJcbiAgICBTSVpFOiAnc2l6ZSdcclxufTtcclxuXHJcbnZhciAkID0gZXhwb3J0cy5UQUdfTkFNRVMgPSB7XHJcbiAgICBBOiAnYScsXHJcbiAgICBBRERSRVNTOiAnYWRkcmVzcycsXHJcbiAgICBBTk5PVEFUSU9OX1hNTDogJ2Fubm90YXRpb24teG1sJyxcclxuICAgIEFQUExFVDogJ2FwcGxldCcsXHJcbiAgICBBUkVBOiAnYXJlYScsXHJcbiAgICBBUlRJQ0xFOiAnYXJ0aWNsZScsXHJcbiAgICBBU0lERTogJ2FzaWRlJyxcclxuXHJcbiAgICBCOiAnYicsXHJcbiAgICBCQVNFOiAnYmFzZScsXHJcbiAgICBCQVNFRk9OVDogJ2Jhc2Vmb250JyxcclxuICAgIEJHU09VTkQ6ICdiZ3NvdW5kJyxcclxuICAgIEJJRzogJ2JpZycsXHJcbiAgICBCTE9DS1FVT1RFOiAnYmxvY2txdW90ZScsXHJcbiAgICBCT0RZOiAnYm9keScsXHJcbiAgICBCUjogJ2JyJyxcclxuICAgIEJVVFRPTjogJ2J1dHRvbicsXHJcblxyXG4gICAgQ0FQVElPTjogJ2NhcHRpb24nLFxyXG4gICAgQ0VOVEVSOiAnY2VudGVyJyxcclxuICAgIENPREU6ICdjb2RlJyxcclxuICAgIENPTDogJ2NvbCcsXHJcbiAgICBDT0xHUk9VUDogJ2NvbGdyb3VwJyxcclxuICAgIENPTU1BTkQ6ICdjb21tYW5kJyxcclxuXHJcbiAgICBERDogJ2RkJyxcclxuICAgIERFU0M6ICdkZXNjJyxcclxuICAgIERFVEFJTFM6ICdkZXRhaWxzJyxcclxuICAgIERJQUxPRzogJ2RpYWxvZycsXHJcbiAgICBESVI6ICdkaXInLFxyXG4gICAgRElWOiAnZGl2JyxcclxuICAgIERMOiAnZGwnLFxyXG4gICAgRFQ6ICdkdCcsXHJcblxyXG4gICAgRU06ICdlbScsXHJcbiAgICBFTUJFRDogJ2VtYmVkJyxcclxuXHJcbiAgICBGSUVMRFNFVDogJ2ZpZWxkc2V0JyxcclxuICAgIEZJR0NBUFRJT046ICdmaWdjYXB0aW9uJyxcclxuICAgIEZJR1VSRTogJ2ZpZ3VyZScsXHJcbiAgICBGT05UOiAnZm9udCcsXHJcbiAgICBGT09URVI6ICdmb290ZXInLFxyXG4gICAgRk9SRUlHTl9PQkpFQ1Q6ICdmb3JlaWduT2JqZWN0JyxcclxuICAgIEZPUk06ICdmb3JtJyxcclxuICAgIEZSQU1FOiAnZnJhbWUnLFxyXG4gICAgRlJBTUVTRVQ6ICdmcmFtZXNldCcsXHJcblxyXG4gICAgSDE6ICdoMScsXHJcbiAgICBIMjogJ2gyJyxcclxuICAgIEgzOiAnaDMnLFxyXG4gICAgSDQ6ICdoNCcsXHJcbiAgICBINTogJ2g1JyxcclxuICAgIEg2OiAnaDYnLFxyXG4gICAgSEVBRDogJ2hlYWQnLFxyXG4gICAgSEVBREVSOiAnaGVhZGVyJyxcclxuICAgIEhHUk9VUDogJ2hncm91cCcsXHJcbiAgICBIUjogJ2hyJyxcclxuICAgIEhUTUw6ICdodG1sJyxcclxuXHJcbiAgICBJOiAnaScsXHJcbiAgICBJTUc6ICdpbWcnLFxyXG4gICAgSU1BR0U6ICdpbWFnZScsXHJcbiAgICBJTlBVVDogJ2lucHV0JyxcclxuICAgIElGUkFNRTogJ2lmcmFtZScsXHJcbiAgICBJU0lOREVYOiAnaXNpbmRleCcsXHJcblxyXG4gICAgS0VZR0VOOiAna2V5Z2VuJyxcclxuXHJcbiAgICBMQUJFTDogJ2xhYmVsJyxcclxuICAgIExJOiAnbGknLFxyXG4gICAgTElOSzogJ2xpbmsnLFxyXG4gICAgTElTVElORzogJ2xpc3RpbmcnLFxyXG5cclxuICAgIE1BSU46ICdtYWluJyxcclxuICAgIE1BTElHTk1BUks6ICdtYWxpZ25tYXJrJyxcclxuICAgIE1BUlFVRUU6ICdtYXJxdWVlJyxcclxuICAgIE1BVEg6ICdtYXRoJyxcclxuICAgIE1FTlU6ICdtZW51JyxcclxuICAgIE1FTlVJVEVNOiAnbWVudWl0ZW0nLFxyXG4gICAgTUVUQTogJ21ldGEnLFxyXG4gICAgTUdMWVBIOiAnbWdseXBoJyxcclxuICAgIE1JOiAnbWknLFxyXG4gICAgTU86ICdtbycsXHJcbiAgICBNTjogJ21uJyxcclxuICAgIE1TOiAnbXMnLFxyXG4gICAgTVRFWFQ6ICdtdGV4dCcsXHJcblxyXG4gICAgTkFWOiAnbmF2JyxcclxuICAgIE5PQlI6ICdub2JyJyxcclxuICAgIE5PRlJBTUVTOiAnbm9mcmFtZXMnLFxyXG4gICAgTk9FTUJFRDogJ25vZW1iZWQnLFxyXG4gICAgTk9TQ1JJUFQ6ICdub3NjcmlwdCcsXHJcblxyXG4gICAgT0JKRUNUOiAnb2JqZWN0JyxcclxuICAgIE9MOiAnb2wnLFxyXG4gICAgT1BUR1JPVVA6ICdvcHRncm91cCcsXHJcbiAgICBPUFRJT046ICdvcHRpb24nLFxyXG5cclxuICAgIFA6ICdwJyxcclxuICAgIFBBUkFNOiAncGFyYW0nLFxyXG4gICAgUExBSU5URVhUOiAncGxhaW50ZXh0JyxcclxuICAgIFBSRTogJ3ByZScsXHJcblxyXG4gICAgUlA6ICdycCcsXHJcbiAgICBSVDogJ3J0JyxcclxuICAgIFJVQlk6ICdydWJ5JyxcclxuXHJcbiAgICBTOiAncycsXHJcbiAgICBTQ1JJUFQ6ICdzY3JpcHQnLFxyXG4gICAgU0VDVElPTjogJ3NlY3Rpb24nLFxyXG4gICAgU0VMRUNUOiAnc2VsZWN0JyxcclxuICAgIFNPVVJDRTogJ3NvdXJjZScsXHJcbiAgICBTTUFMTDogJ3NtYWxsJyxcclxuICAgIFNQQU46ICdzcGFuJyxcclxuICAgIFNUUklLRTogJ3N0cmlrZScsXHJcbiAgICBTVFJPTkc6ICdzdHJvbmcnLFxyXG4gICAgU1RZTEU6ICdzdHlsZScsXHJcbiAgICBTVUI6ICdzdWInLFxyXG4gICAgU1VNTUFSWTogJ3N1bW1hcnknLFxyXG4gICAgU1VQOiAnc3VwJyxcclxuXHJcbiAgICBUQUJMRTogJ3RhYmxlJyxcclxuICAgIFRCT0RZOiAndGJvZHknLFxyXG4gICAgVEVNUExBVEU6ICd0ZW1wbGF0ZScsXHJcbiAgICBURVhUQVJFQTogJ3RleHRhcmVhJyxcclxuICAgIFRGT09UOiAndGZvb3QnLFxyXG4gICAgVEQ6ICd0ZCcsXHJcbiAgICBUSDogJ3RoJyxcclxuICAgIFRIRUFEOiAndGhlYWQnLFxyXG4gICAgVElUTEU6ICd0aXRsZScsXHJcbiAgICBUUjogJ3RyJyxcclxuICAgIFRSQUNLOiAndHJhY2snLFxyXG4gICAgVFQ6ICd0dCcsXHJcblxyXG4gICAgVTogJ3UnLFxyXG4gICAgVUw6ICd1bCcsXHJcblxyXG4gICAgU1ZHOiAnc3ZnJyxcclxuXHJcbiAgICBWQVI6ICd2YXInLFxyXG5cclxuICAgIFdCUjogJ3dicicsXHJcblxyXG4gICAgWE1QOiAneG1wJ1xyXG59O1xyXG5cclxudmFyIFNQRUNJQUxfRUxFTUVOVFMgPSBleHBvcnRzLlNQRUNJQUxfRUxFTUVOVFMgPSB7fTtcclxuXHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF0gPSB7fTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFERFJFU1NdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFQUExFVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVJFQV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVJUSUNMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVNJREVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJBU0VdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJBU0VGT05UXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CR1NPVU5EXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CTE9DS1FVT1RFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CT0RZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQlVUVE9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DQVBUSU9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DRU5URVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkNPTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQ09MR1JPVVBdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkREXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ERVRBSUxTXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ESVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRJVl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRExdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5FTUJFRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRklFTERTRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJR0NBUFRJT05dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJR1VSRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRk9PVEVSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GT1JNXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GUkFNRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRlJBTUVTRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkgxXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IMl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkg0XSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5INV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDZdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhFQURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhFQURFUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSEdST1VQXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSFRNTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSUZSQU1FXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JTUddID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLklOUFVUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JU0lOREVYXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5MSV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTElOS10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTElTVElOR10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUFJTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUFSUVVFRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUVOVV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUVOVUlURU1dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1FVEFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5BVl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTk9FTUJFRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTk9GUkFNRVNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5PU0NSSVBUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5PQkpFQ1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk9MXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QQVJBTV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuUExBSU5URVhUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QUkVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNDUklQVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU0VDVElPTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU0VMRUNUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TT1VSQ0VdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNUWUxFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TVU1NQVJZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UQUJMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEJPRFldID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlREXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5URU1QTEFURV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEVYVEFSRUFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRGT09UXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5USF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEhFQURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRJVExFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVFJBQ0tdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlVMXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5XQlJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlhNUF0gPSB0cnVlO1xyXG5cclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5NQVRITUxdID0ge307XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1JXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1PXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1TXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1URVhUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLkFOTk9UQVRJT05fWE1MXSA9IHRydWU7XHJcblxyXG5TUEVDSUFMX0VMRU1FTlRTW05TLlNWR10gPSB7fTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuVElUTEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuRk9SRUlHTl9PQkpFQ1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuREVTQ10gPSB0cnVlO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUiA9ICdcXHVGRkZEJztcclxuXHJcbmV4cG9ydHMuQ09ERV9QT0lOVFMgPSB7XHJcbiAgICBFT0Y6IC0xLFxyXG4gICAgTlVMTDogMHgwMCxcclxuICAgIFRBQlVMQVRJT046IDB4MDksXHJcbiAgICBDQVJSSUFHRV9SRVRVUk46IDB4MEQsXHJcbiAgICBMSU5FX0ZFRUQ6IDB4MEEsXHJcbiAgICBGT1JNX0ZFRUQ6IDB4MEMsXHJcbiAgICBTUEFDRTogMHgyMCxcclxuICAgIEVYQ0xBTUFUSU9OX01BUks6IDB4MjEsXHJcbiAgICBRVU9UQVRJT05fTUFSSzogMHgyMixcclxuICAgIE5VTUJFUl9TSUdOOiAweDIzLFxyXG4gICAgQU1QRVJTQU5EOiAweDI2LFxyXG4gICAgQVBPU1RST1BIRTogMHgyNyxcclxuICAgIEhZUEhFTl9NSU5VUzogMHgyRCxcclxuICAgIFNPTElEVVM6IDB4MkYsXHJcbiAgICBESUdJVF8wOiAweDMwLFxyXG4gICAgRElHSVRfOTogMHgzOSxcclxuICAgIFNFTUlDT0xPTjogMHgzQixcclxuICAgIExFU1NfVEhBTl9TSUdOOiAweDNDLFxyXG4gICAgRVFVQUxTX1NJR046IDB4M0QsXHJcbiAgICBHUkVBVEVSX1RIQU5fU0lHTjogMHgzRSxcclxuICAgIFFVRVNUSU9OX01BUks6IDB4M0YsXHJcbiAgICBMQVRJTl9DQVBJVEFMX0E6IDB4NDEsXHJcbiAgICBMQVRJTl9DQVBJVEFMX0Y6IDB4NDYsXHJcbiAgICBMQVRJTl9DQVBJVEFMX1g6IDB4NTgsXHJcbiAgICBMQVRJTl9DQVBJVEFMX1o6IDB4NUEsXHJcbiAgICBHUkFWRV9BQ0NFTlQ6IDB4NjAsXHJcbiAgICBMQVRJTl9TTUFMTF9BOiAweDYxLFxyXG4gICAgTEFUSU5fU01BTExfRjogMHg2NixcclxuICAgIExBVElOX1NNQUxMX1g6IDB4NzgsXHJcbiAgICBMQVRJTl9TTUFMTF9aOiAweDdBLFxyXG4gICAgQk9NOiAweEZFRkYsXHJcbiAgICBSRVBMQUNFTUVOVF9DSEFSQUNURVI6IDB4RkZGRFxyXG59O1xyXG5cclxuZXhwb3J0cy5DT0RFX1BPSU5UX1NFUVVFTkNFUyA9IHtcclxuICAgIERBU0hfREFTSF9TVFJJTkc6IFsweDJELCAweDJEXSwgLy8tLVxyXG4gICAgRE9DVFlQRV9TVFJJTkc6IFsweDQ0LCAweDRGLCAweDQzLCAweDU0LCAweDU5LCAweDUwLCAweDQ1XSwgLy9ET0NUWVBFXHJcbiAgICBDREFUQV9TVEFSVF9TVFJJTkc6IFsweDVCLCAweDQzLCAweDQ0LCAweDQxLCAweDU0LCAweDQxLCAweDVCXSwgLy9bQ0RBVEFbXHJcbiAgICBDREFUQV9FTkRfU1RSSU5HOiBbMHg1RCwgMHg1RCwgMHgzRV0sIC8vXV0+XHJcbiAgICBTQ1JJUFRfU1RSSU5HOiBbMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NF0sIC8vc2NyaXB0XHJcbiAgICBQVUJMSUNfU1RSSU5HOiBbMHg1MCwgMHg1NSwgMHg0MiwgMHg0QywgMHg0OSwgMHg0M10sIC8vUFVCTElDXHJcbiAgICBTWVNURU1fU1RSSU5HOiBbMHg1MywgMHg1OSwgMHg1MywgMHg1NCwgMHg0NSwgMHg0RF0gLy9TWVNURU1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0cy5tZXJnZU9wdGlvbnMgPSBmdW5jdGlvbiAoZGVmYXVsdHMsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIHJldHVybiBbZGVmYXVsdHMsIG9wdGlvbnNdLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBvcHRPYmopIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhvcHRPYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBtZXJnZWRba2V5XSA9IG9wdE9ialtrZXldO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbWVyZ2VkO1xyXG4gICAgfSwge30pO1xyXG59O1xyXG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFBhcnNlciA9IHJlcXVpcmUoJy4uL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlcicpLFxyXG4gICAgUGFyc2luZ1VuaXQgPSByZXF1aXJlKCcuL3BhcnNpbmdfdW5pdCcpO1xyXG5cclxuLy9BUElcclxuZXhwb3J0cy5wYXJzZURvY3VtZW50ID0gZnVuY3Rpb24gKGh0bWwsIHRyZWVBZGFwdGVyKSB7XHJcbiAgICAvL05PVEU6IHRoaXMgc2hvdWxkIGJlIHJlZW50cmFudCwgc28gd2UgY3JlYXRlIG5ldyBwYXJzZXIgaGVyZVxyXG4gICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHJlZUFkYXB0ZXIpLFxyXG4gICAgICAgIHBhcnNpbmdVbml0ID0gbmV3IFBhcnNpbmdVbml0KHBhcnNlcik7XHJcblxyXG4gICAgLy9OT1RFOiBvdmVycmlkZSBwYXJzZXIgbG9vcCBtZXRob2RcclxuICAgIHBhcnNlci5fcnVuUGFyc2luZ0xvb3AgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcGFyc2luZ1VuaXQucGFyc2luZ0xvb3BMb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgd2hpbGUgKCFwYXJzaW5nVW5pdC5zdXNwZW5kZWQgJiYgIXRoaXMuc3RvcHBlZClcclxuICAgICAgICAgICAgdGhpcy5faXRlcmF0ZVBhcnNpbmdMb29wKCk7XHJcblxyXG4gICAgICAgIHBhcnNpbmdVbml0LnBhcnNpbmdMb29wTG9jayA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdG9wcGVkKVxyXG4gICAgICAgICAgICBwYXJzaW5nVW5pdC5jYWxsYmFjayh0aGlzLmRvY3VtZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiB3YWl0IHdoaWxlIHBhcnNlckNvbnRyb2xsZXIgd2lsbCBiZSBhZG9wdGVkIGJ5IGNhbGxpbmcgY29kZSwgdGhlblxyXG4gICAgLy9zdGFydCBwYXJzaW5nXHJcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBwYXJzZXIucGFyc2UoaHRtbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGFyc2luZ1VuaXQ7XHJcbn07XHJcblxyXG5leHBvcnRzLnBhcnNlSW5uZXJIdG1sID0gZnVuY3Rpb24gKGlubmVySHRtbCwgY29udGV4dEVsZW1lbnQsIHRyZWVBZGFwdGVyKSB7XHJcbiAgICAvL05PVEU6IHRoaXMgc2hvdWxkIGJlIHJlZW50cmFudCwgc28gd2UgY3JlYXRlIG5ldyBwYXJzZXIgaGVyZVxyXG4gICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHJlZUFkYXB0ZXIpO1xyXG5cclxuICAgIHJldHVybiBwYXJzZXIucGFyc2VGcmFnbWVudChpbm5lckh0bWwsIGNvbnRleHRFbGVtZW50KTtcclxufTtcbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWtiMjAxTDI1dlpHVmZiVzlrZFd4bGN5OXdZWEp6WlRVdmJHbGlMMnB6Wkc5dEwycHpaRzl0WDNCaGNuTmxjaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJbmRYTmxJSE4wY21samRDYzdYSEpjYmx4eVhHNTJZWElnVUdGeWMyVnlJRDBnY21WeGRXbHlaU2duTGk0dmRISmxaVjlqYjI1emRISjFZM1JwYjI0dmNHRnljMlZ5Snlrc1hISmNiaUFnSUNCUVlYSnphVzVuVlc1cGRDQTlJSEpsY1hWcGNtVW9KeTR2Y0dGeWMybHVaMTkxYm1sMEp5azdYSEpjYmx4eVhHNHZMMEZRU1Z4eVhHNWxlSEJ2Y25SekxuQmhjbk5sUkc5amRXMWxiblFnUFNCbWRXNWpkR2x2YmlBb2FIUnRiQ3dnZEhKbFpVRmtZWEIwWlhJcElIdGNjbHh1SUNBZ0lDOHZUazlVUlRvZ2RHaHBjeUJ6YUc5MWJHUWdZbVVnY21WbGJuUnlZVzUwTENCemJ5QjNaU0JqY21WaGRHVWdibVYzSUhCaGNuTmxjaUJvWlhKbFhISmNiaUFnSUNCMllYSWdjR0Z5YzJWeUlEMGdibVYzSUZCaGNuTmxjaWgwY21WbFFXUmhjSFJsY2lrc1hISmNiaUFnSUNBZ0lDQWdjR0Z5YzJsdVoxVnVhWFFnUFNCdVpYY2dVR0Z5YzJsdVoxVnVhWFFvY0dGeWMyVnlLVHRjY2x4dVhISmNiaUFnSUNBdkwwNVBWRVU2SUc5MlpYSnlhV1JsSUhCaGNuTmxjaUJzYjI5d0lHMWxkR2h2WkZ4eVhHNGdJQ0FnY0dGeWMyVnlMbDl5ZFc1UVlYSnphVzVuVEc5dmNDQTlJR1oxYm1OMGFXOXVJQ2dwSUh0Y2NseHVJQ0FnSUNBZ0lDQndZWEp6YVc1blZXNXBkQzV3WVhKemFXNW5URzl2Y0V4dlkyc2dQU0IwY25WbE8xeHlYRzVjY2x4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvSVhCaGNuTnBibWRWYm1sMExuTjFjM0JsYm1SbFpDQW1KaUFoZEdocGN5NXpkRzl3Y0dWa0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbDlwZEdWeVlYUmxVR0Z5YzJsdVoweHZiM0FvS1R0Y2NseHVYSEpjYmlBZ0lDQWdJQ0FnY0dGeWMybHVaMVZ1YVhRdWNHRnljMmx1WjB4dmIzQk1iMk5ySUQwZ1ptRnNjMlU3WEhKY2JseHlYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbk4wYjNCd1pXUXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIQmhjbk5wYm1kVmJtbDBMbU5oYkd4aVlXTnJLSFJvYVhNdVpHOWpkVzFsYm5RcE8xeHlYRzRnSUNBZ2ZUdGNjbHh1WEhKY2JpQWdJQ0F2TDA1UFZFVTZJSGRoYVhRZ2QyaHBiR1VnY0dGeWMyVnlRMjl1ZEhKdmJHeGxjaUIzYVd4c0lHSmxJR0ZrYjNCMFpXUWdZbmtnWTJGc2JHbHVaeUJqYjJSbExDQjBhR1Z1WEhKY2JpQWdJQ0F2TDNOMFlYSjBJSEJoY25OcGJtZGNjbHh1SUNBZ0lIQnliMk5sYzNNdWJtVjRkRlJwWTJzb1puVnVZM1JwYjI0Z0tDa2dlMXh5WEc0Z0lDQWdJQ0FnSUhCaGNuTmxjaTV3WVhKelpTaG9kRzFzS1R0Y2NseHVJQ0FnSUgwcE8xeHlYRzVjY2x4dUlDQWdJSEpsZEhWeWJpQndZWEp6YVc1blZXNXBkRHRjY2x4dWZUdGNjbHh1WEhKY2JtVjRjRzl5ZEhNdWNHRnljMlZKYm01bGNraDBiV3dnUFNCbWRXNWpkR2x2YmlBb2FXNXVaWEpJZEcxc0xDQmpiMjUwWlhoMFJXeGxiV1Z1ZEN3Z2RISmxaVUZrWVhCMFpYSXBJSHRjY2x4dUlDQWdJQzh2VGs5VVJUb2dkR2hwY3lCemFHOTFiR1FnWW1VZ2NtVmxiblJ5WVc1MExDQnpieUIzWlNCamNtVmhkR1VnYm1WM0lIQmhjbk5sY2lCb1pYSmxYSEpjYmlBZ0lDQjJZWElnY0dGeWMyVnlJRDBnYm1WM0lGQmhjbk5sY2loMGNtVmxRV1JoY0hSbGNpazdYSEpjYmx4eVhHNGdJQ0FnY21WMGRYSnVJSEJoY25ObGNpNXdZWEp6WlVaeVlXZHRaVzUwS0dsdWJtVnlTSFJ0YkN3Z1kyOXVkR1Y0ZEVWc1pXMWxiblFwTzF4eVhHNTlPeUpkZlE9PSIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBQYXJzaW5nVW5pdCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhcnNlcikge1xyXG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJzaW5nTG9vcExvY2sgPSBmYWxzZTtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLl9zdGF0ZUd1YXJkID0gZnVuY3Rpb24gKHN1c3BlbmQpIHtcclxuICAgIGlmICh0aGlzLnN1c3BlbmRlZCAmJiBzdXNwZW5kKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyc2U1OiBQYXJzZXIgd2FzIGFscmVhZHkgc3VzcGVuZGVkLiBQbGVhc2UsIGNoZWNrIHlvdXIgY29udHJvbCBmbG93IGxvZ2ljLicpO1xyXG5cclxuICAgIGVsc2UgaWYgKCF0aGlzLnN1c3BlbmRlZCAmJiAhc3VzcGVuZClcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcnNlNTogUGFyc2VyIHdhcyBhbHJlYWR5IHJlc3VtZWQuIFBsZWFzZSwgY2hlY2sgeW91ciBjb250cm9sIGZsb3cgbG9naWMuJyk7XHJcblxyXG4gICAgcmV0dXJuIHN1c3BlbmQ7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3VzcGVuZGVkID0gdGhpcy5fc3RhdGVHdWFyZCh0cnVlKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IHRoaXMuX3N0YXRlR3VhcmQoZmFsc2UpO1xyXG5cclxuICAgIC8vTk9URTogZG9uJ3QgZW50ZXIgcGFyc2luZyBsb29wIGlmIGl0IGlzIGxvY2tlZC4gV2l0aG91dCB0aGlzIGxvY2sgX3J1blBhcnNpbmdMb29wKCkgbWF5IGJlIGNhbGxlZFxyXG4gICAgLy93aGlsZSBwYXJzaW5nIGxvb3AgaXMgc3RpbGwgcnVubmluZy4gRS5nLiB3aGVuIHN1c3BlbmQoKSBhbmQgcmVzdW1lKCkgY2FsbGVkIHN5bmNocm9ub3VzbHkuXHJcbiAgICBpZiAoIXRoaXMucGFyc2luZ0xvb3BMb2NrKVxyXG4gICAgICAgIHRoaXMucGFyc2VyLl9ydW5QYXJzaW5nTG9vcCgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLmRvY3VtZW50V3JpdGUgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgdGhpcy5wYXJzZXIudG9rZW5pemVyLnByZXByb2Nlc3Nvci53cml0ZShodG1sKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5oYW5kbGVTY3JpcHRzID0gZnVuY3Rpb24gKHNjcmlwdEhhbmRsZXIpIHtcclxuICAgIHRoaXMucGFyc2VyLnNjcmlwdEhhbmRsZXIgPSBzY3JpcHRIYW5kbGVyO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLmRvbmUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRGVmYXVsdFRyZWVBZGFwdGVyID0gcmVxdWlyZSgnLi4vdHJlZV9hZGFwdGVycy9kZWZhdWx0JyksXG4gICAgRG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyksXG4gICAgVXRpbHMgPSByZXF1aXJlKCcuLi9jb21tb24vdXRpbHMnKSxcbiAgICBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xuXG4vL0RlZmF1bHQgc2VyaWFsaXplciBvcHRpb25zXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGVuY29kZUh0bWxFbnRpdGllczogdHJ1ZVxufTtcblxuLy9Fc2NhcGluZyByZWdleGVzXG52YXIgQU1QX1JFR0VYID0gLyYvZyxcbiAgICBOQlNQX1JFR0VYID0gL1xcdTAwYTAvZyxcbiAgICBET1VCTEVfUVVPVEVfUkVHRVggPSAvXCIvZyxcbiAgICBMVF9SRUdFWCA9IC88L2csXG4gICAgR1RfUkVHRVggPSAvPi9nO1xuXG4vL0VzY2FwZSBzdHJpbmdcbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHIsIGF0dHJNb2RlKSB7XG4gICAgc3RyID0gc3RyXG4gICAgICAgIC5yZXBsYWNlKEFNUF9SRUdFWCwgJyZhbXA7JylcbiAgICAgICAgLnJlcGxhY2UoTkJTUF9SRUdFWCwgJyZuYnNwOycpO1xuXG4gICAgaWYgKGF0dHJNb2RlKVxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShET1VCTEVfUVVPVEVfUkVHRVgsICcmcXVvdDsnKTtcblxuICAgIGVsc2Uge1xuICAgICAgICBzdHIgPSBzdHJcbiAgICAgICAgICAgIC5yZXBsYWNlKExUX1JFR0VYLCAnJmx0OycpXG4gICAgICAgICAgICAucmVwbGFjZShHVF9SRUdFWCwgJyZndDsnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufVxuXG5cbi8vRW5xdW90ZSBkb2N0eXBlIElEXG5cblxuXG4vL1NlcmlhbGl6ZXJcbnZhciBTZXJpYWxpemVyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodHJlZUFkYXB0ZXIsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXIgfHwgRGVmYXVsdFRyZWVBZGFwdGVyO1xuICAgIHRoaXMub3B0aW9ucyA9IFV0aWxzLm1lcmdlT3B0aW9ucyhERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xufTtcblxuXG4vL0FQSVxuU2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB0aGlzLmh0bWwgPSAnJztcbiAgICB0aGlzLl9zZXJpYWxpemVDaGlsZE5vZGVzKG5vZGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHRtbDtcbn07XG5cblxuLy9JbnRlcm5hbHNcblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVDaGlsZE5vZGVzID0gZnVuY3Rpb24gKHBhcmVudE5vZGUpIHtcbiAgICB2YXIgY2hpbGROb2RlcyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2RlcyhwYXJlbnROb2RlKTtcblxuICAgIGlmIChjaGlsZE5vZGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBjbkxlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgY25MZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gY2hpbGROb2Rlc1tpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShjdXJyZW50Tm9kZSkpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplRWxlbWVudChjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShjdXJyZW50Tm9kZSkpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplVGV4dE5vZGUoY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzQ29tbWVudE5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZUNvbW1lbnROb2RlKGN1cnJlbnROb2RlKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50cmVlQWRhcHRlci5pc0RvY3VtZW50VHlwZU5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZURvY3VtZW50VHlwZU5vZGUoY3VycmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZUVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKSxcbiAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShub2RlKSxcbiAgICAgICAgcXVhbGlmaWVkVG4gPSAobnMgPT09IE5TLkhUTUwgfHwgbnMgPT09IE5TLlNWRyB8fCBucyA9PT0gTlMuTUFUSE1MKSA/IHRuIDogKG5zICsgJzonICsgdG4pO1xuXG4gICAgdGhpcy5odG1sICs9ICc8JyArIHF1YWxpZmllZFRuO1xuICAgIHRoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXMobm9kZSk7XG4gICAgdGhpcy5odG1sICs9ICc+JztcblxuICAgIGlmICh0biAhPT0gJC5BUkVBICYmIHRuICE9PSAkLkJBU0UgJiYgdG4gIT09ICQuQkFTRUZPTlQgJiYgdG4gIT09ICQuQkdTT1VORCAmJiB0biAhPT0gJC5CUiAmJiB0biAhPT0gJC5CUiAmJlxuICAgICAgICB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuRU1CRUQgJiYgdG4gIT09ICQuRlJBTUUgJiYgdG4gIT09ICQuSFIgJiYgdG4gIT09ICQuSU1HICYmIHRuICE9PSAkLklOUFVUICYmXG4gICAgICAgIHRuICE9PSAkLktFWUdFTiAmJiB0biAhPT0gJC5MSU5LICYmIHRuICE9PSAkLk1FTlVJVEVNICYmIHRuICE9PSAkLk1FVEEgJiYgdG4gIT09ICQuUEFSQU0gJiYgdG4gIT09ICQuU09VUkNFICYmXG4gICAgICAgIHRuICE9PSAkLlRSQUNLICYmIHRuICE9PSAkLldCUikge1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5QUkUgfHwgdG4gPT09ICQuVEVYVEFSRUEgfHwgdG4gPT09ICQuTElTVElORykge1xuICAgICAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEZpcnN0Q2hpbGQobm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIHRoaXMudHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShmaXJzdENoaWxkKSkge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQoZmlyc3RDaGlsZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFswXSA9PT0gJ1xcbicpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbCArPSAnXFxuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGlsZE5vZGVzSG9sZGVyID0gdG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyhub2RlKVswXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTtcblxuICAgICAgICB0aGlzLl9zZXJpYWxpemVDaGlsZE5vZGVzKGNoaWxkTm9kZXNIb2xkZXIpO1xuICAgICAgICB0aGlzLmh0bWwgKz0gJzwvJyArIHF1YWxpZmllZFRuICsgJz4nO1xuICAgIH1cbn07XG5cblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KG5vZGUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGF0dHJzTGVuZ3RoID0gYXR0cnMubGVuZ3RoOyBpIDwgYXR0cnNMZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXR0ciA9IGF0dHJzW2ldLFxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZW5jb2RlSHRtbEVudGl0aWVzID8gZXNjYXBlU3RyaW5nKGF0dHIudmFsdWUsIHRydWUpIDogYXR0ci52YWx1ZTtcblxuICAgICAgICB0aGlzLmh0bWwgKz0gJyAnO1xuXG4gICAgICAgIGlmICghYXR0ci5uYW1lc3BhY2UpXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gYXR0ci5uYW1lO1xuXG4gICAgICAgIGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTUwpXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3htbDonICsgYXR0ci5uYW1lO1xuXG4gICAgICAgIGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTUxOUykge1xuICAgICAgICAgICAgaWYgKGF0dHIubmFtZSAhPT0gJ3htbG5zJylcbiAgICAgICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3htbG5zOic7XG5cbiAgICAgICAgICAgIHRoaXMuaHRtbCArPSBhdHRyLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChhdHRyLm5hbWVzcGFjZSA9PT0gTlMuWExJTkspXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3hsaW5rOicgKyBhdHRyLm5hbWU7XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5odG1sICs9IGF0dHIubmFtZXNwYWNlICsgJzonICsgYXR0ci5uYW1lO1xuXG4gICAgICAgIHRoaXMuaHRtbCArPSAnPVwiJyArIHZhbHVlICsgJ1wiJztcbiAgICB9XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQobm9kZSksXG4gICAgICAgIHBhcmVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKSxcbiAgICAgICAgcGFyZW50VG4gPSB2b2lkIDA7XG5cbiAgICBpZiAocGFyZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShwYXJlbnQpKVxuICAgICAgICBwYXJlbnRUbiA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwYXJlbnQpO1xuXG4gICAgaWYgKHBhcmVudFRuID09PSAkLlNUWUxFIHx8IHBhcmVudFRuID09PSAkLlNDUklQVCB8fCBwYXJlbnRUbiA9PT0gJC5YTVAgfHwgcGFyZW50VG4gPT09ICQuSUZSQU1FIHx8XG4gICAgICAgIHBhcmVudFRuID09PSAkLk5PRU1CRUQgfHwgcGFyZW50VG4gPT09ICQuTk9GUkFNRVMgfHwgcGFyZW50VG4gPT09ICQuUExBSU5URVhUIHx8IHBhcmVudFRuID09PSAkLk5PU0NSSVBUKSB7XG4gICAgICAgIHRoaXMuaHRtbCArPSBjb250ZW50O1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgdGhpcy5odG1sICs9IHRoaXMub3B0aW9ucy5lbmNvZGVIdG1sRW50aXRpZXMgPyBlc2NhcGVTdHJpbmcoY29udGVudCwgZmFsc2UpIDogY29udGVudDtcbn07XG5cblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVDb21tZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdGhpcy5odG1sICs9ICc8IS0tJyArIHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q29tbWVudE5vZGVDb250ZW50KG5vZGUpICsgJy0tPic7XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplRG9jdW1lbnRUeXBlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIG5hbWUgPSB0aGlzLnRyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVOYW1lKG5vZGUpLFxuICAgICAgICBwdWJsaWNJZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRUeXBlTm9kZVB1YmxpY0lkKG5vZGUpLFxuICAgICAgICBzeXN0ZW1JZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkKG5vZGUpO1xuXG4gICAgdGhpcy5odG1sICs9ICc8JyArIERvY3R5cGUuc2VyaWFsaXplQ29udGVudChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpICsgJz4nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcbiAgICBUb2tlbml6ZXJQcm94eSA9IHJlcXVpcmUoJy4vdG9rZW5pemVyX3Byb3h5JyksXG4gICAgVXRpbHMgPSByZXF1aXJlKCcuLi9jb21tb24vdXRpbHMnKTtcblxuLy9EZWZhdWx0IG9wdGlvbnNcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gICAgZGVjb2RlSHRtbEVudGl0aWVzOiB0cnVlLFxuICAgIGxvY2F0aW9uSW5mbzogZmFsc2Vcbn07XG5cbi8vU2tpcHBpbmcgaGFuZGxlclxuZnVuY3Rpb24gc2tpcCgpIHtcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcbn1cblxuLy9TaW1wbGVBcGlQYXJzZXJcbnZhciBTaW1wbGVBcGlQYXJzZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoYW5kbGVycywgb3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IFV0aWxzLm1lcmdlT3B0aW9ucyhERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7XG4gICAgICAgIGRvY3R5cGU6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLmRvY3R5cGUpLFxuICAgICAgICBzdGFydFRhZzogdGhpcy5fd3JhcEhhbmRsZXIoaGFuZGxlcnMuc3RhcnRUYWcpLFxuICAgICAgICBlbmRUYWc6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLmVuZFRhZyksXG4gICAgICAgIHRleHQ6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLnRleHQpLFxuICAgICAgICBjb21tZW50OiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy5jb21tZW50KVxuICAgIH07XG59O1xuXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl93cmFwSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgdmFyIHBhcnNlciA9IHRoaXM7XG5cbiAgICBoYW5kbGVyID0gaGFuZGxlciB8fCBza2lwO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChwYXJzZXIuY3VycmVudFRva2VuTG9jYXRpb24pO1xuICAgICAgICAgICAgaGFuZGxlci5hcHBseShoYW5kbGVyLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlcjtcbn07XG5cbi8vQVBJXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICB2YXIgdG9rZW4gPSBudWxsO1xuXG4gICAgdGhpcy5fcmVzZXQoaHRtbCk7XG5cbiAgICBkbyB7XG4gICAgICAgIHRva2VuID0gdGhpcy50b2tlbml6ZXJQcm94eS5nZXROZXh0VG9rZW4oKTtcblxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOIHx8XG4gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4pIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nVGV4dCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5Mb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uLmVuZCA9IHRva2VuLmxvY2F0aW9uLmVuZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGV4dCA9ICh0aGlzLnBlbmRpbmdUZXh0IHx8ICcnKSArIHRva2VuLmNoYXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0UGVuZGluZ1RleHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVRva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKHRva2VuLnR5cGUgIT09IFRva2VuaXplci5FT0ZfVE9LRU4pO1xufTtcblxuLy9JbnRlcm5hbHNcblNpbXBsZUFwaVBhcnNlci5wcm90b3R5cGUuX2hhbmRsZVRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLmhhbmRsZXJzLnN0YXJ0VGFnKHRva2VuLnRhZ05hbWUsIHRva2VuLmF0dHJzLCB0b2tlbi5zZWxmQ2xvc2luZyk7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTilcbiAgICAgICAgdGhpcy5oYW5kbGVycy5lbmRUYWcodG9rZW4udGFnTmFtZSk7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTilcbiAgICAgICAgdGhpcy5oYW5kbGVycy5jb21tZW50KHRva2VuLmRhdGEpO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU4pXG4gICAgICAgIHRoaXMuaGFuZGxlcnMuZG9jdHlwZSh0b2tlbi5uYW1lLCB0b2tlbi5wdWJsaWNJZCwgdG9rZW4uc3lzdGVtSWQpO1xuXG59O1xuXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgdGhpcy50b2tlbml6ZXJQcm94eSA9IG5ldyBUb2tlbml6ZXJQcm94eShodG1sLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMucGVuZGluZ1RleHQgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24gPSBudWxsO1xufTtcblxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5fZW1pdFBlbmRpbmdUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnBlbmRpbmdUZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMudGV4dCh0aGlzLnBlbmRpbmdUZXh0KTtcbiAgICAgICAgdGhpcy5wZW5kaW5nVGV4dCA9IG51bGw7XG4gICAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcbiAgICBGb3JlaWduQ29udGVudCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9mb3JlaWduX2NvbnRlbnQnKSxcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcbiAgICBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xuXG5cbi8vVG9rZW5pemVyIHByb3h5XG4vL05PVEU6IHRoaXMgcHJveHkgc2ltdWxhdGVzIGFkanVzdG1lbnQgb2YgdGhlIFRva2VuaXplciB3aGljaCBwZXJmb3JtZWQgYnkgc3RhbmRhcmQgcGFyc2VyIGR1cmluZyB0cmVlIGNvbnN0cnVjdGlvbi5cbnZhciBUb2tlbml6ZXJQcm94eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGh0bWwsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoaHRtbCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrID0gW107XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFja1RvcCA9IC0xO1xuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IG51bGw7XG4gICAgdGhpcy5pbkZvcmVpZ25Db250ZW50ID0gZmFsc2U7XG59O1xuXG4vL0FQSVxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdG9rZW4gPSB0aGlzLnRva2VuaXplci5nZXROZXh0VG9rZW4oKTtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLl9oYW5kbGVTdGFydFRhZ1Rva2VuKHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLl9oYW5kbGVFbmRUYWdUb2tlbih0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4gJiYgdGhpcy5pbkZvcmVpZ25Db250ZW50KSB7XG4gICAgICAgIHRva2VuLnR5cGUgPSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOO1xuICAgICAgICB0b2tlbi5jaGFycyA9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbn07XG5cbi8vTmFtZXNwYWNlIHN0YWNrIG11dGF0aW9uc1xuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9lbnRlck5hbWVzcGFjZSA9IGZ1bmN0aW9uIChuYW1lc3BhY2UpIHtcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrVG9wKys7XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFjay5wdXNoKG5hbWVzcGFjZSk7XG5cbiAgICB0aGlzLmluRm9yZWlnbkNvbnRlbnQgPSBuYW1lc3BhY2UgIT09IE5TLkhUTUw7XG4gICAgdGhpcy5jdXJyZW50TmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSB0aGlzLmluRm9yZWlnbkNvbnRlbnQ7XG59O1xuXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrVG9wLS07XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFjay5wb3AoKTtcblxuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlU3RhY2tbdGhpcy5uYW1lc3BhY2VTdGFja1RvcF07XG4gICAgdGhpcy5pbkZvcmVpZ25Db250ZW50ID0gdGhpcy5jdXJyZW50TmFtZXNwYWNlICE9PSBOUy5IVE1MO1xuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSB0aGlzLmluRm9yZWlnbkNvbnRlbnQ7XG59O1xuXG4vL1Rva2VuIGhhbmRsZXJzXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2Vuc3VyZVRva2VuaXplck1vZGUgPSBmdW5jdGlvbiAodG4pIHtcbiAgICBpZiAodG4gPT09ICQuVEVYVEFSRUEgfHwgdG4gPT09ICQuVElUTEUpXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuUExBSU5URVhUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVClcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5TQ1JJUFRfREFUQTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLklGUkFNRSB8fCB0biA9PT0gJC5YTVAgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0VNQkVEIHx8IHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLk5PU0NSSVBUKSB7XG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkFXVEVYVDtcbiAgICB9XG59O1xuXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2hhbmRsZVN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlNWRylcbiAgICAgICAgdGhpcy5fZW50ZXJOYW1lc3BhY2UoTlMuU1ZHKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk1BVEgpXG4gICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLk1BVEhNTCk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xuICAgICAgICAgICAgaWYgKEZvcmVpZ25Db250ZW50LmNhdXNlc0V4aXQodG9rZW4pKVxuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xuXG4gICAgICAgICAgICBlbHNlIGlmIChGb3JlaWduQ29udGVudC5pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHRuLCB0aGlzLmN1cnJlbnROYW1lc3BhY2UpIHx8XG4gICAgICAgICAgICAgICAgICAgICBGb3JlaWduQ29udGVudC5pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHRuLCB0aGlzLmN1cnJlbnROYW1lc3BhY2UsIHRva2VuLmF0dHJzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLkhUTUwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5fZW5zdXJlVG9rZW5pemVyTW9kZSh0bik7XG4gICAgfVxufTtcblxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9oYW5kbGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAoIXRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xuICAgICAgICB2YXIgcHJldmlvdXNOcyA9IHRoaXMubmFtZXNwYWNlU3RhY2tbdGhpcy5uYW1lc3BhY2VTdGFja1RvcCAtIDFdO1xuXG4gICAgICAgIC8vTk9URTogY2hlY2sgZm9yIGV4aXQgZnJvbSBpbnRlZ3JhdGlvbiBwb2ludFxuICAgICAgICBpZiAoRm9yZWlnbkNvbnRlbnQuaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCh0biwgcHJldmlvdXNOcykgfHxcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIHByZXZpb3VzTnMsIHRva2VuLmF0dHJzKSkge1xuICAgICAgICAgICAgdGhpcy5fbGVhdmVDdXJyZW50TmFtZXNwYWNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLkRBVEE7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAoKHRuID09PSAkLlNWRyAmJiB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPT09IE5TLlNWRykgfHxcbiAgICAgICAgICAgICAodG4gPT09ICQuTUFUSCAmJiB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPT09IE5TLk1BVEhNTCkpXG4gICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydHMuYXNzaWduID0gZnVuY3Rpb24gKHRva2VuaXplcikge1xyXG4gICAgLy9OT1RFOiBvYnRhaW4gVG9rZW5pemVyIHByb3RvIHRoaXMgd2F5IHRvIGF2b2lkIG1vZHVsZSBjaXJjdWxhciByZWZlcmVuY2VzXHJcbiAgICB2YXIgdG9rZW5pemVyUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodG9rZW5pemVyKTtcclxuXHJcbiAgICB0b2tlbml6ZXIudG9rZW5TdGFydExvYyA9IC0xO1xyXG5cclxuICAgIC8vTk9URTogYWRkIGxvY2F0aW9uIGluZm8gYnVpbGRlciBtZXRob2RcclxuICAgIHRva2VuaXplci5fYXR0YWNoTG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICAgICAgdG9rZW4ubG9jYXRpb24gPSB7XHJcbiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnRva2VuU3RhcnRMb2MsXHJcbiAgICAgICAgICAgIGVuZDogLTFcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICAvL05PVEU6IHBhdGNoIHRva2VuIGNyZWF0aW9uIG1ldGhvZHMgYW5kIGF0dGFjaCBsb2NhdGlvbiBvYmplY3RzXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZUZpcnN0Q2gpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlU3RhcnRUYWdUb2tlbi5jYWxsKHRoaXMsIHRhZ05hbWVGaXJzdENoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZUVuZFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRhZ05hbWVGaXJzdENoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZUVuZFRhZ1Rva2VuLmNhbGwodGhpcywgdGFnTmFtZUZpcnN0Q2gpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaExvY2F0aW9uSW5mbyh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIHRva2VuaXplci5fY3JlYXRlQ29tbWVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVDb21tZW50VG9rZW4uY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZURvY3R5cGVUb2tlbiA9IGZ1bmN0aW9uIChkb2N0eXBlTmFtZUZpcnN0Q2gpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlRG9jdHlwZVRva2VuLmNhbGwodGhpcywgZG9jdHlwZU5hbWVGaXJzdENoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZUNoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZUNoYXJhY3RlclRva2VuLmNhbGwodGhpcywgdHlwZSwgY2gpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaExvY2F0aW9uSW5mbyh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vTk9URTogcGF0Y2ggdG9rZW4gZW1pc3Npb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgZW5kIGxvY2F0aW9uXHJcbiAgICB0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIHBlbmRpbmcgY2hhcmFjdGVyIHRva2VuIG1ha2UgaXQncyBlbmQgbG9jYXRpb24gZXF1YWwgdG8gdGhlXHJcbiAgICAgICAgLy9jdXJyZW50IHRva2VuJ3Mgc3RhcnQgbG9jYXRpb24uXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbi5lbmQgPSB0aGlzLmN1cnJlbnRUb2tlbi5sb2NhdGlvbi5zdGFydDtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubG9jYXRpb24uZW5kID0gdGhpcy5wcmVwcm9jZXNzb3IucG9zICsgMTtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fZW1pdEN1cnJlbnRUb2tlbi5jYWxsKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGNoYXJhY3RlciB0b2tlbiBhbmQgaXQncyBsb2NhdGlvbiB3YXNuJ3Qgc2V0IGluIHRoZSBfZW1pdEN1cnJlbnRUb2tlbigpLFxyXG4gICAgICAgIC8vdGhlbiBzZXQgaXQncyBsb2NhdGlvbiBhdCB0aGUgY3VycmVudCBwcmVwcm9jZXNzb3IgcG9zaXRpb25cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gJiYgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kID09PSAtMSkge1xyXG4gICAgICAgICAgICAvL05PVEU6IHdlIGRvbid0IG5lZWQgdG8gaW5jcmVtZW50IHByZXByb2Nlc3NvciBwb3NpdGlvbiwgc2luY2UgY2hhcmFjdGVyIHRva2VuXHJcbiAgICAgICAgICAgIC8vZW1pc3Npb24gaXMgYWx3YXlzIGZvcmNlZCBieSB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRva2VuIGhlcmUuXHJcbiAgICAgICAgICAgIC8vU28sIHdlIGFscmVhZHkgaGF2ZSBhZHZhbmNlZCBwb3NpdGlvbi5cclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kID0gdGhpcy5wcmVwcm9jZXNzb3IucG9zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4uY2FsbCh0aGlzKTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiBwYXRjaCBpbml0aWFsIHN0YXRlcyBmb3IgZWFjaCBtb2RlIHRvIG9idGFpbiB0b2tlbiBzdGFydCBwb3NpdGlvblxyXG4gICAgT2JqZWN0LmtleXModG9rZW5pemVyUHJvdG8uTU9ERSlcclxuXHJcbiAgICAgICAgLm1hcChmdW5jdGlvbiAobW9kZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRva2VuaXplclByb3RvLk1PREVbbW9kZU5hbWVdO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZSkge1xyXG4gICAgICAgICAgICB0b2tlbml6ZXJbc3RhdGVdID0gZnVuY3Rpb24gKGNwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuU3RhcnRMb2MgPSB0aGlzLnByZXByb2Nlc3Nvci5wb3M7XHJcbiAgICAgICAgICAgICAgICB0b2tlbml6ZXJQcm90b1tzdGF0ZV0uY2FsbCh0aGlzLCBjcCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbi8vTk9URTogdGhpcyBmaWxlIGNvbnRhaW5zIGF1dG8gZ2VuZXJhdGVkIHRyaWUgc3RydWN0dXJlIHRoYXQgaXMgdXNlZCBmb3IgbmFtZWQgZW50aXR5IHJlZmVyZW5jZXMgY29uc3VtcHRpb25cclxuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCN0b2tlbml6aW5nLWNoYXJhY3Rlci1yZWZlcmVuY2VzIGFuZFxyXG4vL2h0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL25hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VzLmh0bWwjbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZXMpXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgMHg0MToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxOTNdfX0sIGM6IFsxOTNdfX19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNThdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxOTRdfX0sIGM6IFsxOTRdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQwXX19fX19LCAweDQ1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTk4XX19LCBjOiBbMTk4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA2OF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTkyXX19LCBjOiBbMTkyXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDcwOiB7bDogezB4Njg6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxM119fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsyNTZdfX19fX19fX19LCAweDREOiB7bDogezB4NTA6IHtsOiB7MHgzQjoge2M6IFszOF19fSwgYzogWzM4XX19fSwgMHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4MzVdfX19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjBdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTIwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg0Njoge2w6IHsweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODI4OV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTk3XX19LCBjOiBbMTk3XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTY0XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODc4OF19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTk1XX19LCBjOiBbMTk1XX19fX19fX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxOTZdfX0sIGM6IFsxOTZdfX19fX19fSxcclxuICAgIDB4NjE6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjI1XX19LCBjOiBbMjI1XX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjU5XX19fX19fX19fX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbODc2Nl19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbODc2N119fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4NzY2LCA4MTldfX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIyNl19fSwgYzogWzIyNl19fX19fSwgMHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxODBdfX0sIGM6IFsxODBdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDcyXX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMjMwXX19LCBjOiBbMjMwXX19fX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs4Mjg5XX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTRdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyNF19fSwgYzogWzIyNF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzM6IHtsOiB7MHg3OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODUwMV19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg1MDFdfX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NDVdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjU3XX19fX19LCAweDZDOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDgxNV19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMzhdfX0sIGM6IFszOF19fX0sIDB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwODM3XX19fX19fX0sIDB4M0I6IHtjOiBbODc0M119LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4NDRdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg0MF19fX19fX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwODQyXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODczNl19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjBdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzM2XX19fX19LCAweDZEOiB7bDogezB4NzM6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDY2NF19fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDY2NV19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDY2Nl19fX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY2N119fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2OF19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMDY2OV19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDY3MF19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFsxMDY3MV19fX19fSwgMHgzQjoge2M6IFs4NzM3XX19fX19fX0sIDB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MzVdfSwgMHg3Njoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg5NF19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NTNdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODczOF19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzE5N119fX19fSwgMHg3QToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwODRdfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI2MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDZdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NjNdfX19fX19fX19LCAweDNCOiB7YzogWzg3NzZdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODY0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3NzhdfX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4Nzc5XX19fX19LCAweDZGOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFszOV19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzg3NzZdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc3OF19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsyMjldfX0sIGM6IFsyMjldfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTBdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs0Ml19fX0sIDB4Nzk6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc3Nl19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzgxXX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyN119fSwgYzogWzIyN119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjI4XX19LCBjOiBbMjI4XX19fX19LCAweDc3OiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1NV19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzY5XX19fX19fX19fX19LFxyXG4gICAgMHg2Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc4MF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDE0XX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NV19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY1XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg5MDldfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5M119fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5NjVdfSwgMHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODk2NV19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTE0MV19LCAweDc0OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTE0Ml19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4NzgwXX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDczXX19fX19LCAweDY0OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIyMl19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NTddfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3NTddfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjcyXX19fX19fX19fX19LCAweDcwOiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzEwMTRdfX19fX19fSwgMHg3Mjoge2w6IHsweDZFOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDNCOiB7YzogWzg0OTJdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NDZdfX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODUwMl19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4ODEyXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5NV19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg5OF19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs5NzExXX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4OTldfX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzUyXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzU0XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNzU4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NzMzXX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYxXX19fX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbOTY1MV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzU2XX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTddfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5Nl19fX19fX19fX19fX19fX0sIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTA5XX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDdBOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDczMV19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY0Ml19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjUyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYyXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NjZdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NjU2XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzkyNTFdfX19fX19fSwgMHg2Qjoge2w6IHsweDMxOiB7bDogezB4MzI6IHtsOiB7MHgzQjoge2M6IFs5NjE4XX19fSwgMHgzNDoge2w6IHsweDNCOiB7YzogWzk2MTddfX19fX0sIDB4MzM6IHtsOiB7MHgzNDoge2w6IHsweDNCOiB7YzogWzk2MTldfX19fX19fSwgMHg2Rjoge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5NjA4XX19fX19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNjEsIDg0MjFdfSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzg4MDEsIDg0MjFdfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NzZdfX19fX19fSwgMHg0RToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk4OV19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0N119fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4NjldfSwgMHg3NDoge2w6IHsweDZGOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODY5XX19fX19fX19fSwgMHg3Nzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MDRdfX19fX19fX19LCAweDc4OiB7bDogezB4NjI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA2OTddfX19fX19fSwgMHg2NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbOTQ4OF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTU3XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk0ODRdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU1NF19fX19fSwgMHg0NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbOTU1OF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTU5XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk1NTVdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU1Nl19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzk0NzJdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzk1MTZdfX19LCAweDQ0OiB7bDogezB4M0I6IHtjOiBbOTU3M119fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5NTI0XX19fSwgMHg1NToge2w6IHsweDNCOiB7YzogWzk1NzZdfX19fX0sIDB4NDg6IHtsOiB7MHgzQjoge2M6IFs5NTUyXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5NTcyXX19fSwgMHg0NDoge2w6IHsweDNCOiB7YzogWzk1NzRdfX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTU3NV19fX0sIDB4NTU6IHtsOiB7MHgzQjoge2M6IFs5NTc3XX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODYzXX19fX19fX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg2Ml19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NjRdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk0OTZdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU2M119fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NDkyXX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NjBdfX19fX0sIDB4NTU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk1NjRdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU2NV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NTYxXX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NjJdfX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5NDc0XX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs5NTMyXX19fSwgMHg0ODoge2w6IHsweDNCOiB7YzogWzk1NzhdfX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbOTUwOF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTY5XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk1MDBdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU2Nl19fX19fSwgMHg1Njoge2w6IHsweDNCOiB7YzogWzk1NTNdfSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzk1NzldfX19LCAweDQ4OiB7bDogezB4M0I6IHtjOiBbOTU4MF19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFs5NTcwXX19fSwgMHg0Qzoge2w6IHsweDNCOiB7YzogWzk1NzFdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbOTU2N119fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFs5NTY4XX19fX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NV19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzcyOF19fX19fX19LCAweDc2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTY2XX19LCBjOiBbMTY2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTFdfX19fX0sIDB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODI3MV19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY1XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA2OTNdfX19LCAweDNCOiB7YzogWzkyXX0sIDB4Njg6IHtsOiB7MHg3Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDE4NF19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODIyNl19LCAweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4MjI2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4Ml19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MjZdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4M119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc4M119fX19fX19fX19fX19LFxyXG4gICAgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDczOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbMTA5ODNdfX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5NjZdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNDFdfX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc1N119fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDZFOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ5Ml19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTE0XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA2OV19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjFdfX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzcyOF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5Ml19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzgyXX19fX19fX19fX19fX0sXHJcbiAgICAweDQzOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI2Ml19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTE0XX0sIDB4Njk6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NDoge2w6IHsweDY5OiB7bDogezB4NjY6IHtsOiB7MHg2Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NDoge2w6IHsweDNCOiB7YzogWzg1MTddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ5M119fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjhdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTk5XX19LCBjOiBbMTk5XX19fX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjY0XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTJdfX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyNjZdfX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxODRdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxODNdfX19fX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTNdfX19fX0sIDB4NDg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2M119fX19fX19LCAweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzVdfX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTddfX19fX19fSwgMHg0RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1NF19fX19fX19fX19fSwgMHg1MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NTNdfX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODU1XX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDc3OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg0OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc1NF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg0Mzoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDc5OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NTE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMjFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMTddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzU5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg2OF19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODAxXX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1MV19fX19fX19LCAweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDUwXX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg3NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzIwXX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NDM6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDc3OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg0OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc1NV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRGOiB7bDogezB4NTA6IHtsOiB7MHg1OToge2w6IHsweDNCOiB7YzogWzE2OV19fSwgYzogWzE2OV19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NjZdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4NDM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MV19fX19fX19LCAweDNCOiB7YzogWzg5MTVdfX19fX19fSxcclxuICAgIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjYzXX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwODIwXX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI1XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI3XX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyM119fX19fX19LCAweDNCOiB7YzogWzg3NDVdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxNl19fX19fX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODc0NSwgNjUwMjRdfX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODI1N119fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbNzExXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODI5XX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI2OV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMzFdfX0sIGM6IFsyMzFdfX19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyNjVdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgyOF19LCAweDczOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDgzMl19fX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzI2N119fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTg0XX19LCBjOiBbMTg0XX19fX19LCAweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3NF19fX19fX19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTYyXX0sIDB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE4M119fX19fX19fX19fX0sIGM6IFsxNjJdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5Nl19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk1XX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDAzXX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDAwM119fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjddfX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbNzEwXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3OTFdfX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzRdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjM1XX19fX19fX19fX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTldfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4NThdfX19fX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg2MV19fX19fX19fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFsxNzRdfX19LCAweDUzOiB7bDogezB4M0I6IHtjOiBbOTQxNl19fX19fX19fX19fSwgMHgzQjoge2M6IFs5Njc1XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDY5MV19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzkxXX19fSwgMHg2Njoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NjhdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA5OTFdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjkwXX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODI3XX0sIDB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgyN119fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs1OF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4OF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc4OF19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs0NF19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjRdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3MDVdfSwgMHg2Njoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcyOF19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA1XX19fX19fX19fSwgMHg3ODoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDUwXX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc3M119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODYxXX19fX19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzUwXX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQ4XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzIwXX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxNjldfSwgMHg3Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ3MV19fX19fX0sIGM6IFsxNjldfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjI5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTAwMDddfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5Ml19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NTldfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTYxXX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5NjBdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTYyXX19fX19fX19fSwgMHg3NDoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDNdfX19fX19fX19LCAweDc1OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTUyXX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTQ5XX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MjZdfX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5MjddfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MzBdfSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwNTU3XX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI0XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODIyXX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyNl19fX19fX19LCAweDNCOiB7YzogWzg3NDZdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ1XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODIxXX19fX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODc0NiwgNjUwMjRdfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjMxXX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDU1Nl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5MjZdfX19fX19fX19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbODkyN119fX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MTBdfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkxMV19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTY0XX19LCBjOiBbMTY0XX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjMwXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzMV19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkxMF19fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5MTFdfX19fX19fX19LCAweDc3OiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1NF19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTNdfX19fX19fX19LCAweDc5OiB7bDogezB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFs5MDA1XX19fX19fX19fX19fX0sXHJcbiAgICAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg2Nzoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjRdfX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODUwNF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1OTVdfX19fX0sIDB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzgyMDhdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg4NjddfX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTldfX19fX19fSwgMHg2Mjoge2w6IHsweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDUxMV19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs3MzNdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNzFdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3Nl19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjI1XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1MF19fX19fX19LCAweDNCOiB7YzogWzg1MThdfSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA4NzFdfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTc2XX19LCBjOiBbMTc2XX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ4XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjczXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5N119fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5N119fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODY0M119fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQyXX19fX19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTAwXX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODkwMF19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgzMF19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODMwXX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxNjhdfX19LCAweDY3OiB7bDogezB4NjE6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5ODldfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk0Nl19fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMjQ3XX0sIDB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQ3XX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTAzXX19fX19fX19fX19fX19fX0sIGM6IFsyNDddfX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbODkwM119fX19fX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTA2XX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5OTBdfX19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTczXX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszNl19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0OV19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzcyOV19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4Nzg0XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4NV19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODc2MF19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjRdfX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4NjVdfX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5NjZdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTVdfX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjUwXX19fX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODY0M119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2NDJdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYyOiB7bDogezB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTEyXX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4OTkxXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk3Ml19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTNdfX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTEwOV19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA3NDJdfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyNzNdfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTQ1XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NjNdfSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NjJdfX19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY5M119fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjA3XX19fX19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2Ml19fX19fX19fX19fX19LCAweDdBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTldfX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzldfX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg2Nzoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjVdfX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjA5XX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTgwXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjcwXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNDRdfX19fX0sIDB4NDQ6IHtsOiB7MHgzQjoge2M6IFs4NTE3XX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2ODoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA1MTNdfX19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzExXX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxNl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3MV19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxODBdfX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbNzI5XX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MzNdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2XX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MzJdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODkwMF19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDY2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ0OiB7bDogezB4M0I6IHtjOiBbODUxOF19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjZdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjNdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNjhdfSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDEyXX19fX19fX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3ODRdfX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNjhdfX19LCAweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1OV19fX19fX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTZdfX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYwXX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDk4MF19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMyXX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzM119fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NThdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg3Ml19fX19fX19fX19fX19fX19fSwgMHg1NToge2w6IHsweDcwOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTddfX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2MV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MTVdfX19fX19fSwgMHgzQjoge2M6IFs4NTk1XX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjkzXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTldfX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzc4NV19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3Nl19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5MF19fX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTgyXX19fX19fX0sIDB4M0I6IHtjOiBbODYzN119fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkxXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODNdfX19fX19fSwgMHgzQjoge2M6IFs4NjQxXX19fX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE1XX19fX19fX19fX19LCAweDNCOiB7YzogWzg4NjhdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NjddfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyNzJdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyOV19fX19fX19LCAweDVBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzldfX19fX19fX19LFxyXG4gICAgMHg0NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDFdfX0sIGM6IFsyMDFdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyODJdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIwMl19fSwgYzogWzIwMl19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNjldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjc4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3Ml19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjAwXX19LCBjOiBbMjAwXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzEyXX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsyNzRdfX19fX19fSwgMHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTcyM119fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDUzOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg1Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjQzXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0RToge2w6IHsweDQ3OiB7bDogezB4M0I6IHtjOiBbMzMwXX19fX19LCAweDZGOiB7bDogezB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjgwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNF19fX19fX19LCAweDcwOiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzkxN119fX19fX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4NjldfSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3MF19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg2NTJdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTZdfX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwODY3XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxOV19fX19fSwgMHg1NDoge2w6IHsweDQ4OiB7bDogezB4M0I6IHtjOiBbMjA4XX19LCBjOiBbMjA4XX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMDNdfX0sIGM6IFsyMDNdfX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MDddfX19fX19fX19LCAweDcwOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODUxOV19fX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg2NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzNdfX0sIGM6IFsyMzNdfX19fX19fSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODYyXX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyODNdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIzNF19fSwgYzogWzIzNF19LCAweDNCOiB7YzogWzg3OTBdfX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4Nzg5XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzExMDFdfX19fX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3MV19fX19fX19LCAweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg1XX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjc5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NTE5XX19fSwgMHg2Njoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3ODZdfX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5OF19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzEwOTA2XX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzJdfX0sIGM6IFsyMzJdfX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTAyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5MDRdfX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDkwNV19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzkxOTFdfX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg0NjddfX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDFdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDkwM119fX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzI3NV19fX19fX19LCAweDcwOiB7bDogezB4NzQ6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzg3MDldfSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDcwOiB7bDogezB4MzE6IHtsOiB7MHgzMzoge2w6IHsweDNCOiB7YzogWzgxOTZdfX19LCAweDM0OiB7bDogezB4M0I6IHtjOiBbODE5N119fX19fSwgMHgzQjoge2M6IFs4MTk1XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzMzMV19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgxOTRdfX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI4MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTBdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTE3XX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNzIzXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg2NV19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NDldfSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NDldfX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwMTNdfX19fX19fX19LCAweDcxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4NzkwXX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4Nzg5XX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NzBdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Nzoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDkwMl19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDFdfX19fX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzYxXX19fX19fX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc5OV19fX19fX19LCAweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODAxXX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDNCOiB7YzogWzEwODcyXX19fX19fX19fX19LCAweDc2OiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNzI1XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjA5XX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4N119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5NV19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg0XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NzBdfX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUxXX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzI0MF19fSwgYzogWzI0MF19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjM1XX19LCBjOiBbMjM1XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODM2NF19fX19fX19LCAweDc4OiB7bDogezB4NjM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMzXX19fX19LCAweDY5OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MDddfX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NDk2XX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg1MTldfX19fX19fX19fX19fX19fX19fX19fX19fSxcclxuICAgIDB4NjY6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4Nzg2XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOTJdfX19fX0sIDB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3OTJdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzY0MjU5XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1Nl19fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI2MF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTldfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1N119fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIsIDEwNl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgzN119fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1OF19fX19fX19LCAweDc0OiB7bDogezB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk2NDldfX19fX19fX19LCAweDZFOiB7bDogezB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzQwMl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1MV19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3MDRdfX19fX19fSwgMHg2Qjoge2w6IHsweDNCOiB7YzogWzg5MTZdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTY5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzY1XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzMToge2w6IHsweDMyOiB7bDogezB4M0I6IHtjOiBbMTg5XX19LCBjOiBbMTg5XX0sIDB4MzM6IHtsOiB7MHgzQjoge2M6IFs4NTMxXX19fSwgMHgzNDoge2w6IHsweDNCOiB7YzogWzE4OF19fSwgYzogWzE4OF19LCAweDM1OiB7bDogezB4M0I6IHtjOiBbODUzM119fX0sIDB4MzY6IHtsOiB7MHgzQjoge2M6IFs4NTM3XX19fSwgMHgzODoge2w6IHsweDNCOiB7YzogWzg1MzldfX19fX0sIDB4MzI6IHtsOiB7MHgzMzoge2w6IHsweDNCOiB7YzogWzg1MzJdfX19LCAweDM1OiB7bDogezB4M0I6IHtjOiBbODUzNF19fX19fSwgMHgzMzoge2w6IHsweDM0OiB7bDogezB4M0I6IHtjOiBbMTkwXX19LCBjOiBbMTkwXX0sIDB4MzU6IHtsOiB7MHgzQjoge2M6IFs4NTM1XX19fSwgMHgzODoge2w6IHsweDNCOiB7YzogWzg1NDBdfX19fX0sIDB4MzQ6IHtsOiB7MHgzNToge2w6IHsweDNCOiB7YzogWzg1MzZdfX19fX0sIDB4MzU6IHtsOiB7MHgzNjoge2w6IHsweDNCOiB7YzogWzg1MzhdfX19LCAweDM4OiB7bDogezB4M0I6IHtjOiBbODU0MV19fX19fSwgMHgzNzoge2w6IHsweDM4OiB7bDogezB4M0I6IHtjOiBbODU0Ml19fX19fX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4MjYwXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk5NF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk1XX19fX19fX19fSxcclxuICAgIDB4NDY6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2MF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDczXX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTcyNF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDUzOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg1Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjQyXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNV19fX19fSwgMHg3Mjoge2w6IHsweDQxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3MDRdfX19fX19fX19LCAweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDk3XX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5N119fX19fX19fX0sXHJcbiAgICAweDY3OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzUwMV19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ3XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5ODldfX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4ODZdfX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI4N119fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI4NV19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3NV19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyODldfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDVdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjNdfX19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwNV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwN119fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc4XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTA5MjFdfX19fX0sIDB4M0I6IHtjOiBbMTA4NzhdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg4MF19LCAweDZGOiB7bDogezB4M0I6IHtjOiBbMTA4ODJdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODg0XX19fX19fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMywgNjUwMjRdfSwgMHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDBdfX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA3XX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg5Ml19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTAwXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODgxMV19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMV19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg1MDNdfX19fX19fX19LCAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDddfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA5MTddfX19LCAweDNCOiB7YzogWzg4MjNdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODk4XX19fSwgMHg2QToge2w6IHsweDNCOiB7YzogWzEwOTE2XX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODkwXX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDg5MF19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4ODhdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwODg4XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA5XX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA5XX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTM1XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTJdfX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDU4XX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODE5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg5NF19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg5Nl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTA5MTldfX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDg3NF19fX19fX19LCAweDNCOiB7YzogWzYyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODkxOV19fX19fX19LCAweDZDOiB7bDogezB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2NDVdfX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3Nl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwODg2XX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYxNl19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTldfX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTIzXX19fX19fX19fSwgMHg3MToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4OTJdfX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyM119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgxOV19fX19fX19fX19LCBjOiBbNjJdfSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgwOSwgNjUwMjRdfX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA5LCA2NTAyNF19fX19fX19fX0sXHJcbiAgICAweDQ3OiB7bDogezB4NjE6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MTVdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzk4OF19fX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjg2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyOTBdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI4NF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0M119fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyODhdfX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc0XX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMV19fX0sIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyN119fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNl19fX19fX19LCAweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODA1XX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTIzXX19fX19fX19fX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgwN119fX19fX19fX19fX19fX19fX19LCAweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5MTRdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyM119fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg3OF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MTldfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTcwXX19fX19fX0sIDB4NTQ6IHtsOiB7MHgzQjoge2M6IFs2Ml19fSwgYzogWzYyXX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODExXX19fX19LFxyXG4gICAgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbNzExXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NF19fX19fSwgMHg0MToge2w6IHsweDUyOiB7bDogezB4NDQ6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2Nl19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI5Ml19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjBdfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDYyOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NTldfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ2MV19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4N0E6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NEM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NDcyXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDU5XX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMjk0XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDg6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzgyXX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzgzXX19fX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgyMDJdfX19fX19fX19LCAweDZDOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxODldfX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDU5XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY0OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOThdfX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTY4XX19fX19fX0sIDB4M0I6IHtjOiBbODU5Nl19LCAweDc3OiB7bDogezB4M0I6IHtjOiBbODYyMV19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2MF19fX19fX19LCAweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjNdfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI5M119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk4MjldfSwgMHg3NToge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5ODI5XX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgyMzBdfX19fX19fX19LCAweDcyOiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg4OV19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTAxXX19fX19LCAweDZCOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTA1MzNdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTM0XX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3MDNdfX19fX19fSwgMHg2RDoge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NjNdfX19fX19fX19LCAweDZGOiB7bDogezB4NkI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE3XX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE4XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1M119fX19fSwgMHg3Mjoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMTNdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk3XX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODQ2M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyOTVdfX19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHg2Mjoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzgyNTldfX19fX19fX19LCAweDcwOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODIwOF19fX19fX19fX19fX19LFxyXG4gICAgMHg0OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDVdfX0sIGM6IFsyMDVdfX19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjA2XX19LCBjOiBbMjA2XX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0OF19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszMDRdfX19fX19fSwgMHg0NToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQ1XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjVdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIwNF19fSwgYzogWzIwNF19fX19fX19fX0sIDB4NEE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMDZdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjk4XX19fX19LCAweDY3OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDQ5OiB7bDogezB4M0I6IHtjOiBbODUyMF19fX19fX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4NDY1XX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NThdfX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc0OF19LCAweDY1OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzQ3XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg5OF19fX19fX19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mzoge2w6IHsweDZGOiB7bDogezB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODI5MV19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODI5MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEY6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyNV19fX19fX19LCAweDZGOiB7bDogezB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzAyXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyOF19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTIxXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ2NF19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyOTZdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDMwXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIwN119fSwgYzogWzIwN119fX19fX19LFxyXG4gICAgMHg2OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzddfX0sIGM6IFsyMzddfX19fX19fX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbODI5MV19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIzOF19fSwgYzogWzIzOF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODBdfX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3N119fX19fSwgMHg3ODoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxNjFdfX0sIGM6IFsxNjFdfX19fX19fSwgMHg2Njoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODY2MF19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDJdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIzNl19fSwgYzogWzIzNl19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs4NTIwXX0sIDB4Njk6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2NF19fX19fX19LCAweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzQ5XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Njoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDcxNl19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODQ4OV19fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMDddfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjk5XX19fX19LCAweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDY1XX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NjRdfX19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQ2NV19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbMzA1XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg4ODddfX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbNDM3XX19fX19fX19fSwgMHg2RToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ1M119fX19fX19fX0sIDB4M0I6IHtjOiBbODcxMl19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg3MzRdfSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDcxN119fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzA1XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4OTBdfX19fX19fSwgMHgzQjoge2M6IFs4NzQ3XX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0ODRdfX19fX19fX19LCAweDcyOiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg5MF19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA3NzVdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxMl19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDVdfX19fX0sIDB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzAzXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1NF19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUzXX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxMl19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE5MV19fSwgYzogWzE5MV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk4XX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzEyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk0OV19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODk1M119fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTQ4XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4OTQ3XX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODcxMl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4MjkwXX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyOTddfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTEwXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIzOV19fSwgYzogWzIzOV19fX19fX19LFxyXG4gICAgMHg0QToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzA4XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQ5XX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzddfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTI5XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTczXX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzMl19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZCOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjhdfX19fX19fX19fX0sXHJcbiAgICAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMDldfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODFdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwM119fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzU2N119fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU1XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk5XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExMl19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZCOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDhdfX19fX19fX19fX0sXHJcbiAgICAweDRCOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MjJdfX19fX19fX19LCAweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszMTBdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1MF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc4XX19fX19LCAweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjFdfX19fX19fSwgMHg0QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM2XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTMwXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc0XX19fX19fX19fSxcclxuICAgIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1NF19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTAwOF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzExXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODJdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzEyXX19fX19fX19fX19LCAweDY4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOTNdfX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE2XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU2XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDAwXX19fX19fX19fSxcclxuICAgIDB4NkM6IHtsOiB7MHg0MToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjZdfX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1Nl19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTIzXX19fX19fX19fX19LCAweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszMTRdfX19fX19fX19LCAweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjc2XX19fX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NDY2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYyOiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1NV19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzEwMjE2XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY0MV19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwMjE2XX19fX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwODg1XX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFsxNzFdfX0sIGM6IFsxNzFdfX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODY3Nl19LCAweDY2OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDUyN119fX19fX19LCAweDNCOiB7YzogWzg1OTJdfSwgMHg2Njoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA1MjVdfX19fX0sIDB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg2MTddfX19fX0sIDB4NkM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2MTldfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTUzXX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNjExXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTBdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1MjFdfX19fX19fSwgMHgzQjoge2M6IFsxMDkyM119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA5MjVdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTI1LCA2NTAyNF19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwOF19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDk4XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMjNdfX19LCAweDZCOiB7bDogezB4M0I6IHtjOiBbOTFdfX19fX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2MzVdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjM5XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNjM3XX19fX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxMF19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMxOF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszMTZdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk2OF19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMjNdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDgzXX19fX19LCAweDY0OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTUwXX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMjBdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjJdfX19fX19fX19LCAweDcyOiB7bDogezB4NjQ6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5OV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTcxXX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjZdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDRdfSwgMHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTJdfSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTBdfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODYzN119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2MzZdfX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDddfX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5Nl19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODY0Nl19fX19fX19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcwOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjUxXX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYyMV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwN119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMl19fX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA0XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA2XX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NzddfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDkyMF19fX19fSwgMHgzQjoge2M6IFsxMDg3N119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc5XX0sIDB4NkY6IHtsOiB7MHgzQjoge2M6IFsxMDg4MV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4ODNdfX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFs4OTIyLCA2NTAyNF19LCAweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg5OV19fX19fX19LCAweDczOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA4ODVdfX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTE4XX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDY3OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MjJdfX19fX19fSwgMHg3MToge2w6IHsweDY3OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODkxXX19fX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODgyMl19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MThdfX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzg4MDZdfSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzEwODkxXX19fX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDYyMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTcwXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNV19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg4MjJdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODk3XX19fX19LCAweDQ4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NjM3XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzg2MzZdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNjAyXX19fX19fX19fSwgMHg2Mjoge2w6IHsweDZDOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5NjA0XX19fX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTEzXX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQ3XX19fX19fX0sIDB4M0I6IHtjOiBbODgxMF19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5OTBdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjAzXX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzIyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzIwXX19fX19fX19fSwgMHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTEzNl19fX19fX19fX0sIDB4M0I6IHtjOiBbOTEzNl19fX19fX19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDg4OV19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA4ODldfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwODg3XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDg4N119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwOF19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOF19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzNF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIyMF19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODcwMV19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMjE0XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjI5XX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTAyMzZdfX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMwXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MTldfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjIwXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MjldfX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTddfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk3XX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDRdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzI3XX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTVdfX19fX19fX19LCAweDdBOiB7bDogezB4M0I6IHtjOiBbOTY3NF19LCAweDY1OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY3NF19fX19fX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMDczMV19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzQwXX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjQzXX19fX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0Nl19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5OTFdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUxXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwNV19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4MjA2XX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4ODk1XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYxOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODI0OV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwMV19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjRdfX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODE4XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg5M119fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDg5NV19fX19fX19LCAweDcxOiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs5MV19fX0sIDB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMTZdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMThdfX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMzIyXX19fX19fX19fX19LCAweDc0OiB7bDogezB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwOTE4XX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NzNdfX19fX19fSwgMHgzQjoge2M6IFs2MF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MThdfX19fX19fSwgMHg2ODoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MDddfX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwNV19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYxNF19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc1XX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjY3XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg0XX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NjZdfX19fX0sIDB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2NDZdfX19fX19fX19fSwgYzogWzYwXX0sIDB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3MF19fX19fX19fX19fSwgMHg3NToge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk4XX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MDgsIDY1MDI0XX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOCwgNjUwMjRdfX19fX19fX19LFxyXG4gICAgMHg0Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszMTNdfX19fX19fX19LCAweDZEOiB7bDogezB4NjI6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTIzXX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMThdfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NjZdfX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDZdfX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzE3XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMxNV19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDUxXX19fX19LCAweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMjE2XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY3Nl19fX19fX19LCAweDNCOiB7YzogWzg1OTJdfSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NDZdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1Nl19fX19fX19fX19fSwgMHg0Mzoge2w6IHsweDY1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg5NjhdfX19fX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTAyMTRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkzXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODVdfX19fX19fSwgMHgzQjoge2M6IFs4NjQzXX19fX19fX19fX19fX19fX19fX19fSwgMHg0Njoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk3MF19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTZdfX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYwXX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxMl19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODY3XX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODZdfX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDcwM119fX19fX19LCAweDNCOiB7YzogWzg4ODJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg4NF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzddfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkyXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODRdfX19fX19fSwgMHgzQjoge2M6IFs4NjM5XX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTc4XX19fX19fX0sIDB4M0I6IHtjOiBbODYzNl19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDczOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODkyMl19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MDZdfX19fX19fX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MjJdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MTNdfX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4NzddfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODE4XX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzldfX19fX0sIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzM119fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMF19LCAweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjY2XX19fX19fX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzMxOV19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIyOV19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMyXX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMF19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzM119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMzFdfX19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMV19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDY2XX19fX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODYyNF19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszMjFdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHgzQjoge2M6IFs2MF19fSwgYzogWzYwXX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODEwXX19fX19LFxyXG4gICAgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzE3NV19fSwgYzogWzE3NV19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3OTRdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTAwMTZdfSwgMHg2NToge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDAxNl19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg2MTRdfSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NjE0XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NjE1XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MTJdfX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjEzXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NjQ2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDc5M119fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg0XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODIxMl19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzYyXX19fX19fX19fSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzM3XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNl19fX19fSwgMHg2ODoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODQ4N119fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzE4MV19fSwgYzogWzE4MV19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzQyXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5OTJdfX19fX19fSwgMHgzQjoge2M6IFs4NzM5XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTgzXX19LCBjOiBbMTgzXX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODYzXX19fSwgMHgzQjoge2M6IFs4NzIyXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzYwXX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFsxMDc5NF19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTcxXX19fX19LCAweDY0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjMwXX19fX19fX0sIDB4NkU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NzFdfX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNThdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwMl19fX19fSwgMHg3NDoge2w6IHsweDcwOiB7bDogezB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NjZdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5NTZdfSwgMHg2Qzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODg4XX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg4OF19fX19fX19fX19fSxcclxuICAgIDB4NEQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA1MDFdfX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNTJdfX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjg3XX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDk5XX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODBdfX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg1MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTMyXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5OV19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTI0XX19fX19LFxyXG4gICAgMHg2RToge2w6IHsweDYxOiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODcxMV19fX19fX19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzI0XX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODczNiwgODQwMl19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3NzddfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODY0LCA4MjRdfX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4Nzc5LCA4MjRdfX19fX0sIDB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzMyOV19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzg3NzddfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk4MzhdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NjldfX19fX19fSwgMHgzQjoge2M6IFs5ODM4XX19fX19fX19fSwgMHg2Mjoge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxNjBdfX0sIGM6IFsxNjBdfX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODIsIDgyNF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4MywgODI0XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODE5XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszMjhdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzI2XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4Nzc1XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NjEsIDgyNF19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgxOF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODVdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4MjExXX19fX19fX19fSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA1MzJdfX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk5XX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTldfX19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2M119fX19fX19LCAweDNCOiB7YzogWzg4MDBdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg0LCA4MjRdfX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzg4MDJdfX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MzZdfX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc3MCwgODI0XX19fX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA4XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzA4XX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwN119fX19fSwgMHg2Nzoge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwNywgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MTddfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MTddfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDcsIDgyNF19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgyMV19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxNV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODgxNV19fX19fX19LCAweDQ3OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4OTIxLCA4MjRdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxMSwgODQwMl19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODgxMSwgODI0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjIyXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1NF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTk0XX19fX19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzg3MTVdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg5NTZdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzg5NTRdfX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4NzE1XX19fX19LCAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTRdfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDJdfX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUzXX19fX19fX0sIDB4NjQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjldfX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA2LCA4MjRdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODgxNl19LCAweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MjJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MTZdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDYsIDgyNF19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTRdfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODIwXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODE0XX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzg5MzhdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg5NDBdfX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1M119fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTRdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMCwgODI0XX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4MTAsIDg0MDJdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg4MTAsIDgyNF19fX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3NDBdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTldfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNzJdfSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcxM119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDksIDgyNF19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODk1MywgODI0XX19fSwgMHg3Njoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODcxM119fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFs4OTUxXX19fSwgMHg2Mzoge2w6IHsweDNCOiB7YzogWzg5NTBdfX19fX19fX19LCAweDZFOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4NzE2XX0sIDB4NzY6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzg3MTZdfX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODk1OF19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTU3XX19fX19fX19fX0sIGM6IFsxNzJdfX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzQyXX19fX19fX19fX19LCAweDNCOiB7YzogWzg3NDJdfSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTEwMDUsIDg0MjFdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA2LCA4MjRdfX19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzJdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODMyXX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkyOF19fX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4ODMyXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTI3LCA4MjRdfX19fX19fSwgMHgzQjoge2M6IFsxMDkyNywgODI0XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwNTQ3LCA4MjRdfX19LCAweDNCOiB7YzogWzg2MDNdfSwgMHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDUsIDgyNF19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1NV19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDNdfX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4OTM5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTQxXX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1NV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4MzNdfSwgMHg2Mzoge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTI5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDkyOCwgODI0XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwM119fX19fSwgMHg2ODoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3NDBdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzcyXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzcyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzQwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19LCAweDcxOiB7bDogezB4NzM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTMwXX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTMxXX19fX19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODM2XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk0OSwgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDBdfX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzQsIDg0MDJdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NDksIDgyNF19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4MzNdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjgsIDgyNF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODM3XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1MCwgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDFdfX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzUsIDg0MDJdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTAsIDgyNF19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MjVdfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDFdfX0sIGM6IFsyNDFdfX19fX19fSwgMHg2Qzoge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODgyNF19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODkzOF19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4OTQwXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MzldfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODk0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTU3XX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFszNV19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg0NzBdfX19fX19fSwgMHg3Mzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODE5OV19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MSwgODQwMl19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzZdfX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3N119fX19fX19fX0sIDB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MDUsIDg0MDJdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjIsIDg0MDJdfX19fX0sIDB4NDg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwMF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY2OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzEwNzE4XX19fX19fX19fX19LCAweDZDOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA0OThdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDQsIDg0MDJdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjAsIDg0MDJdfSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg0LCA4NDAyXX19fX19fX19fX19LCAweDcyOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA0OTldfX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4ODUsIDg0MDJdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NCwgODQwMl19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzhdfX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3OV19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA1MzFdfX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk4XX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OThdfX19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2Ml19fX19fX19LCAweDZFOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MzVdfX19fX19fX19fX19fSxcclxuICAgIDB4NEU6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzIzXX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszMjddfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzI1XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNTNdfX19fX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHg0RDoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODIwM119fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDU0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTBdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDRDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTBdfX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgxXX19fX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzRdfX19fX19fSwgMHg2Rjoge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4Mjg4XX19fX19fX19fX19LCAweDZFOiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2Qjoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxNjBdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NjldfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk4OF19LCAweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MDJdfX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDQzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4MTNdfX19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTNdfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MDBdfSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3MCwgODI0XX19fX19fX19fX19fX19fX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MDhdfX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTVdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgxN119fX19fX19fX19fSwgMHg0Njoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODA3LCA4MjRdfX19fX19fX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTEsIDgyNF19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODI1XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODIxXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDg6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQ4OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MiwgODI0XX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzgzLCA4MjRdfX19fX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDU0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDcwMywgODI0XX19fX19fX0sIDB4M0I6IHtjOiBbODkzOF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTQwXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTRdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgxNl19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MjRdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgxMCwgODI0XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODIwXX19fX19fX19fX19fX19fX19fX0sIDB4NEU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTE0LCA4MjRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTEzLCA4MjRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MzJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MjcsIDgyNF19fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjhdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDQ1OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcxNl19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg1NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3MDQsIDgyNF19fX19fX19LCAweDNCOiB7YzogWzg5MzldfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUzOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDUzOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDcsIDgyNF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTMwXX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0OCwgODI0XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgzNCwgODQwMl19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODQwXX19fX19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgzM119LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDkyOCwgODI0XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODkyOV19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MzEsIDgyNF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1LCA4NDAyXX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4NDFdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY5XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzJdfX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc3NV19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc3XX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc3XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIwOV19fSwgYzogWzIwOV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5MjVdfX19fX0sXHJcbiAgICAweDRGOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxMV19fSwgYzogWzIxMV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMTJdfX0sIGM6IFsyMTJdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU0XX19fX19LCAweDY0OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMzZdfX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMzhdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODJdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxMF19fSwgYzogWzIxMF19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszMzJdfX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MzddfX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTI3XX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTM0XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NDM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjIwXX19fX19fX19fX19fX19fX19fX19fX19LCAweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjE2XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODM2XX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NzhdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFsyMTZdfX0sIGM6IFsyMTZdfX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTNdfX0sIGM6IFsyMTNdfX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDddfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjE0XX19LCBjOiBbMjE0XX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyNTRdfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5MTgyXX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5MTQwXX19fX19fX19fX19fX19fSwgMHg1MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbOTE4MF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg2Rjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDNdfX0sIGM6IFsyNDNdfX19fX19fSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg1OV19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjQ0XX19LCBjOiBbMjQ0XX0sIDB4M0I6IHtjOiBbODg1OF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODZdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODYxXX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMzddfX19fX19fX19LCAweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDgwOF19fX19fSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg1N119fX19fSwgMHg3Mzoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjg0XX19fX19fX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzM5XX19fX19fX19fSwgMHg2Njoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjg3XX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDhdfX19fX0sIDB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbNzMxXX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQyXX19LCBjOiBbMjQyXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY4OV19fX19fSwgMHg2ODoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjc3XX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs5MzddfX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1MF19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYzNF19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjg2XX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA2ODNdfX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI1NF19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA2ODhdfX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszMzNdfX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NjldfX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTU5XX19fX19fX19fSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjc4XX19fSwgMHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODU0XX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2MF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjc5XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNjgxXX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1M119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjM1XX19fX19fX0sIDB4M0I6IHtjOiBbODc0NF19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4NDVdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODUwMF19LCAweDZGOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NTAwXX19fX19fX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzE3MF19fSwgYzogWzE3MF19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbMTg2XX19LCBjOiBbMTg2XX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg4ODZdfX19fX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDgzOF19fX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4MzldfX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDg0M119fX19fSwgMHg1Mzoge2w6IHsweDNCOiB7YzogWzk0MTZdfX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1MDBdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFsyNDhdfX0sIGM6IFsyNDhdfX19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg1Nl19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDVdfX0sIGM6IFsyNDVdfX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA2XX19fX19LCAweDNCOiB7YzogWzg4NTVdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjQ2XX19LCBjOiBbMjQ2XX19fX19LCAweDc2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTAyMV19fX19fX19fX19fSxcclxuICAgIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxODJdfSwgMHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NDFdfX19fX19fX19fSwgYzogWzE4Ml19LCAweDNCOiB7YzogWzg3NDFdfSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDk5NV19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzExMDA1XX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODcwNl19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg3XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszN119fX19fX19LCAweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzQ2XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODI0MF19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODg2OV19fX0sIDB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4MjQxXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwOV19fX19fSwgMHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY2XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX0sIDB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDk5XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NzQyXX19fX19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzk2MF19LCAweDc0OiB7bDogezB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDY2OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODkxNl19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5ODJdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg0NjNdfSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg0NjJdfX19fX19fSwgMHg2Qjoge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbODQ2M119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3ODddfX19fX19fX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODg2Ml19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3ODZdfX19fX19fSwgMHgzQjoge2M6IFs0M119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzI0XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNzg5XX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4NjZdfX19LCAweDZEOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxNzddfX0sIGM6IFsxNzddfX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNzkwXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Nzoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTA3OTFdfX19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzE3N119fX0sIDB4NkY6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc3M119fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjFdfX19fX0sIDB4NzU6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTYzXX19LCBjOiBbMTYzXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5MzVdfX19fX0sIDB4M0I6IHtjOiBbODgyNl19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MjhdfX19fX19fSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzVdfX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODI2XX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODI4XX19fX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjddfX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDkzN119fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTMzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzNl19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgzMF19fX19fX19fX0sIDB4M0I6IHtjOiBbMTA5MjddfX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MzFdfX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDJdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzNdfX19fX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTM3XX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MzNdfX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg5MzZdfX19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzE5XX19fSwgMHg2Njoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTAwNl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTc4XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg5NzldfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX0sIDB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg3MzNdfX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzBdfX19fX19fSwgMHg3NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4ODBdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDA1XX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTY4XX19fX19LCAweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2Mzoge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjAwXX19fX19fX19fX19fX0sXHJcbiAgICAweDUwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDQ6IHtsOiB7MHgzQjoge2M6IFs4NzA2XX19fX19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1NV19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgzXX19fX19LCAweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzRdfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MjhdfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDREOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxNzddfX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ2MF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ3M119fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5MzldfSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODI2XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTI3XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgyOF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MzBdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0M119fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg3NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzE5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19LCAweDNCOiB7YzogWzg3NTldfX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NzldfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzZdfX19fX19fSxcclxuICAgIDB4NTE6IHtsOiB7MHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg0XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NzRdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODBdfX19fX19fSwgMHg1NToge2w6IHsweDRGOiB7bDogezB4NTQ6IHtsOiB7MHgzQjoge2M6IFszNF19fSwgYzogWzM0XX19fX19fX0sXHJcbiAgICAweDcxOiB7bDogezB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExMF19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2NF19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2Ml19fX19fX19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjc5XX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwNl19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ2MV19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzRdfX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbNjNdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc5OV19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzRdfX0sIGM6IFszNF19fX19fX19LFxyXG4gICAgMHg3Mjoge2w6IHsweDQxOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2N119fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1MjRdfX19fX19fX19fX0sIDB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc2NSwgODE3XX19fSwgMHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDFdfX19fX19fX19LCAweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg3MzBdfX19fX19fSwgMHg2NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3NV19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIxN119LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NDJdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjFdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDIxN119fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTg3XX19LCBjOiBbMTg3XX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA2MTNdfX19fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFs4Njc3XX0sIDB4NjY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNTI4XX19fX19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDU0N119fX0sIDB4M0I6IHtjOiBbODU5NF19LCAweDY2OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDUyNl19fX19fSwgMHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODYxOF19fX19fSwgMHg2Qzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODYyMF19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1NjVdfX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA2MTJdfX19fX19fSwgMHg3NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODYxMV19fX19fSwgMHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDVdfX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTIyXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg3NThdfSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzRdfX19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwOV19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDk5XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMjVdfX19LCAweDZCOiB7bDogezB4M0I6IHtjOiBbOTNdfX19fX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2MzZdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjM4XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNjQwXX19fX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxMV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM0NV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNDNdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk2OV19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMjVdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg4XX19fX19LCAweDY0OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTUxXX19fX19LCAweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwMV19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjIxXX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjIxXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODYyN119fX19fX19LCAweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg0NzZdfSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDc1XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDc2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzddfX19fX19fSwgMHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTY0NV19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzE3NF19fSwgYzogWzE3NF19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIxXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5NzFdfX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTExXX19fX19LCAweDQ4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk2XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NjQxXX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzg2NDBdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNjA0XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDNCOiB7YzogWzk2MV19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTAwOV19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTRdfSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTFdfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODY0MV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2NDBdfX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDRdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODY1Ml19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjQ5XX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwNV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTA4XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNzMwXX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4N119fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NDRdfX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUyXX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4MjA3XX19fX19LCAweDZEOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzkxMzddfX19fX19fX19LCAweDNCOiB7YzogWzkxMzddfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDk5MF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIyMV19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODcwMl19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMjE1XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MzBdfX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjNdfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDVdfX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs0MV19LCAweDY3OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY0NF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzBdfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0OV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyNTBdfX19fX19fX19LCAweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDddfX19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NjI1XX19fSwgMHg3MToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbOTNdfX19LCAweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjE3XX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjE3XX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA4XX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg5MDZdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjU3XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg1XX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NTZdfX19LCAweDZDOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbMTA3MDJdfX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjAwXX19fX19fX19fX19fX0sIDB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4NDc4XX19fX19LFxyXG4gICAgMHg1Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDBdfX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIxOV19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYwOF19LCAweDc0OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDUxOF19fX19fX19fX19fSwgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTEyXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzQ0XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM0Ml19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU2XX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODQ3Nl19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg0NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTVdfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg2NTFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwN119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg0Nzoge2w6IHsweDNCOiB7YzogWzE3NF19fSwgYzogWzE3NF19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NzZdfX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzkyOV19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMjE3XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY3N119fX19fX19LCAweDNCOiB7YzogWzg1OTRdfSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjQ0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19fX19fX19LCAweDQzOiB7bDogezB4NjU6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODk2OV19fX19fX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDIxNV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODldfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4MV19fX19fX19LCAweDNCOiB7YzogWzg2NDJdfX19fX19fX19fX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTcxXX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE0XX19fX19fX19fX19LCAweDNCOiB7YzogWzg4NjZdfSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4N119fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNzA0XX19fX19fX0sIDB4M0I6IHtjOiBbODg4M119LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODg1XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NToge2w6IHsweDcwOiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3NV19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODhdfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4MF19fX19fX19LCAweDNCOiB7YzogWzg2MzhdfX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzldfX19fX19fSwgMHgzQjoge2M6IFs4NjQwXX19fX19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDc3XX19fX19LCAweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDQ5OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA2MDhdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjY3XX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDc1XX19fX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODYyNV19fX19fSwgMHg3NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0NDoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDc5OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNzQwXX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg1Mzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDZdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1Ml19fX19fX19fX0sIDB4M0I6IHtjOiBbMTA5NDBdfSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM1MF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzQ4XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU3XX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODZdfX19fX0sIDB4NDg6IHtsOiB7MHg0Mzoge2w6IHsweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjVdfX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk1XX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5Ml19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5NF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTMxXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDQzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3MjhdfX19fX19fX19fX19fX19fX19fX19LCAweDRGOiB7bDogezB4NDY6IHtsOiB7MHg1NDoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY4XX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzOF19fX19fX19LCAweDcxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MzBdfX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjMzXX0sIDB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg1MV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUzOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDddfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg0OV19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDhdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg1MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4NTJdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4Ml19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MDJdfX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODkxMl19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgzOF19fX19fX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MjddfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MjhdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODI5XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODgzMV19fX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg1NDoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTVdfX19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzg3MjFdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODkxM119LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MzldfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTNdfX19fX19fX19fX19fSxcclxuICAgIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzQ3XX19fX19fX19fX19LCAweDYyOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIxOF19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5MzZdfX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1M119fX19fX19fX0sIDB4M0I6IHtjOiBbODgyN119LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MjldfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTI4XX0sIDB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzUxXX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTMyXX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNDldfX19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDkzOF19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTM0XX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTM3XX19fX19fX19fSwgMHg3MDoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc3MV19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzFdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODY1XX19fSwgMHgzQjoge2M6IFs4OTAxXX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg1NF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTMzXX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODYwMF19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjAwXX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjRdfX19fX19fSwgMHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTY3XX19LCBjOiBbMTY3XX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbNTldfX19fX0sIDB4NzM6IHtsOiB7MHg3Nzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUzN119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODcyNl19fX19fX19fX0sIDB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX0sIDB4Nzg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMDM4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExMl19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5OTRdfX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs5ODM5XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk3XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk2XX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3MzldfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0MV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzE3M119fSwgYzogWzE3M119fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NjNdfSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2Ml19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5NjJdfX19fX19fX19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODU4XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzcxXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzcxXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbMTA5MTBdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTEyXX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MDldfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTExXX19fX19LCAweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc0XX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA3ODhdfX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTBdfX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1OTJdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjZdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODAzXX19fX19fX19fSwgMHg2NToge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDcyNF19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzM5XX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODk5NV19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5MjJdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTI0XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDkyNCwgNjUwMjRdfX19fX19fX19LCAweDZGOiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAwXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwMjNdfX19fX0sIDB4M0I6IHtjOiBbMTA2OTJdfX19LCAweDNCOiB7YzogWzQ3XX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY0XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk4MjRdfSwgMHg3NToge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5ODI0XX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NzQxXX19fX19fX0sIDB4NzE6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODUxXX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODUxLCA2NTAyNF19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODUyXX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODUyLCA2NTAyNF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg0N119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0OV19fX0sIDB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0N119LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODQ5XX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODQ4XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODUwXX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ4XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NTBdfX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjMzXX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NDJdfX19fX19fSwgMHgzQjoge2M6IFs5NjMzXX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjQyXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk0XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDhdfX19fX0sIDB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5OTVdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODkwMl19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NzM0XX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NzMzXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDEzXX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzE3NV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4MzRdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0MV19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NDldfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODgzOF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQ3XX19fX19fX19fSwgMHg2RDoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQ1XX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NTVdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0Ml19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTQzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjE3XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM0XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MzhdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTQ5XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0Ml19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTVdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA5NTFdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY1XX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTYzXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzZdfX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODI3XX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODI5XX19fX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjhdfX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDkzOF19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTM0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzN119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgzMV19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzg3MjFdfX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs5ODM0XX19fX19LCAweDcwOiB7bDogezB4MzE6IHtsOiB7MHgzQjoge2M6IFsxODVdfX0sIGM6IFsxODVdfSwgMHgzMjoge2w6IHsweDNCOiB7YzogWzE3OF19fSwgYzogWzE3OF19LCAweDMzOiB7bDogezB4M0I6IHtjOiBbMTc5XX19LCBjOiBbMTc5XX0sIDB4M0I6IHtjOiBbODgzNV19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQyXX19fX19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY4XX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTUwXX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MzldfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0OF19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg3Mzoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDE4NV19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NjddfX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTldfX19fX19fX19LCAweDZEOiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5NDZdfX19fX19fX19LCAweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1Nl19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQzXX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5NDRdfX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzVdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgzOV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTBdfX19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODQzXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk1Nl19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDk1Ml19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NjRdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5NjZdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTM0XX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODYwMV19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjAxXX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjVdfX19fX19fSwgMHg2RToge2w6IHsweDc3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTM4XX19fX19fX19fX19LCAweDdBOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMjIzXX19LCBjOiBbMjIzXX19fX19fX19fSxcclxuICAgIDB4NTQ6IHtsOiB7MHg2MToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbOV19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5MzJdfX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1Nl19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNTRdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1OF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg3XX19fX19LCAweDY4OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzU2XX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkyMF19fX19fX19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjg3LCA4MjAyXX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAxXX19fX19fX19fX19fX19fX19LCAweDQ4OiB7bDogezB4NEY6IHtsOiB7MHg1Mjoge2w6IHsweDRFOiB7bDogezB4M0I6IHtjOiBbMjIyXX19LCBjOiBbMjIyXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY0XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzFdfX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc3M119fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTM5XX19fX19fX0sIDB4NTI6IHtsOiB7MHg0MToge2w6IHsweDQ0OiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFs4NDgyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQxMV19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODNdfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszNThdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2Ml19fX19fSwgMHg0ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM1XX19fX19fX19fX19LFxyXG4gICAgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTgyXX19fX19fX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzk2NF19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5MTQwXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1N119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNTVdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5MF19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDExXX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5ODFdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExM119fX19fSwgMHg2ODoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDM0OiB7bDogezB4M0I6IHtjOiBbODc1Nl19fX0sIDB4NjY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzU2XX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1Ml19LCAweDczOiB7bDogezB4Nzk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzk3N119fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTc3XX19fX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NF19fX19fX19fX19fSwgMHg2RToge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjAxXX19fX19fX19fSwgMHg2Qjoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NjRdfX19fX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI1NF19fSwgYzogWzI1NF19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNzMyXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4MDFdfX19fX0sIDB4M0I6IHtjOiBbODg2NF19fX0sIDB4M0I6IHtjOiBbMjE1XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgwMF19fX19LCBjOiBbMjE1XX19fX19LCAweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzQ5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA1MzZdfX19fX0sIDB4NzA6IHtsOiB7MHg2Mjoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5MDE0XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5OTNdfX19fX19fSwgMHgzQjoge2M6IFs4ODY4XX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjVdfSwgMHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDk3MF19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA1MzddfX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0ODJdfX19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjUzXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYzXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NjddfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg4NF19fX19fX19fX19fX19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc5Nl19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NTddfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg4NV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk3MDhdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3OTZdfX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgxMF19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA3MDFdfX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDgxMV19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4N0E6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs5MTg2XX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDldfX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5NF19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE1XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszNTldfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2OToge2w6IHsweDc4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODEyXX19fX19fX0sIDB4NkY6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2NDoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDZdfX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDhdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDU1OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxOF19fSwgYzogWzIxOF19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjA3XX0sIDB4NkY6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU2OV19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM4XX19fX19LCAweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzM2NF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIxOV19fSwgYzogWzIxOV19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNTldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM2OF19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg4XX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTddfX0sIGM6IFsyMTddfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMzYyXX19fX19fX19fSwgMHg2RToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzk1XX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTE4M119fX0sIDB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTE0MV19fX19fX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzkxODFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg5OV19LCAweDUwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg0Nl19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM3MF19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDBdfX19fX19fSwgMHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxNF19fX19fX19LCAweDNCOiB7YzogWzg1OTNdfSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjQ1XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU3XX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTddfX19fX19fX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYxXX19fX19fX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNjA2XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OThdfX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTldfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzhdfSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5MzNdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MTNdfX19fX19fX19fX0sIDB4M0I6IHtjOiBbODg2OV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszNjZdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4NF19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNjBdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjIwXX19LCBjOiBbMjIwXX19fX19fX0sXHJcbiAgICAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI1MF19fSwgYzogWzI1MF19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1N119fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExOF19fX19fSwgMHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNjVdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyNTFdfX0sIGM6IFsyNTFdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDkxXX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0NV19fX19fX19LCAweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzY5XX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwNl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExNF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQ5XX19LCBjOiBbMjQ5XX19fX19fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5NV19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODYzOV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjM4XX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTYwMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5ODhdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk4OF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTc1XX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzIwXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzM2M119fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTY4XX19LCBjOiBbMTY4XX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM3MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjZdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTddfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzOV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzhdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODQ2XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NV19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbOTc4XX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjVdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDhdfX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk4OV19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTg5XX19fX19fX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg5NzRdfX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzM2N119fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk3MjFdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxMF19fX19fX19LCAweDc0OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk0NF19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzYxXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY1M119LCAweDY2OiB7bDogezB4M0I6IHtjOiBbOTY1Ml19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQ4XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzI1Ml19fSwgYzogWzI1Ml19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2M119fX19fX19fX19fX19fX0sXHJcbiAgICAweDc2OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjUyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTAxM119fX19fX19fX19fX19fX0sIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwMDhdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODJdfX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk3XX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzEwMDldfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTYyXX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MiwgNjUwMjRdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTU1LCA2NTAyNF19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDMsIDY1MDI0XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk1NiwgNjUwMjRdfX19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NzddfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODgyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg4M119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjFdfX19fX19fSwgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDk4NF19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTA5ODVdfX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc0XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg2Nl19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODcyXX19fX19fX19fSwgMHg2NToge2w6IHsweDY1OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODg5MV19fX19fX19LCAweDNCOiB7YzogWzg3NDRdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc5NF19fX19fX19LCAweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk0Ml19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjRdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzEyNF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTVdfX19fX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4ODgyXX19fX19fX19fSwgMHg2RToge2w6IHsweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4MzQsIDg0MDJdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODgzNSwgODQwMl19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY3XX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzg4ODNdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxMV19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzEwOTU1LCA2NTAyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQyLCA2NTAyNF19fX19fX19LCAweDcwOiB7bDogezB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzEwOTU2LCA2NTAyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQzLCA2NTAyNF19fX19fX19fX19fSwgMHg3QToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg3QToge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDY1MF19fX19fX19fX19fX19fX0sXHJcbiAgICAweDU2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5ODddfX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0Ml19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzNdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTgyXX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3NV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTddfX19LCAweDcyOiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODIxNF19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODIxNF19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODczOV19fX19fX19LCAweDRDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTI0XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDA3Ml19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY4XX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDU0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg5XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0MV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4NV19fX19fX19LCAweDc2OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODc0XX19fX19fX19fX19fX0sXHJcbiAgICAweDU3OiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNzJdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5Nl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5MF19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDJdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODZdfX19fX19fX19LFxyXG4gICAgMHg3Nzoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzczXX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NDddfX19fX19fSwgMHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc0M119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc5M119fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NDcyXX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTZdfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY4XX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NDcyXX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NjhdfSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg3NjhdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDEyXX19fX19fX19fSxcclxuICAgIDB4Nzg6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODk4XX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzk3MTFdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg5OV19fX19fX19LCAweDY0OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY2MV19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExN119fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMxXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTU4XX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjI5XX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzJdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwMjM2XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODk1NV19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NTJdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY5XX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDc1NF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMwXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzNdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxM119fX19fSwgMHg3MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNzU4XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1Nl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY1MV19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5N119fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODk2XX19fX19fX19fX19fX0sXHJcbiAgICAweDU4OiB7bDogezB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5MV19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzkyNl19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg3XX19fX19fX19fSxcclxuICAgIDB4NTk6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjIxXX19LCBjOiBbMjIxXX19fX19fX19fSwgMHg0MToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDcxXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNzRdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNjddfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5Ml19fX19fSwgMHg0OToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDMxXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQ0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg4XX19fX19fX0sIDB4NTU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3MF19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM3Nl19fX19fX19fX0sXHJcbiAgICAweDc5OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI1M119fSwgYzogWzI1M119fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzExMDNdfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM3NV19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5OV19fX19fSwgMHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTY1XX19LCBjOiBbMTY1XX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTE4XX19fX19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTFdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNzBdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTRdfX19fX19fSwgMHg3NToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAyXX19fX19LCAweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyNTVdfX0sIGM6IFsyNTVdfX19fX19fSxcclxuICAgIDB4NUE6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzc3XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszODFdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0N119fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszNzldfX19fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg1Nzoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTE4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0ODhdfX19fX0sIDB4NDg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0Nl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0ODRdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODldfX19fX19fX19LFxyXG4gICAgMHg3QToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNzhdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM4Ml19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc5XX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzM4MF19fX19fX19LCAweDY1OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDg4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUwXX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExOV19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc4XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2OV19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE3MV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxNV19fX19fX19LCAweDc3OiB7bDogezB4NkE6IHtsOiB7MHgzQjoge2M6IFs4MjA1XX19fSwgMHg2RToge2w6IHsweDZBOiB7bDogezB4M0I6IHtjOiBbODIwNF19fX19fX19fX1cclxufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IFVOSUNPREUuQ09ERV9QT0lOVFM7XG5cbi8vVXRpbHNcblxuLy9PUFRJTUlaQVRJT046IHRoZXNlIHV0aWxpdHkgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgbW92ZWQgb3V0IG9mIHRoaXMgbW9kdWxlLiBWOCBDcmFua3NoYWZ0IHdpbGwgbm90IGlubGluZVxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxuLy9BbHdheXMgcGVyZm9ybSBpbmxpbmluZyBjaGVjayBiZWZvcmUgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb25zICgnbm9kZSAtLXRyYWNlLWlubGluaW5nJykuXG5mdW5jdGlvbiBpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSB7XG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCAmJiBjcCA8PSAweERGRkYgfHwgY3AgPiAweDEwRkZGRjtcbn1cblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKGNwMSwgY3AyKSB7XG4gICAgcmV0dXJuIGNwMSA+PSAweEQ4MDAgJiYgY3AxIDw9IDB4REJGRiAmJiBjcDIgPj0gMHhEQzAwICYmIGNwMiA8PSAweERGRkY7XG59XG5cbmZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVBhaXJDb2RlUG9pbnQoY3AxLCBjcDIpIHtcbiAgICByZXR1cm4gKGNwMSAtIDB4RDgwMCkgKiAweDQwMCArIDB4MjQwMCArIGNwMjtcbn1cblxuLy9QcmVwcm9jZXNzb3Jcbi8vTk9URTogSFRNTCBpbnB1dCBwcmVwcm9jZXNzaW5nXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNwcmVwcm9jZXNzaW5nLXRoZS1pbnB1dC1zdHJlYW0pXG52YXIgUHJlcHJvY2Vzc29yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAgIHRoaXMud3JpdGUoaHRtbCk7XG5cbiAgICAvL05PVEU6IG9uZSBsZWFkaW5nIFUrRkVGRiBCWVRFIE9SREVSIE1BUksgY2hhcmFjdGVyIG11c3QgYmUgaWdub3JlZCBpZiBhbnkgYXJlIHByZXNlbnQgaW4gdGhlIGlucHV0IHN0cmVhbS5cbiAgICB0aGlzLnBvcyA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KDApID09PSAkLkJPTSA/IDAgOiAtMTtcblxuICAgIHRoaXMuZ2FwU3RhY2sgPSBbXTtcbiAgICB0aGlzLmxhc3RHYXBQb3MgPSAtMTtcbiAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgaWYgKHRoaXMuaHRtbCkge1xuICAgICAgICB0aGlzLmh0bWwgPSB0aGlzLmh0bWwuc3Vic3RyaW5nKDAsIHRoaXMucG9zICsgMSkgK1xuICAgICAgICAgICAgICAgICAgICBodG1sICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5odG1sLnN1YnN0cmluZyh0aGlzLnBvcyArIDEsIHRoaXMuaHRtbC5sZW5ndGgpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgdGhpcy5odG1sID0gaHRtbDtcblxuXG4gICAgdGhpcy5sYXN0Q2hhclBvcyA9IHRoaXMuaHRtbC5sZW5ndGggLSAxO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvcysrO1xuXG4gICAgaWYgKHRoaXMucG9zID4gdGhpcy5sYXN0Q2hhclBvcylcbiAgICAgICAgcmV0dXJuICQuRU9GO1xuXG4gICAgdmFyIGNwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuXG4gICAgLy9OT1RFOiBhbnkgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlcnMgdGhhdCBpbW1lZGlhdGVseSBmb2xsb3cgYSBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVyXG4gICAgLy9tdXN0IGJlIGlnbm9yZWQuXG4gICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lICYmIGNwID09PSAkLkxJTkVfRkVFRCkge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hZGRHYXAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZUFuZFBlZWtDb2RlUG9pbnQoKTtcbiAgICB9XG5cbiAgICAvL05PVEU6IGFsbCBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVycyBtdXN0IGJlIGNvbnZlcnRlZCB0byBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyc1xuICAgIGlmIChjcCA9PT0gJC5DQVJSSUFHRV9SRVRVUk4pIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gJC5MSU5FX0ZFRUQ7XG4gICAgfVxuXG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcblxuICAgIC8vT1BUSU1JWkFUSU9OOiBmaXJzdCBwZXJmb3JtIGNoZWNrIGlmIHRoZSBjb2RlIHBvaW50IGluIHRoZSBhbGxvd2VkIHJhbmdlIHRoYXQgY292ZXJzIG1vc3QgY29tbW9uXG4gICAgLy9IVE1MIGlucHV0IChlLmcuIEFTQ0lJIGNvZGVzKSB0byBhdm9pZCBwZXJmb3JtYW5jZS1jb3N0IG9wZXJhdGlvbnMgZm9yIGhpZ2gtcmFuZ2UgY29kZSBwb2ludHMuXG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCA/IHRoaXMuX3Byb2Nlc3NIaWdoUmFuZ2VDb2RlUG9pbnQoY3ApIDogY3A7XG59O1xuXG5QcmVwcm9jZXNzb3IucHJvdG90eXBlLl9wcm9jZXNzSGlnaFJhbmdlQ29kZVBvaW50ID0gZnVuY3Rpb24gKGNwKSB7XG4gICAgLy9OT1RFOiB0cnkgdG8gcGVlayBhIHN1cnJvZ2F0ZSBwYWlyXG4gICAgaWYgKHRoaXMucG9zICE9PSB0aGlzLmxhc3RDaGFyUG9zKSB7XG4gICAgICAgIHZhciBuZXh0Q3AgPSB0aGlzLmh0bWwuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuXG4gICAgICAgIGlmIChpc1N1cnJvZ2F0ZVBhaXIoY3AsIG5leHRDcCkpIHtcbiAgICAgICAgICAgIC8vTk9URTogd2UgaGF2ZSBhIHN1cnJvZ2F0ZSBwYWlyLiBQZWVrIHBhaXIgY2hhcmFjdGVyIGFuZCByZWNhbGN1bGF0ZSBjb2RlIHBvaW50LlxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIGNwID0gZ2V0U3Vycm9nYXRlUGFpckNvZGVQb2ludChjcCwgbmV4dENwKTtcblxuICAgICAgICAgICAgLy9OT1RFOiBhZGQgZ2FwIHRoYXQgc2hvdWxkIGJlIGF2b2lkZWQgZHVyaW5nIHJldHJlYXRcbiAgICAgICAgICAgIHRoaXMuX2FkZEdhcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzUmVzZXJ2ZWRDb2RlUG9pbnQoY3ApKVxuICAgICAgICBjcCA9ICQuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuXG4gICAgcmV0dXJuIGNwO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5fYWRkR2FwID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZ2FwU3RhY2sucHVzaCh0aGlzLmxhc3RHYXBQb3MpO1xuICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMucG9zO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5yZXRyZWF0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnBvcyA9PT0gdGhpcy5sYXN0R2FwUG9zKSB7XG4gICAgICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMuZ2FwU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMucG9zLS07XG4gICAgfVxuXG4gICAgdGhpcy5wb3MtLTtcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgUHJlcHJvY2Vzc29yID0gcmVxdWlyZSgnLi9wcmVwcm9jZXNzb3InKSxcclxuICAgIExvY2F0aW9uSW5mb01peGluID0gcmVxdWlyZSgnLi9sb2NhdGlvbl9pbmZvX21peGluJyksXHJcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcclxuICAgIE5BTUVEX0VOVElUWV9UUklFID0gcmVxdWlyZSgnLi9uYW1lZF9lbnRpdHlfdHJpZScpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gVU5JQ09ERS5DT0RFX1BPSU5UUyxcclxuICAgICQkID0gVU5JQ09ERS5DT0RFX1BPSU5UX1NFUVVFTkNFUztcclxuXHJcbi8vUmVwbGFjZW1lbnQgY29kZSBwb2ludHMgZm9yIG51bWVyaWMgZW50aXRpZXNcclxudmFyIE5VTUVSSUNfRU5USVRZX1JFUExBQ0VNRU5UUyA9IHtcclxuICAgIDB4MDA6IDB4RkZGRCwgMHgwRDogMHgwMDBELCAweDgwOiAweDIwQUMsIDB4ODE6IDB4MDA4MSwgMHg4MjogMHgyMDFBLCAweDgzOiAweDAxOTIsIDB4ODQ6IDB4MjAxRSxcclxuICAgIDB4ODU6IDB4MjAyNiwgMHg4NjogMHgyMDIwLCAweDg3OiAweDIwMjEsIDB4ODg6IDB4MDJDNiwgMHg4OTogMHgyMDMwLCAweDhBOiAweDAxNjAsIDB4OEI6IDB4MjAzOSxcclxuICAgIDB4OEM6IDB4MDE1MiwgMHg4RDogMHgwMDhELCAweDhFOiAweDAxN0QsIDB4OEY6IDB4MDA4RiwgMHg5MDogMHgwMDkwLCAweDkxOiAweDIwMTgsIDB4OTI6IDB4MjAxOSxcclxuICAgIDB4OTM6IDB4MjAxQywgMHg5NDogMHgyMDFELCAweDk1OiAweDIwMjIsIDB4OTY6IDB4MjAxMywgMHg5NzogMHgyMDE0LCAweDk4OiAweDAyREMsIDB4OTk6IDB4MjEyMixcclxuICAgIDB4OUE6IDB4MDE2MSwgMHg5QjogMHgyMDNBLCAweDlDOiAweDAxNTMsIDB4OUQ6IDB4MDA5RCwgMHg5RTogMHgwMTdFLCAweDlGOiAweDAxNzhcclxufTtcclxuXHJcbi8vU3RhdGVzXHJcbnZhciBEQVRBX1NUQVRFID0gJ0RBVEFfU1RBVEUnLFxyXG4gICAgQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9EQVRBX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURScsXHJcbiAgICBSQ0RBVEFfU1RBVEUgPSAnUkNEQVRBX1NUQVRFJyxcclxuICAgIENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFJyxcclxuICAgIFJBV1RFWFRfU1RBVEUgPSAnUkFXVEVYVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9TVEFURSA9ICdTQ1JJUFRfREFUQV9TVEFURScsXHJcbiAgICBQTEFJTlRFWFRfU1RBVEUgPSAnUExBSU5URVhUX1NUQVRFJyxcclxuICAgIFRBR19PUEVOX1NUQVRFID0gJ1RBR19PUEVOX1NUQVRFJyxcclxuICAgIEVORF9UQUdfT1BFTl9TVEFURSA9ICdFTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgVEFHX05BTUVfU1RBVEUgPSAnVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1JDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBSQ0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1JDREFUQV9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFJBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEUgPSAnUkFXVEVYVF9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURScsXHJcbiAgICBSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFJyxcclxuICAgIEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEUnLFxyXG4gICAgQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEUgPSAnQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEUnLFxyXG4gICAgQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURSA9ICdBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFJyxcclxuICAgIFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEUgPSAnU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURScsXHJcbiAgICBCT0dVU19DT01NRU5UX1NUQVRFID0gJ0JPR1VTX0NPTU1FTlRfU1RBVEUnLFxyXG4gICAgTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUgPSAnTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9TVEFSVF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX1NUQVRFJyxcclxuICAgIENPTU1FTlRfU1RBUlRfREFTSF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9TVEFURSA9ICdDT01NRU5UX1NUQVRFJyxcclxuICAgIENPTU1FTlRfRU5EX0RBU0hfU1RBVEUgPSAnQ09NTUVOVF9FTkRfREFTSF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9TVEFURSA9ICdDT01NRU5UX0VORF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9CQU5HX1NUQVRFID0gJ0NPTU1FTlRfRU5EX0JBTkdfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TVEFURSA9ICdET0NUWVBFX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEUgPSAnQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURScsXHJcbiAgICBET0NUWVBFX05BTUVfU1RBVEUgPSAnRE9DVFlQRV9OQU1FX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfTkFNRV9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX05BTUVfU1RBVEUnLFxyXG4gICAgQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFID0gJ0JFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEUnLFxyXG4gICAgQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUgPSAnQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURScsXHJcbiAgICBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEUgPSAnRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURScsXHJcbiAgICBCT0dVU19ET0NUWVBFX1NUQVRFID0gJ0JPR1VTX0RPQ1RZUEVfU1RBVEUnLFxyXG4gICAgQ0RBVEFfU0VDVElPTl9TVEFURSA9ICdDREFUQV9TRUNUSU9OX1NUQVRFJztcclxuXHJcbi8vVXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIG1vdmVkIG91dCBvZiB0aGlzIG1vZHVsZS4gVjggQ3JhbmtzaGFmdCB3aWxsIG5vdCBpbmxpbmVcclxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxyXG4vL0Fsd2F5cyBwZXJmb3JtIGlubGluaW5nIGNoZWNrIGJlZm9yZSBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbnMgKCdub2RlIC0tdHJhY2UtaW5saW5pbmcnKS5cclxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPT09ICQuU1BBQ0UgfHwgY3AgPT09ICQuTElORV9GRUVEIHx8IGNwID09PSAkLlRBQlVMQVRJT04gfHwgY3AgPT09ICQuRk9STV9GRUVEO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzY2lpRGlnaXQoY3ApIHtcclxuICAgIHJldHVybiBjcCA+PSAkLkRJR0lUXzAgJiYgY3AgPD0gJC5ESUdJVF85O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzY2lpVXBwZXIoY3ApIHtcclxuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX0NBUElUQUxfQSAmJiBjcCA8PSAkLkxBVElOX0NBUElUQUxfWjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaUxvd2VyKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gJC5MQVRJTl9TTUFMTF9BICYmIGNwIDw9ICQuTEFUSU5fU01BTExfWjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaUFscGhhTnVtZXJpYyhjcCkge1xyXG4gICAgcmV0dXJuIGlzQXNjaWlEaWdpdChjcCkgfHwgaXNBc2NpaVVwcGVyKGNwKSB8fCBpc0FzY2lpTG93ZXIoY3ApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RpZ2l0KGNwLCBpc0hleCkge1xyXG4gICAgcmV0dXJuIGlzQXNjaWlEaWdpdChjcCkgfHwgKGlzSGV4ICYmICgoY3AgPj0gJC5MQVRJTl9DQVBJVEFMX0EgJiYgY3AgPD0gJC5MQVRJTl9DQVBJVEFMX0YpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcCA+PSAkLkxBVElOX1NNQUxMX0EgJiYgY3AgPD0gJC5MQVRJTl9TTUFMTF9GKSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gMHhEODAwICYmIGNwIDw9IDB4REZGRiB8fCBjcCA+IDB4MTBGRkZGO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApIHtcclxuICAgIHJldHVybiBjcCArIDB4MDAyMDtcclxufVxyXG5cclxuLy9OT1RFOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCkgZnVuY3Rpb24gY2FuIGhhbmRsZSBvbmx5IGNoYXJhY3RlcnMgZnJvbSBCTVAgc3Vic2V0LlxyXG4vL1NvLCB3ZSBuZWVkIHRvIHdvcmthcm91bmQgdGhpcyBtYW51YWxseS5cclxuLy8oc2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9mcm9tQ2hhckNvZGUjR2V0dGluZ19pdF90b193b3JrX3dpdGhfaGlnaGVyX3ZhbHVlcylcclxuZnVuY3Rpb24gdG9DaGFyKGNwKSB7XHJcbiAgICBpZiAoY3AgPD0gMHhGRkZGKVxyXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKTtcclxuXHJcbiAgICBjcCAtPSAweDEwMDAwO1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3AgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApICsgU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgfCBjcCAmIDB4M0ZGKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9Bc2NpaUxvd2VyQ2hhcihjcCkge1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbn1cclxuXHJcbi8vVG9rZW5pemVyXHJcbnZhciBUb2tlbml6ZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChodG1sLCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLmRpc2FibGVFbnRpdGllc0RlY29kaW5nID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IgPSBuZXcgUHJlcHJvY2Vzc29yKGh0bWwpO1xyXG5cclxuICAgIHRoaXMudG9rZW5RdWV1ZSA9IFtdO1xyXG5cclxuICAgIHRoaXMuYWxsb3dDREFUQSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgdGhpcy5yZXR1cm5TdGF0ZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuY29uc3VtcHRpb25Qb3MgPSAwO1xyXG5cclxuICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuICAgIHRoaXMubGFzdFN0YXJ0VGFnTmFtZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudEF0dHIgPSBudWxsO1xyXG5cclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlRW50aXRpZXNEZWNvZGluZyA9ICFvcHRpb25zLmRlY29kZUh0bWxFbnRpdGllcztcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMubG9jYXRpb25JbmZvKVxyXG4gICAgICAgICAgICBMb2NhdGlvbkluZm9NaXhpbi5hc3NpZ24odGhpcyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL1Rva2VuIHR5cGVzXHJcblRva2VuaXplci5DSEFSQUNURVJfVE9LRU4gPSAnQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOID0gJ05VTExfQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOID0gJ1dISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiA9ICdTVEFSVF9UQUdfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRU5EX1RBR19UT0tFTiA9ICdFTkRfVEFHX1RPS0VOJztcclxuVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4gPSAnQ09NTUVOVF9UT0tFTic7XHJcblRva2VuaXplci5ET0NUWVBFX1RPS0VOID0gJ0RPQ1RZUEVfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRU9GX1RPS0VOID0gJ0VPRl9UT0tFTic7XHJcblxyXG4vL1Rva2VuaXplciBpbml0aWFsIHN0YXRlcyBmb3IgZGlmZmVyZW50IG1vZGVzXHJcblRva2VuaXplci5NT0RFID0gVG9rZW5pemVyLnByb3RvdHlwZS5NT0RFID0ge1xyXG4gICAgREFUQTogREFUQV9TVEFURSxcclxuICAgIFJDREFUQTogUkNEQVRBX1NUQVRFLFxyXG4gICAgUkFXVEVYVDogUkFXVEVYVF9TVEFURSxcclxuICAgIFNDUklQVF9EQVRBOiBTQ1JJUFRfREFUQV9TVEFURSxcclxuICAgIFBMQUlOVEVYVDogUExBSU5URVhUX1NUQVRFXHJcbn07XHJcblxyXG4vL1N0YXRpY1xyXG5Ub2tlbml6ZXIuZ2V0VG9rZW5BdHRyID0gZnVuY3Rpb24gKHRva2VuLCBhdHRyTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRva2VuLmF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRva2VuLmF0dHJzW2ldLm5hbWUgPT09IGF0dHJOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdG9rZW4uYXR0cnNbaV0udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG4vL0dldCB0b2tlblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICghdGhpcy50b2tlblF1ZXVlLmxlbmd0aClcclxuICAgICAgICB0aGlzW3RoaXMuc3RhdGVdKHRoaXMuX2NvbnN1bWUoKSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudG9rZW5RdWV1ZS5zaGlmdCgpO1xyXG59O1xyXG5cclxuLy9Db25zdW1wdGlvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jb25zdW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jb25zdW1wdGlvblBvcysrO1xyXG4gICAgcmV0dXJuIHRoaXMucHJlcHJvY2Vzc29yLmFkdmFuY2VBbmRQZWVrQ29kZVBvaW50KCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl91bmNvbnN1bWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmNvbnN1bXB0aW9uUG9zLS07XHJcbiAgICB0aGlzLnByZXByb2Nlc3Nvci5yZXRyZWF0KCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl91bmNvbnN1bWVTZXZlcmFsID0gZnVuY3Rpb24gKGNvdW50KSB7XHJcbiAgICB3aGlsZSAoY291bnQtLSlcclxuICAgICAgICB0aGlzLl91bmNvbnN1bWUoKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX3JlY29uc3VtZUluU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIHRoaXMuX3VuY29uc3VtZSgpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoID0gZnVuY3Rpb24gKHBhdHRlcm4sIHN0YXJ0Q3AsIGNhc2VTZW5zaXRpdmUpIHtcclxuICAgIHZhciByb2xsYmFja1BvcyA9IHRoaXMuY29uc3VtcHRpb25Qb3MsXHJcbiAgICAgICAgaXNNYXRjaCA9IHRydWUsXHJcbiAgICAgICAgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm4ubGVuZ3RoLFxyXG4gICAgICAgIHBhdHRlcm5Qb3MgPSAwLFxyXG4gICAgICAgIGNwID0gc3RhcnRDcCxcclxuICAgICAgICBwYXR0ZXJuQ3AgPSB2b2lkIDA7XHJcblxyXG4gICAgZm9yICg7IHBhdHRlcm5Qb3MgPCBwYXR0ZXJuTGVuZ3RoOyBwYXR0ZXJuUG9zKyspIHtcclxuICAgICAgICBpZiAocGF0dGVyblBvcyA+IDApXHJcbiAgICAgICAgICAgIGNwID0gdGhpcy5fY29uc3VtZSgpO1xyXG5cclxuICAgICAgICBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXR0ZXJuQ3AgPSBwYXR0ZXJuW3BhdHRlcm5Qb3NdO1xyXG5cclxuICAgICAgICBpZiAoY3AgIT09IHBhdHRlcm5DcCAmJiAoY2FzZVNlbnNpdGl2ZSB8fCBjcCAhPT0gdG9Bc2NpaUxvd2VyQ29kZVBvaW50KHBhdHRlcm5DcCkpKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNNYXRjaClcclxuICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKHRoaXMuY29uc3VtcHRpb25Qb3MgLSByb2xsYmFja1Bvcyk7XHJcblxyXG4gICAgcmV0dXJuIGlzTWF0Y2g7XHJcbn07XHJcblxyXG4vL0xvb2thaGVhZFxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9sb29rYWhlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY3AgPSB0aGlzLnByZXByb2Nlc3Nvci5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCgpO1xyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IucmV0cmVhdCgpO1xyXG5cclxuICAgIHJldHVybiBjcDtcclxufTtcclxuXHJcbi8vVGVtcCBidWZmZXJcclxuVG9rZW5pemVyLnByb3RvdHlwZS5pc1RlbXBCdWZmZXJFcXVhbFRvU2NyaXB0U3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMudGVtcEJ1ZmYubGVuZ3RoICE9PSAkJC5TQ1JJUFRfU1RSSU5HLmxlbmd0aClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRlbXBCdWZmLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcEJ1ZmZbaV0gIT09ICQkLlNDUklQVF9TVFJJTkdbaV0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbi8vVG9rZW4gY3JlYXRpb25cclxuVG9rZW5pemVyLnByb3RvdHlwZS5idWlsZFN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgc2VsZkNsb3Npbmc6IGZhbHNlLFxyXG4gICAgICAgIGF0dHJzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuYnVpbGRFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IFRva2VuaXplci5FTkRfVEFHX1RPS0VOLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgaWdub3JlZDogZmFsc2UsXHJcbiAgICAgICAgYXR0cnM6IFtdXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlU3RhcnRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0aGlzLmJ1aWxkU3RhcnRUYWdUb2tlbih0YWdOYW1lRmlyc3RDaCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0aGlzLmJ1aWxkRW5kVGFnVG9rZW4odGFnTmFtZUZpcnN0Q2gpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQ29tbWVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB7XHJcbiAgICAgICAgdHlwZTogVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4sXHJcbiAgICAgICAgZGF0YTogJydcclxuICAgIH07XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVEb2N0eXBlVG9rZW4gPSBmdW5jdGlvbiAoZG9jdHlwZU5hbWVGaXJzdENoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTixcclxuICAgICAgICBuYW1lOiBkb2N0eXBlTmFtZUZpcnN0Q2ggfHwgJycsXHJcbiAgICAgICAgZm9yY2VRdWlya3M6IGZhbHNlLFxyXG4gICAgICAgIHB1YmxpY0lkOiBudWxsLFxyXG4gICAgICAgIHN5c3RlbUlkOiBudWxsXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQ2hhcmFjdGVyVG9rZW4gPSBmdW5jdGlvbiAodHlwZSwgY2gpIHtcclxuICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0ge1xyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgY2hhcnM6IGNoXHJcbiAgICB9O1xyXG59O1xyXG5cclxuLy9UYWcgYXR0cmlidXRlc1xyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVBdHRyID0gZnVuY3Rpb24gKGF0dHJOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50QXR0ciA9IHtcclxuICAgICAgICBuYW1lOiBhdHRyTmFtZUZpcnN0Q2gsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5faXNEdXBsaWNhdGVBdHRyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIFRva2VuaXplci5nZXRUb2tlbkF0dHIodGhpcy5jdXJyZW50VG9rZW4sIHRoaXMuY3VycmVudEF0dHIubmFtZSkgIT09IG51bGw7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9sZWF2ZUF0dHJOYW1lID0gZnVuY3Rpb24gKHRvU3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSB0b1N0YXRlO1xyXG5cclxuICAgIGlmICghdGhpcy5faXNEdXBsaWNhdGVBdHRyKCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uYXR0cnMucHVzaCh0aGlzLmN1cnJlbnRBdHRyKTtcclxufTtcclxuXHJcbi8vQXBwcm9wcmlhdGUgZW5kIHRhZyB0b2tlblxyXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI2FwcHJvcHJpYXRlLWVuZC10YWctdG9rZW4pXHJcblRva2VuaXplci5wcm90b3R5cGUuX2lzQXBwcm9wcmlhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPT09IHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWU7XHJcbn07XHJcblxyXG4vL1Rva2VuIGVtaXNzaW9uXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRDdXJyZW50VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcblxyXG4gICAgLy9OT1RFOiBzdG9yZSBlbWl0ZWQgc3RhcnQgdGFnJ3MgdGFnTmFtZSB0byBkZXRlcm1pbmUgaXMgdGhlIGZvbGxvd2luZyBlbmQgdGFnIHRva2VuIGlzIGFwcHJvcHJpYXRlLlxyXG4gICAgaWYgKHRoaXMuY3VycmVudFRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4pXHJcbiAgICAgICAgdGhpcy5sYXN0U3RhcnRUYWdOYW1lID0gdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICB0aGlzLnRva2VuUXVldWUucHVzaCh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKSB7XHJcbiAgICAgICAgdGhpcy50b2tlblF1ZXVlLnB1c2godGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcclxuICAgIH1cclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRFT0ZUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4oKTtcclxuICAgIHRoaXMudG9rZW5RdWV1ZS5wdXNoKHt0eXBlOiBUb2tlbml6ZXIuRU9GX1RPS0VOfSk7XHJcbn07XHJcblxyXG4vL0NoYXJhY3RlcnMgZW1pc3Npb25cclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBzcGVjaWZpY2F0aW9uIHVzZXMgb25seSBvbmUgdHlwZSBvZiBjaGFyYWN0ZXIgdG9rZW5zIChvbmUgdG9rZW4gcGVyIGNoYXJhY3RlcikuXHJcbi8vVGhpcyBjYXVzZXMgYSBodWdlIG1lbW9yeSBvdmVyaGVhZCBhbmQgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgcGFyc2VyIGxvb3BzLiBwYXJzZTUgdXNlcyAzIGdyb3VwcyBvZiBjaGFyYWN0ZXJzLlxyXG4vL0lmIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYmVsb25nIHRvIHRoZSBzYW1lIGdyb3VwLCBwYXJzZXIgY2FuIHByb2Nlc3MgaXRcclxuLy9hcyBhIHNpbmdsZSBzb2xpZCBjaGFyYWN0ZXIgdG9rZW4uXHJcbi8vU28sIHRoZXJlIGFyZSAzIHR5cGVzIG9mIGNoYXJhY3RlciB0b2tlbnMgaW4gcGFyc2U1OlxyXG4vLzEpTlVMTF9DSEFSQUNURVJfVE9LRU4gLSBcXHUwMDAwLWNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcdTAwMDBcXHUwMDAwXFx1MDAwMCcpXHJcbi8vMilXSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAtIGFueSB3aGl0ZXNwYWNlL25ldy1saW5lIGNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcbiAgXFxyXFx0ICAgXFxmJylcclxuLy8zKUNIQVJBQ1RFUl9UT0tFTiAtIGFueSBjaGFyYWN0ZXIgc2VxdWVuY2Ugd2hpY2ggZG9uJ3QgYmVsb25nIHRvIGdyb3VwcyAxIGFuZCAyIChlLmcuICdhYmNkZWYxMjM0QEAjJCVeJylcclxuVG9rZW5pemVyLnByb3RvdHlwZS5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gJiYgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4udHlwZSAhPT0gdHlwZSlcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKVxyXG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmNoYXJzICs9IGNoO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbih0eXBlLCBjaCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q29kZVBvaW50ID0gZnVuY3Rpb24gKGNwKSB7XHJcbiAgICB2YXIgdHlwZSA9IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdHlwZSA9IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHR5cGUgPSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgdGhpcy5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKHR5cGUsIHRvQ2hhcihjcCkpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdFNldmVyYWxDb2RlUG9pbnRzID0gZnVuY3Rpb24gKGNvZGVQb2ludHMpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNvZGVQb2ludHNbaV0pO1xyXG59O1xyXG5cclxuLy9OT1RFOiB1c2VkIHRoZW4gd2UgZW1pdCBjaGFyYWN0ZXIgZXhwbGljaXRseS4gVGhpcyBpcyBhbHdheXMgYSBub24td2hpdGVzcGFjZSBhbmQgYSBub24tbnVsbCBjaGFyYWN0ZXIuXHJcbi8vU28gd2UgY2FuIGF2b2lkIGFkZGl0aW9uYWwgY2hlY2tzIGhlcmUuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRDaGFyID0gZnVuY3Rpb24gKGNoKSB7XHJcbiAgICB0aGlzLl9hcHBlbmRDaGFyVG9DdXJyZW50Q2hhcmFjdGVyVG9rZW4oVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiwgY2gpO1xyXG59O1xyXG5cclxuLy9DaGFyYWN0ZXIgcmVmZXJlbmNlIHRva2VuaXphdGlvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jb25zdW1lTnVtZXJpY0VudGl0eSA9IGZ1bmN0aW9uIChpc0hleCkge1xyXG4gICAgdmFyIGRpZ2l0cyA9ICcnLFxyXG4gICAgICAgIG5leHRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgICAgZGlnaXRzICs9IHRvQ2hhcih0aGlzLl9jb25zdW1lKCkpO1xyXG4gICAgICAgIG5leHRDcCA9IHRoaXMuX2xvb2thaGVhZCgpO1xyXG4gICAgfSB3aGlsZSAobmV4dENwICE9PSAkLkVPRiAmJiBpc0RpZ2l0KG5leHRDcCwgaXNIZXgpKTtcclxuXHJcbiAgICBpZiAodGhpcy5fbG9va2FoZWFkKCkgPT09ICQuU0VNSUNPTE9OKVxyXG4gICAgICAgIHRoaXMuX2NvbnN1bWUoKTtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENwID0gcGFyc2VJbnQoZGlnaXRzLCBpc0hleCA/IDE2IDogMTApLFxyXG4gICAgICAgIHJlcGxhY2VtZW50ID0gTlVNRVJJQ19FTlRJVFlfUkVQTEFDRU1FTlRTW3JlZmVyZW5jZWRDcF07XHJcblxyXG4gICAgaWYgKHJlcGxhY2VtZW50KVxyXG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcclxuXHJcbiAgICBpZiAoaXNSZXNlcnZlZENvZGVQb2ludChyZWZlcmVuY2VkQ3ApKVxyXG4gICAgICAgIHJldHVybiAkLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICByZXR1cm4gcmVmZXJlbmNlZENwO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZU5hbWVkRW50aXR5ID0gZnVuY3Rpb24gKHN0YXJ0Q3AsIGluQXR0cikge1xyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gbnVsbCxcclxuICAgICAgICBlbnRpdHlDb2RlUG9pbnRzQ291bnQgPSAwLFxyXG4gICAgICAgIGNwID0gc3RhcnRDcCxcclxuICAgICAgICBsZWFmID0gTkFNRURfRU5USVRZX1RSSUVbY3BdLFxyXG4gICAgICAgIGNvbnN1bWVkQ291bnQgPSAxLFxyXG4gICAgICAgIHNlbWljb2xvblRlcm1pbmF0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKDsgbGVhZiAmJiBjcCAhPT0gJC5FT0Y7IGNwID0gdGhpcy5fY29uc3VtZSgpLCBjb25zdW1lZENvdW50KyssIGxlYWYgPSBsZWFmLmwgJiYgbGVhZi5sW2NwXSkge1xyXG4gICAgICAgIGlmIChsZWFmLmMpIHtcclxuICAgICAgICAgICAgLy9OT1RFOiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBuYW1lZCByZWZlcmVuY2UgbWF0Y2guIEJ1dCB3ZSBkb24ndCBzdG9wIGxvb2t1cCBhdCB0aGlzIHBvaW50LFxyXG4gICAgICAgICAgICAvL2JlY2F1c2UgbG9uZ2VyIG1hdGNoZXMgc3RpbGwgY2FuIGJlIGZvdW5kIChlLmcuICcmbm90JyBhbmQgJyZub3RpbjsnKSBleGNlcHQgdGhlIGNhc2VcclxuICAgICAgICAgICAgLy90aGVuIGZvdW5kIG1hdGNoIGlzIHRlcm1pbmF0ZWQgYnkgc2VtaWNvbG9uLlxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQ29kZVBvaW50cyA9IGxlYWYuYztcclxuICAgICAgICAgICAgZW50aXR5Q29kZVBvaW50c0NvdW50ID0gY29uc3VtZWRDb3VudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TRU1JQ09MT04pIHtcclxuICAgICAgICAgICAgICAgIHNlbWljb2xvblRlcm1pbmF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgaWYgKCFzZW1pY29sb25UZXJtaW5hdGVkKSB7XHJcbiAgICAgICAgICAgIC8vTk9URTogdW5jb25zdW1lIGV4Y2VzcyAoZS5nLiAnaXQnIGluICcmbm90aXQnKVxyXG4gICAgICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGNvbnN1bWVkQ291bnQgLSBlbnRpdHlDb2RlUG9pbnRzQ291bnQpO1xyXG5cclxuICAgICAgICAgICAgLy9OT1RFOiBJZiB0aGUgY2hhcmFjdGVyIHJlZmVyZW5jZSBpcyBiZWluZyBjb25zdW1lZCBhcyBwYXJ0IG9mIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIG5leHQgY2hhcmFjdGVyXHJcbiAgICAgICAgICAgIC8vaXMgZWl0aGVyIGEgVSswMDNEIEVRVUFMUyBTSUdOIGNoYXJhY3RlciAoPSkgb3IgYW4gYWxwaGFudW1lcmljIEFTQ0lJIGNoYXJhY3RlciwgdGhlbiwgZm9yIGhpc3RvcmljYWxcclxuICAgICAgICAgICAgLy9yZWFzb25zLCBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIG1hdGNoZWQgYWZ0ZXIgdGhlIFUrMDAyNiBBTVBFUlNBTkQgY2hhcmFjdGVyICgmKSBtdXN0IGJlXHJcbiAgICAgICAgICAgIC8vdW5jb25zdW1lZCwgYW5kIG5vdGhpbmcgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgICAgIC8vSG93ZXZlciwgaWYgdGhpcyBuZXh0IGNoYXJhY3RlciBpcyBpbiBmYWN0IGEgVSswMDNEIEVRVUFMUyBTSUdOIGNoYXJhY3RlciAoPSksIHRoZW4gdGhpcyBpcyBhXHJcbiAgICAgICAgICAgIC8vcGFyc2UgZXJyb3IsIGJlY2F1c2Ugc29tZSBsZWdhY3kgdXNlciBhZ2VudHMgd2lsbCBtaXNpbnRlcnByZXQgdGhlIG1hcmt1cCBpbiB0aG9zZSBjYXNlcy5cclxuICAgICAgICAgICAgLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCN0b2tlbml6aW5nLWNoYXJhY3Rlci1yZWZlcmVuY2VzKVxyXG4gICAgICAgICAgICBpZiAoaW5BdHRyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV4dENwID0gdGhpcy5fbG9va2FoZWFkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRDcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBpc0FzY2lpQWxwaGFOdW1lcmljKG5leHRDcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGVudGl0eUNvZGVQb2ludHNDb3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZWZlcmVuY2VkQ29kZVBvaW50cztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGNvbnN1bWVkQ291bnQpO1xyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZSA9IGZ1bmN0aW9uIChzdGFydENwLCBpbkF0dHIpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVFbnRpdGllc0RlY29kaW5nIHx8IGlzV2hpdGVzcGFjZShzdGFydENwKSB8fCBzdGFydENwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOIHx8XHJcbiAgICAgICAgc3RhcnRDcCA9PT0gJC5BTVBFUlNBTkQgfHwgc3RhcnRDcCA9PT0gdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwIHx8IHN0YXJ0Q3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgLy9OT1RFOiBub3QgYSBjaGFyYWN0ZXIgcmVmZXJlbmNlLiBObyBjaGFyYWN0ZXJzIGFyZSBjb25zdW1lZCwgYW5kIG5vdGhpbmcgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoc3RhcnRDcCA9PT0gJC5OVU1CRVJfU0lHTikge1xyXG4gICAgICAgIC8vTk9URTogd2UgaGF2ZSBhIG51bWVyaWMgZW50aXR5IGNhbmRpZGF0ZSwgbm93IHdlIHNob3VsZCBkZXRlcm1pbmUgaWYgaXQncyBoZXggb3IgZGVjaW1hbFxyXG4gICAgICAgIHZhciBpc0hleCA9IGZhbHNlLFxyXG4gICAgICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuXHJcbiAgICAgICAgaWYgKG5leHRDcCA9PT0gJC5MQVRJTl9TTUFMTF9YIHx8IG5leHRDcCA9PT0gJC5MQVRJTl9DQVBJVEFMX1gpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29uc3VtZSgpO1xyXG4gICAgICAgICAgICBpc0hleCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuXHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBkaWdpdCB0aGlzIGlzIGEgbnVtZXJpYyBlbnRpdHkgZm9yIHN1cmUsIHNvIHdlIGNvbnN1bWUgaXRcclxuICAgICAgICBpZiAobmV4dENwICE9PSAkLkVPRiAmJiBpc0RpZ2l0KG5leHRDcCwgaXNIZXgpKVxyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NvbnN1bWVOdW1lcmljRW50aXR5KGlzSGV4KV07XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvL05PVEU6IG90aGVyd2lzZSB0aGlzIGlzIGEgYm9ndXMgbnVtYmVyIGVudGl0eSBhbmQgYSBwYXJzZSBlcnJvci4gVW5jb25zdW1lIHRoZSBudW1iZXIgc2lnblxyXG4gICAgICAgICAgICAvL2FuZCB0aGUgJ3gnLWNoYXJhY3RlciBpZiBhcHByb3ByaWF0ZS5cclxuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChpc0hleCA/IDIgOiAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uc3VtZU5hbWVkRW50aXR5KHN0YXJ0Q3AsIGluQXR0cik7XHJcbn07XHJcblxyXG4vL1N0YXRlIG1hY2hpbmVcclxudmFyIF8gPSBUb2tlbml6ZXIucHJvdG90eXBlO1xyXG5cclxuLy8xMi4yLjQuMSBEYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bREFUQV9TVEFURV0gPSBmdW5jdGlvbiBkYXRhU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBkYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9EQVRBX1NUQVRFXSA9IGZ1bmN0aW9uIGNoYXJhY3RlclJlZmVyZW5jZUluRGF0YVN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENvZGVQb2ludHMgPSB0aGlzLl9jb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKGNwLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKVxyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyhyZWZlcmVuY2VkQ29kZVBvaW50cyk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJyYnKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zIFJDREFUQSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkFNUEVSU0FORClcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9SQ0RBVEFfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBSQ0RBVEEgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDSEFSQUNURVJfUkVGRVJFTkNFX0lOX1JDREFUQV9TVEFURV0gPSBmdW5jdGlvbiBjaGFyYWN0ZXJSZWZlcmVuY2VJblJjZGF0YVN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gUkNEQVRBX1NUQVRFO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwID0gdm9pZCAwO1xyXG5cclxuICAgIHZhciByZWZlcmVuY2VkQ29kZVBvaW50cyA9IHRoaXMuX2NvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoY3AsIGZhbHNlKTtcclxuXHJcbiAgICBpZiAocmVmZXJlbmNlZENvZGVQb2ludHMpXHJcbiAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHJlZmVyZW5jZWRDb2RlUG9pbnRzKTtcclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignJicpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUgUkFXVEVYVCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42IFNjcmlwdCBkYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNyBQTEFJTlRFWFQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tQTEFJTlRFWFRfU1RBVEVdID0gZnVuY3Rpb24gcGxhaW50ZXh0U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjggVGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tUQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiB0YWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5FWENMQU1BVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBNQVJLVVBfREVDTEFSQVRJT05fT1BFTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBFTkRfVEFHX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlU3RhcnRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVFU1RJT05fTUFSSykge1xyXG4gICAgICAgIC8vTk9URTogY2FsbCBib2d1cyBjb21tZW50IHN0YXRlIGRpcmVjdGx5IHdpdGggY3VycmVudCBjb25zdW1lZCBjaGFyYWN0ZXIgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVjb25zdW1wdGlvbi5cclxuICAgICAgICB0aGlzW0JPR1VTX0NPTU1FTlRfU1RBVEVdKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuOSBFbmQgdGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tFTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gZW5kVGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvL05PVEU6IGNhbGwgYm9ndXMgY29tbWVudCBzdGF0ZSBkaXJlY3RseSB3aXRoIGN1cnJlbnQgY29uc3VtZWQgY2hhcmFjdGVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlY29uc3VtcHRpb24uXHJcbiAgICAgICAgdGhpc1tCT0dVU19DT01NRU5UX1NUQVRFXShjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTAgVGFnIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tUQUdfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiB0YWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTEgUkNEQVRBIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHJjZGF0YUxlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkNEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xMiBSQ0RBVEEgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkNEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xMyBSQ0RBVEEgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTQgUkFXVEVYVCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE1IFJBV1RFWFQgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dEVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE2IFJBV1RFWFQgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dEVuZFRhZ05hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHRoaXMudGVtcEJ1ZmYpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkFXVEVYVF9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTcgU2NyaXB0IGRhdGEgbGVzcy10aGFuIHNpZ24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhTGVzc1RoYW5TaWduU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignIScpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTggU2NyaXB0IGRhdGEgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xOSBTY3JpcHQgZGF0YSBlbmQgdGFnIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVuZFRhZ05hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yMCBTY3JpcHQgZGF0YSBlc2NhcGUgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZVN0YXJ0U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjEgU2NyaXB0IGRhdGEgZXNjYXBlIHN0YXJ0IGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlU3RhcnREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjIgU2NyaXB0IGRhdGEgZXNjYXBlZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjMgU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNCBTY3JpcHQgZGF0YSBlc2NhcGVkIGRhc2ggZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRGFzaERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLScpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc+Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNSBTY3JpcHQgZGF0YSBlc2NhcGVkIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjYgU2NyaXB0IGRhdGEgZXNjYXBlZCBlbmQgdGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZEVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI3IFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI4IFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGUgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSB8fCBjcCA9PT0gJC5TT0xJRFVTIHx8IGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuaXNUZW1wQnVmZmVyRXF1YWxUb1NjcmlwdFN0cmluZygpID8gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEUgOiBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjkgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMCBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMSBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBkYXNoIGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YURvdWJsZUVzY2FwZWREYXNoRGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPicpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMiBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVkTGVzc1RoYW5TaWduU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMyBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlIGVuZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVFbmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkgfHwgY3AgPT09ICQuU09MSURVUyB8fCBjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmlzVGVtcEJ1ZmZlckVxdWFsVG9TY3JpcHRTdHJpbmcoKSA/IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUgOiBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaCh0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzQgQmVmb3JlIGF0dHJpYnV0ZSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZUF0dHJpYnV0ZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8IGNwID09PSAkLkVRVUFMU19TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzUgQXR0cmlidXRlIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpXHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FUVVBTFNfU0lHTilcclxuICAgICAgICB0aGlzLl9sZWF2ZUF0dHJOYW1lKEJFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShEQVRBX1NUQVRFKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdG9DaGFyKGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzYgQWZ0ZXIgYXR0cmlidXRlIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9BVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckF0dHJpYnV0ZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVRVUFMU19TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzcgQmVmb3JlIGF0dHJpYnV0ZSB2YWx1ZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEVdID0gZnVuY3Rpb24gYmVmb3JlQXR0cmlidXRlVmFsdWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8IGNwID09PSAkLkVRVUFMU19TSUdOIHx8IGNwID09PSAkLkdSQVZFX0FDQ0VOVCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM4IEF0dHJpYnV0ZSB2YWx1ZSAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKSB7XHJcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwID0gJC5RVU9UQVRJT05fTUFSSztcclxuICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzkgQXR0cmlidXRlIHZhbHVlIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuQVBPU1RST1BIRTtcclxuICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDAgQXR0cmlidXRlIHZhbHVlICh1bnF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gYXR0cmlidXRlVmFsdWVVbnF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuR1JFQVRFUl9USEFOX1NJR047XHJcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8XHJcbiAgICAgICAgICAgICBjcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBjcCA9PT0gJC5HUkFWRV9BQ0NFTlQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40MSBDaGFyYWN0ZXIgcmVmZXJlbmNlIGluIGF0dHJpYnV0ZSB2YWx1ZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFXSA9IGZ1bmN0aW9uIGNoYXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlVmFsdWVTdGF0ZShjcCkge1xyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gdGhpcy5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShjcCwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZlcmVuY2VkQ29kZVBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIocmVmZXJlbmNlZENvZGVQb2ludHNbaV0pO1xyXG4gICAgfSBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSAnJic7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucmV0dXJuU3RhdGU7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDIgQWZ0ZXIgYXR0cmlidXRlIHZhbHVlIChxdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckF0dHJpYnV0ZVZhbHVlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQzIFNlbGYtY2xvc2luZyBzdGFydCB0YWcgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFXSA9IGZ1bmN0aW9uIHNlbGZDbG9zaW5nU3RhcnRUYWdTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc2VsZkNsb3NpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ0IEJvZ3VzIGNvbW1lbnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCT0dVU19DT01NRU5UX1NUQVRFXSA9IGZ1bmN0aW9uIGJvZ3VzQ29tbWVudFN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLl9jcmVhdGVDb21tZW50VG9rZW4oKTtcclxuXHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBjcCA9PT0gJC5OVUxMID8gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIgOiB0b0NoYXIoY3ApO1xyXG4gICAgICAgICAgICBjcCA9IHRoaXMuX2NvbnN1bWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ1IE1hcmt1cCBkZWNsYXJhdGlvbiBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gbWFya3VwRGVjbGFyYXRpb25PcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmICh0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuREFTSF9EQVNIX1NUUklORywgY3AsIHRydWUpKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBUlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkRPQ1RZUEVfU1RSSU5HLCBjcCwgZmFsc2UpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuYWxsb3dDREFUQSAmJiB0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuQ0RBVEFfU1RBUlRfU1RSSU5HLCBjcCwgdHJ1ZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENEQVRBX1NFQ1RJT05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy9OT1RFOiBjYWxsIGJvZ3VzIGNvbW1lbnQgc3RhdGUgZGlyZWN0bHkgd2l0aCBjdXJyZW50IGNvbnN1bWVkIGNoYXJhY3RlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWNvbnN1bXB0aW9uLlxyXG4gICAgICAgIHRoaXNbQk9HVVNfQ09NTUVOVF9TVEFURV0oY3ApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ2IENvbW1lbnQgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ3IENvbW1lbnQgc3RhcnQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfU1RBUlRfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhcnREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40OCBDb21tZW50IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0RBU0hfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDkgQ29tbWVudCBlbmQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUwIENvbW1lbnQgZW5kIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9FTkRfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfQkFOR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTEgQ29tbWVudCBlbmQgYmFuZyBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX0JBTkdfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZEJhbmdTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0RBU0hfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MiBET0NUWVBFIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MyBCZWZvcmUgRE9DVFlQRSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU0IERPQ1RZUEUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLm5hbWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5uYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTUgQWZ0ZXIgRE9DVFlQRSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLlBVQkxJQ19TVFJJTkcsIGNwLCBmYWxzZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLlNZU1RFTV9TVFJJTkcsIGNwLCBmYWxzZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU2IEFmdGVyIERPQ1RZUEUgcHVibGljIGtleXdvcmQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZVB1YmxpY0tleXdvcmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTcgQmVmb3JlIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTggRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVB1YmxpY0lkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41OSBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlUHVibGljSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjAgQWZ0ZXIgRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlUHVibGljSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42MSBCZXR3ZWVuIERPQ1RZUEUgcHVibGljIGFuZCBzeXN0ZW0gaWRlbnRpZmllcnMgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNfU1RBVEVdID0gZnVuY3Rpb24gYmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVyc1N0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjIgQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0ga2V5d29yZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlU3lzdGVtS2V5d29yZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42MyBCZWZvcmUgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NCBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIChkb3VibGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3lzdGVtSWRlbnRpZmllckRvdWJsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjY1IERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgKHNpbmdsZS1xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU2luZ2xlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NiBBZnRlciBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NyBCb2d1cyBET0NUWVBFIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQk9HVVNfRE9DVFlQRV9TVEFURV0gPSBmdW5jdGlvbiBib2d1c0RvY3R5cGVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjY4IENEQVRBIHNlY3Rpb24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDREFUQV9TRUNUSU9OX1NUQVRFXSA9IGZ1bmN0aW9uIGNkYXRhU2VjdGlvblN0YXRlKGNwKSB7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuQ0RBVEFfRU5EX1NUUklORywgY3AsIHRydWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgICAgICAgICAgY3AgPSB0aGlzLl9jb25zdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL05vZGUgY29uc3RydWN0aW9uXHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiAnI2RvY3VtZW50JyxcclxuICAgICAgICBxdWlya3NNb2RlOiBmYWxzZSxcclxuICAgICAgICBjaGlsZE5vZGVzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnQtZnJhZ21lbnQnLFxyXG4gICAgICAgIHF1aXJrc01vZGU6IGZhbHNlLFxyXG4gICAgICAgIGNoaWxkTm9kZXM6IFtdXHJcbiAgICB9O1xyXG59O1xyXG5cclxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgdGFnTmFtZTogdGFnTmFtZSxcclxuICAgICAgICBhdHRyczogYXR0cnMsXHJcbiAgICAgICAgbmFtZXNwYWNlVVJJOiBuYW1lc3BhY2VVUkksXHJcbiAgICAgICAgY2hpbGROb2RlczogW10sXHJcbiAgICAgICAgcGFyZW50Tm9kZTogbnVsbFxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBub2RlTmFtZTogJyNjb21tZW50JyxcclxuICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH07XHJcbn07XHJcblxyXG52YXIgY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjdGV4dCcsXHJcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vL1RyZWUgbXV0YXRpb25cclxuZXhwb3J0cy5zZXREb2N1bWVudFR5cGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xyXG4gICAgdmFyIGRvY3R5cGVOb2RlID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGROb2Rlc1tpXS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnKSB7XHJcbiAgICAgICAgICAgIGRvY3R5cGVOb2RlID0gZG9jdW1lbnQuY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb2N0eXBlTm9kZSkge1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLnB1YmxpY0lkID0gcHVibGljSWQ7XHJcbiAgICAgICAgZG9jdHlwZU5vZGUuc3lzdGVtSWQgPSBzeXN0ZW1JZDtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBhcHBlbmRDaGlsZChkb2N1bWVudCwge1xyXG4gICAgICAgICAgICBub2RlTmFtZTogJyNkb2N1bWVudFR5cGUnLFxyXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICBwdWJsaWNJZDogcHVibGljSWQsXHJcbiAgICAgICAgICAgIHN5c3RlbUlkOiBzeXN0ZW1JZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5zZXRRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XHJcbiAgICBkb2N1bWVudC5xdWlya3NNb2RlID0gdHJ1ZTtcclxufTtcclxuXHJcbmV4cG9ydHMuaXNRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzTW9kZTtcclxufTtcclxuXHJcbnZhciBhcHBlbmRDaGlsZCA9IGV4cG9ydHMuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnB1c2gobmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG59O1xyXG5cclxudmFyIGluc2VydEJlZm9yZSA9IGV4cG9ydHMuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcclxuICAgIHZhciBpbnNlcnRpb25JZHggPSBwYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihyZWZlcmVuY2VOb2RlKTtcclxuXHJcbiAgICBwYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5kZXRhY2hOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICB2YXIgaWR4ID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcclxuXHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlID0gbnVsbDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dCA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0KSB7XHJcbiAgICBpZiAocGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBwcmV2Tm9kZSA9IHBhcmVudE5vZGUuY2hpbGROb2Rlc1twYXJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIGlmIChwcmV2Tm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jykge1xyXG4gICAgICAgICAgICBwcmV2Tm9kZS52YWx1ZSArPSB0ZXh0O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFwcGVuZENoaWxkKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpKTtcclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0LCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2YocmVmZXJlbmNlTm9kZSkgLSAxXTtcclxuXHJcbiAgICBpZiAocHJldk5vZGUgJiYgcHJldk5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCcpXHJcbiAgICAgICAgcHJldk5vZGUudmFsdWUgKz0gdGV4dDtcclxuICAgIGVsc2VcclxuICAgICAgICBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgY3JlYXRlVGV4dE5vZGUodGV4dCksIHJlZmVyZW5jZU5vZGUpO1xyXG59O1xyXG5cclxuZXhwb3J0cy5hZG9wdEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAocmVjaXBpZW50Tm9kZSwgYXR0cnMpIHtcclxuICAgIHZhciByZWNpcGllbnRBdHRyc01hcCA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjaXBpZW50Tm9kZS5hdHRycy5sZW5ndGg7IGkrKylcclxuICAgICAgICByZWNpcGllbnRBdHRyc01hcC5wdXNoKHJlY2lwaWVudE5vZGUuYXR0cnNbaV0ubmFtZSk7XHJcblxyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmIChyZWNpcGllbnRBdHRyc01hcC5pbmRleE9mKGF0dHJzW2pdLm5hbWUpID09PSAtMSlcclxuICAgICAgICAgICAgcmVjaXBpZW50Tm9kZS5hdHRycy5wdXNoKGF0dHJzW2pdKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vL1RyZWUgdHJhdmVyc2luZ1xyXG5leHBvcnRzLmdldEZpcnN0Q2hpbGQgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlc1swXTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0Q2hpbGROb2RlcyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldEF0dHJMaXN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLmF0dHJzO1xyXG59O1xyXG5cclxuLy9Ob2RlIGRhdGFcclxuZXhwb3J0cy5nZXRUYWdOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBlbGVtZW50LnRhZ05hbWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldE5hbWVzcGFjZVVSSSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lc3BhY2VVUkk7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldFRleHROb2RlQ29udGVudCA9IGZ1bmN0aW9uICh0ZXh0Tm9kZSkge1xyXG4gICAgcmV0dXJuIHRleHROb2RlLnZhbHVlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRDb21tZW50Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAoY29tbWVudE5vZGUpIHtcclxuICAgIHJldHVybiBjb21tZW50Tm9kZS5kYXRhO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlTmFtZSA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlLm5hbWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlLnB1YmxpY0lkO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZS5zeXN0ZW1JZDtcclxufTtcclxuXHJcbi8vTm9kZSB0eXBlc1xyXG5leHBvcnRzLmlzVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjY29tbWVudCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzRG9jdW1lbnRUeXBlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0VsZW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiAhIW5vZGUudGFnTmFtZTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyk7XG5cbi8vQ29udmVyc2lvbiB0YWJsZXMgZm9yIERPTSBMZXZlbDEgc3RydWN0dXJlIGVtdWxhdGlvblxudmFyIG5vZGVUeXBlcyA9IHtcbiAgICBlbGVtZW50OiAxLFxuICAgIHRleHQ6IDMsXG4gICAgY2RhdGE6IDQsXG4gICAgY29tbWVudDogOFxufTtcblxudmFyIG5vZGVQcm9wZXJ0eVNob3J0aGFuZHMgPSB7XG4gICAgdGFnTmFtZTogJ25hbWUnLFxuICAgIGNoaWxkTm9kZXM6ICdjaGlsZHJlbicsXG4gICAgcGFyZW50Tm9kZTogJ3BhcmVudCcsXG4gICAgcHJldmlvdXNTaWJsaW5nOiAncHJldicsXG4gICAgbmV4dFNpYmxpbmc6ICduZXh0JyxcbiAgICBub2RlVmFsdWU6ICdkYXRhJ1xufTtcblxuLy9Ob2RlXG52YXIgTm9kZSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxufTtcblxuTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgIHJldHVybiBjaGlsZHJlbiAmJiBjaGlsZHJlblswXSB8fCBudWxsO1xuICAgIH0sXG5cbiAgICBnZXQgbGFzdENoaWxkKCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0gfHwgbnVsbDtcbiAgICB9LFxuXG4gICAgZ2V0IG5vZGVUeXBlKCkge1xuICAgICAgICByZXR1cm4gbm9kZVR5cGVzW3RoaXMudHlwZV0gfHwgbm9kZVR5cGVzLmVsZW1lbnQ7XG4gICAgfVxufTtcblxuT2JqZWN0LmtleXMobm9kZVByb3BlcnR5U2hvcnRoYW5kcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHNob3J0aGFuZCA9IG5vZGVQcm9wZXJ0eVNob3J0aGFuZHNba2V5XTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwga2V5LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbc2hvcnRoYW5kXSB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXNbc2hvcnRoYW5kXSA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuXG5cbi8vTm9kZSBjb25zdHJ1Y3Rpb25cbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnQgPVxuZXhwb3J0cy5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6ICdyb290JyxcbiAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH0pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcbiAgICB2YXIgYXR0cmlicyA9IHt9LFxuICAgICAgICBhdHRyaWJzTmFtZXNwYWNlID0ge30sXG4gICAgICAgIGF0dHJpYnNQcmVmaXggPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGF0dHJOYW1lID0gYXR0cnNbaV0ubmFtZTtcblxuICAgICAgICBhdHRyaWJzW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xuICAgICAgICBhdHRyaWJzTmFtZXNwYWNlW2F0dHJOYW1lXSA9IGF0dHJzW2ldLm5hbWVzcGFjZTtcbiAgICAgICAgYXR0cmlic1ByZWZpeFthdHRyTmFtZV0gPSBhdHRyc1tpXS5wcmVmaXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBOb2RlKHtcbiAgICAgICAgdHlwZTogdGFnTmFtZSA9PT0gJ3NjcmlwdCcgfHwgdGFnTmFtZSA9PT0gJ3N0eWxlJyA/IHRhZ05hbWUgOiAndGFnJyxcbiAgICAgICAgbmFtZTogdGFnTmFtZSxcbiAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2VVUkksXG4gICAgICAgIGF0dHJpYnM6IGF0dHJpYnMsXG4gICAgICAgICd4LWF0dHJpYnNOYW1lc3BhY2UnOiBhdHRyaWJzTmFtZXNwYWNlLFxuICAgICAgICAneC1hdHRyaWJzUHJlZml4JzogYXR0cmlic1ByZWZpeCxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICB9KTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICBwcmV2OiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgfSk7XG59O1xuXG52YXIgY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIGRhdGE6IHZhbHVlLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICB9KTtcbn07XG5cblxuLy9UcmVlIG11dGF0aW9uXG5leHBvcnRzLnNldERvY3VtZW50VHlwZSA9IGZ1bmN0aW9uIChkb2N1bWVudCwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XG4gICAgdmFyIGRhdGEgPSBEb2N0eXBlLnNlcmlhbGl6ZUNvbnRlbnQobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSxcbiAgICAgICAgZG9jdHlwZU5vZGUgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGRyZW5baV0udHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgZG9jdW1lbnQuY2hpbGRyZW5baV0ubmFtZSA9PT0gJyFkb2N0eXBlJykge1xuICAgICAgICAgICAgZG9jdHlwZU5vZGUgPSBkb2N1bWVudC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRvY3R5cGVOb2RlKSB7XG4gICAgICAgIGRvY3R5cGVOb2RlLmRhdGEgPSBkYXRhO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1uYW1lJ10gPSBuYW1lO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1wdWJsaWNJZCddID0gcHVibGljSWQ7XG4gICAgICAgIGRvY3R5cGVOb2RlWyd4LXN5c3RlbUlkJ10gPSBzeXN0ZW1JZDtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQsIG5ldyBOb2RlKHtcbiAgICAgICAgICAgIHR5cGU6ICdkaXJlY3RpdmUnLFxuICAgICAgICAgICAgbmFtZTogJyFkb2N0eXBlJyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAneC1uYW1lJzogbmFtZSxcbiAgICAgICAgICAgICd4LXB1YmxpY0lkJzogcHVibGljSWQsXG4gICAgICAgICAgICAneC1zeXN0ZW1JZCc6IHN5c3RlbUlkXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbn07XG5cbmV4cG9ydHMuc2V0UXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xuICAgIGRvY3VtZW50LnF1aXJrc01vZGUgPSB0cnVlO1xufTtcblxuZXhwb3J0cy5pc1F1aXJrc01vZGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzTW9kZTtcbn07XG5cbnZhciBhcHBlbmRDaGlsZCA9IGV4cG9ydHMuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xuICAgIHZhciBwcmV2ID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgbmV3Tm9kZS5wcmV2ID0gcHJldjtcbiAgICB9XG5cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnB1c2gobmV3Tm9kZSk7XG4gICAgbmV3Tm9kZS5wYXJlbnQgPSBwYXJlbnROb2RlO1xufTtcblxudmFyIGluc2VydEJlZm9yZSA9IGV4cG9ydHMuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICB2YXIgaW5zZXJ0aW9uSWR4ID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5pbmRleE9mKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICBwcmV2ID0gcmVmZXJlbmNlTm9kZS5wcmV2O1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgbmV3Tm9kZS5wcmV2ID0gcHJldjtcbiAgICB9XG5cbiAgICByZWZlcmVuY2VOb2RlLnByZXYgPSBuZXdOb2RlO1xuICAgIG5ld05vZGUubmV4dCA9IHJlZmVyZW5jZU5vZGU7XG5cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld05vZGUpO1xuICAgIG5ld05vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcbn07XG5cbmV4cG9ydHMuZGV0YWNoTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKG5vZGUucGFyZW50KSB7XG4gICAgICAgIHZhciBpZHggPSBub2RlLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKG5vZGUpLFxuICAgICAgICAgICAgcHJldiA9IG5vZGUucHJldixcbiAgICAgICAgICAgIG5leHQgPSBub2RlLm5leHQ7XG5cbiAgICAgICAgbm9kZS5wcmV2ID0gbnVsbDtcbiAgICAgICAgbm9kZS5uZXh0ID0gbnVsbDtcblxuICAgICAgICBpZiAocHJldilcbiAgICAgICAgICAgIHByZXYubmV4dCA9IG5leHQ7XG5cbiAgICAgICAgaWYgKG5leHQpXG4gICAgICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xuXG4gICAgICAgIG5vZGUucGFyZW50LmNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xuICAgICAgICBub2RlLnBhcmVudCA9IG51bGw7XG4gICAgfVxufTtcblxuZXhwb3J0cy5pbnNlcnRUZXh0ID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIHRleHQpIHtcbiAgICB2YXIgbGFzdENoaWxkID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQudHlwZSA9PT0gJ3RleHQnKVxuICAgICAgICBsYXN0Q2hpbGQuZGF0YSArPSB0ZXh0O1xuICAgIGVsc2VcbiAgICAgICAgYXBwZW5kQ2hpbGQocGFyZW50Tm9kZSwgY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xufTtcblxuZXhwb3J0cy5pbnNlcnRUZXh0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIHRleHQsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkcmVuW3BhcmVudE5vZGUuY2hpbGRyZW4uaW5kZXhPZihyZWZlcmVuY2VOb2RlKSAtIDFdO1xuXG4gICAgaWYgKHByZXZOb2RlICYmIHByZXZOb2RlLnR5cGUgPT09ICd0ZXh0JylcbiAgICAgICAgcHJldk5vZGUuZGF0YSArPSB0ZXh0O1xuICAgIGVsc2VcbiAgICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpLCByZWZlcmVuY2VOb2RlKTtcbn07XG5cbmV4cG9ydHMuYWRvcHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHJlY2lwaWVudE5vZGUsIGF0dHJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXR0ck5hbWUgPSBhdHRyc1tpXS5uYW1lO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcmVjaXBpZW50Tm9kZS5hdHRyaWJzW2F0dHJOYW1lXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGUuYXR0cmlic1thdHRyTmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGVbJ3gtYXR0cmlic05hbWVzcGFjZSddW2F0dHJOYW1lXSA9IGF0dHJzW2ldLm5hbWVzcGFjZTtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGVbJ3gtYXR0cmlic1ByZWZpeCddW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnByZWZpeDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLy9UcmVlIHRyYXZlcnNpbmdcbmV4cG9ydHMuZ2V0Rmlyc3RDaGlsZCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW5bMF07XG59O1xuXG5leHBvcnRzLmdldENoaWxkTm9kZXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuO1xufTtcblxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnQ7XG59O1xuXG5leHBvcnRzLmdldEF0dHJMaXN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgYXR0ckxpc3QgPSBbXTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZS5hdHRyaWJzKSB7XG4gICAgICAgIGlmIChub2RlLmF0dHJpYnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIGF0dHJMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG5vZGUuYXR0cmlic1tuYW1lXSxcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5vZGVbJ3gtYXR0cmlic05hbWVzcGFjZSddW25hbWVdLFxuICAgICAgICAgICAgICAgIHByZWZpeDogbm9kZVsneC1hdHRyaWJzUHJlZml4J11bbmFtZV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJMaXN0O1xufTtcblxuXG4vL05vZGUgZGF0YVxuZXhwb3J0cy5nZXRUYWdOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lO1xufTtcblxuZXhwb3J0cy5nZXROYW1lc3BhY2VVUkkgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50Lm5hbWVzcGFjZTtcbn07XG5cbmV4cG9ydHMuZ2V0VGV4dE5vZGVDb250ZW50ID0gZnVuY3Rpb24gKHRleHROb2RlKSB7XG4gICAgcmV0dXJuIHRleHROb2RlLmRhdGE7XG59O1xuXG5leHBvcnRzLmdldENvbW1lbnROb2RlQ29udGVudCA9IGZ1bmN0aW9uIChjb21tZW50Tm9kZSkge1xuICAgIHJldHVybiBjb21tZW50Tm9kZS5kYXRhO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlTmFtZSA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xuICAgIHJldHVybiBkb2N0eXBlTm9kZVsneC1uYW1lJ107XG59O1xuXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xuICAgIHJldHVybiBkb2N0eXBlTm9kZVsneC1wdWJsaWNJZCddO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gZG9jdHlwZU5vZGVbJ3gtc3lzdGVtSWQnXTtcbn07XG5cblxuLy9Ob2RlIHR5cGVzXG5leHBvcnRzLmlzVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09ICd0ZXh0Jztcbn07XG5cbmV4cG9ydHMuaXNDb21tZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2NvbW1lbnQnO1xufTtcblxuZXhwb3J0cy5pc0RvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdkaXJlY3RpdmUnICYmIG5vZGUubmFtZSA9PT0gJyFkb2N0eXBlJztcbn07XG5cbmV4cG9ydHMuaXNFbGVtZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuICEhbm9kZS5hdHRyaWJzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbi8vQ29uc3RcclxudmFyIE5PQUhfQVJLX0NBUEFDSVRZID0gMztcclxuXHJcbi8vTGlzdCBvZiBmb3JtYXR0aW5nIGVsZW1lbnRzXHJcbnZhciBGb3JtYXR0aW5nRWxlbWVudExpc3QgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0cmVlQWRhcHRlcikge1xyXG4gICAgdGhpcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5lbnRyaWVzID0gW107XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XHJcbiAgICB0aGlzLmJvb2ttYXJrID0gbnVsbDtcclxufTtcclxuXHJcbi8vRW50cnkgdHlwZXNcclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWSA9ICdNQVJLRVJfRU5UUlknO1xyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSA9ICdFTEVNRU5UX0VOVFJZJztcclxuXHJcbi8vTm9haCBBcmsncyBjb25kaXRpb25cclxuLy9PUFRJTUlaQVRJT046IGF0IGZpcnN0IHdlIHRyeSB0byBmaW5kIHBvc3NpYmxlIGNhbmRpZGF0ZXMgZm9yIGV4Y2x1c2lvbiB1c2luZ1xyXG4vL2xpZ2h0d2VpZ2h0IGhldXJpc3RpY3Mgd2l0aG91dCB0aG9yb3VnaCBhdHRyaWJ1dGVzIGNoZWNrLlxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLl9nZXROb2FoQXJrQ29uZGl0aW9uQ2FuZGlkYXRlcyA9IGZ1bmN0aW9uIChuZXdFbGVtZW50KSB7XHJcbiAgICB2YXIgY2FuZGlkYXRlcyA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLmxlbmd0aCA+PSBOT0FIX0FSS19DQVBBQ0lUWSkge1xyXG4gICAgICAgIHZhciBuZUF0dHJzTGVuZ3RoID0gdGhpcy50cmVlQWRhcHRlci5nZXRBdHRyTGlzdChuZXdFbGVtZW50KS5sZW5ndGgsXHJcbiAgICAgICAgICAgIG5lVGFnTmFtZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShuZXdFbGVtZW50KSxcclxuICAgICAgICAgICAgbmVOYW1lc3BhY2VVUkkgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShuZXdFbGVtZW50KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZW50cnkuZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QoZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSBuZVRhZ05hbWUgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpID09PSBuZU5hbWVzcGFjZVVSSSAmJlxyXG4gICAgICAgICAgICAgICAgZWxlbWVudEF0dHJzLmxlbmd0aCA9PT0gbmVBdHRyc0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHtpZHg6IGksIGF0dHJzOiBlbGVtZW50QXR0cnN9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FuZGlkYXRlcy5sZW5ndGggPCBOT0FIX0FSS19DQVBBQ0lUWSA/IFtdIDogY2FuZGlkYXRlcztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuX2Vuc3VyZU5vYWhBcmtDb25kaXRpb24gPSBmdW5jdGlvbiAobmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGNhbmRpZGF0ZXMgPSB0aGlzLl9nZXROb2FoQXJrQ29uZGl0aW9uQ2FuZGlkYXRlcyhuZXdFbGVtZW50KSxcclxuICAgICAgICBjTGVuZ3RoID0gY2FuZGlkYXRlcy5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGNMZW5ndGgpIHtcclxuICAgICAgICB2YXIgbmVBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QobmV3RWxlbWVudCksXHJcbiAgICAgICAgICAgIG5lQXR0cnNMZW5ndGggPSBuZUF0dHJzLmxlbmd0aCxcclxuICAgICAgICAgICAgbmVBdHRyc01hcCA9IHt9O1xyXG5cclxuICAgICAgICAvL05PVEU6IGJ1aWxkIGF0dHJzIG1hcCBmb3IgdGhlIG5ldyBlbGVtZW50IHNvIHdlIGNhbiBwZXJmb3JtIGZhc3QgbG9va3Vwc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmVBdHRyc0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuZUF0dHIgPSBuZUF0dHJzW2ldO1xyXG5cclxuICAgICAgICAgICAgbmVBdHRyc01hcFtuZUF0dHIubmFtZV0gPSBuZUF0dHIudmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5lQXR0cnNMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNMZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNBdHRyID0gY2FuZGlkYXRlc1tqXS5hdHRyc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmVBdHRyc01hcFtjQXR0ci5uYW1lXSAhPT0gY0F0dHIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnNwbGljZShqLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBjTGVuZ3RoLS07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoIDwgTk9BSF9BUktfQ0FQQUNJVFkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL05PVEU6IHJlbW92ZSBib3R0b21tb3N0IGNhbmRpZGF0ZXMgdW50aWwgTm9haCdzIEFyayBjb25kaXRpb24gd2lsbCBub3QgYmUgbWV0XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGNMZW5ndGggLSAxOyBpID49IE5PQUhfQVJLX0NBUEFDSVRZIC0gMTsgaS0tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoY2FuZGlkYXRlc1tpXS5pZHgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8vTXV0YXRpb25zXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuaW5zZXJ0TWFya2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe3R5cGU6IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUll9KTtcclxuICAgIHRoaXMubGVuZ3RoKys7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLnB1c2hFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHRva2VuKSB7XHJcbiAgICB0aGlzLl9lbnN1cmVOb2FoQXJrQ29uZGl0aW9uKGVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcclxuICAgICAgICB0eXBlOiBGb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSxcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIHRva2VuOiB0b2tlblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sZW5ndGgrKztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuaW5zZXJ0RWxlbWVudEFmdGVyQm9va21hcmsgPSBmdW5jdGlvbiAoZWxlbWVudCwgdG9rZW4pIHtcclxuICAgIHZhciBib29rbWFya0lkeCA9IHRoaXMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICBmb3IgKDsgYm9va21hcmtJZHggPj0gMDsgYm9va21hcmtJZHgtLSkge1xyXG4gICAgICAgIGlmICh0aGlzLmVudHJpZXNbYm9va21hcmtJZHhdID09PSB0aGlzLmJvb2ttYXJrKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGJvb2ttYXJrSWR4ICsgMSwgMCwge1xyXG4gICAgICAgIHR5cGU6IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZLFxyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgdG9rZW46IHRva2VuXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxlbmd0aCsrO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5yZW1vdmVFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBpZiAodGhpcy5lbnRyaWVzW2ldID09PSBlbnRyeSkge1xyXG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmNsZWFyVG9MYXN0TWFya2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzLnBvcCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG5cclxuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL1NlYXJjaFxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVudHJ5LmVsZW1lbnQpID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gZW50cnk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmdldEVsZW1lbnRFbnRyeSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZICYmIGVudHJ5LmVsZW1lbnQgPT0gZWxlbWVudClcclxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBPcGVuRWxlbWVudFN0YWNrID0gcmVxdWlyZSgnLi9vcGVuX2VsZW1lbnRfc3RhY2snKSxcbiAgICBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTO1xuXG5cbmZ1bmN0aW9uIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIGNsb3NpbmdUb2tlbiwgdHJlZUFkYXB0ZXIpIHtcbiAgICB2YXIgbG9jID0gZWxlbWVudC5fX2xvY2F0aW9uO1xuXG4gICAgaWYgKCFsb2MpXG4gICAgICAgIHJldHVybjtcblxuICAgIGlmICghbG9jLnN0YXJ0VGFnKSB7XG4gICAgICAgIGxvYy5zdGFydFRhZyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBsb2Muc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGxvYy5lbmRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2xvc2luZ1Rva2VuLmxvY2F0aW9uKSB7XG4gICAgICAgIHZhciB0biA9IHRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXG4gICAgICAgICAgICAvLyBOT1RFOiBGb3IgY2FzZXMgbGlrZSA8cD4gPHA+IDwvcD4gLSBGaXJzdCAncCcgY2xvc2VzIHdpdGhvdXQgYSBjbG9zaW5nIHRhZyBhbmRcbiAgICAgICAgICAgIC8vIGZvciBjYXNlcyBsaWtlIDx0ZD4gPHA+IDwvdGQ+IC0gJ3AnIGNsb3NlcyB3aXRob3V0IGEgY2xvc2luZyB0YWdcbiAgICAgICAgICAgIGlzQ2xvc2luZ0VuZFRhZyA9IGNsb3NpbmdUb2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG4gPT09IGNsb3NpbmdUb2tlbi50YWdOYW1lO1xuXG4gICAgICAgIGlmIChpc0Nsb3NpbmdFbmRUYWcpIHtcbiAgICAgICAgICAgIGxvYy5lbmRUYWcgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IGNsb3NpbmdUb2tlbi5sb2NhdGlvbi5zdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IGNsb3NpbmdUb2tlbi5sb2NhdGlvbi5lbmRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsb2MuZW5kID0gY2xvc2luZ1Rva2VuLmxvY2F0aW9uLmVuZDtcbiAgICB9XG59XG5cbi8vTk9URTogcGF0Y2ggb3BlbiBlbGVtZW50cyBzdGFjaywgc28gd2UgY2FuIGFzc2lnbiBlbmQgbG9jYXRpb24gZm9yIHRoZSBlbGVtZW50c1xuZnVuY3Rpb24gcGF0Y2hPcGVuRWxlbWVudHNTdGFjayhzdGFjaywgcGFyc2VyKSB7XG4gICAgdmFyIHRyZWVBZGFwdGVyID0gcGFyc2VyLnRyZWVBZGFwdGVyO1xuXG4gICAgc3RhY2sucG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRFbmRMb2NhdGlvbih0aGlzLmN1cnJlbnQsIHBhcnNlci5jdXJyZW50VG9rZW4sIHRyZWVBZGFwdGVyKTtcbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wLmNhbGwodGhpcyk7XG4gICAgfTtcblxuICAgIHN0YWNrLnBvcEFsbFVwVG9IdG1sRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pXG4gICAgICAgICAgICBzZXRFbmRMb2NhdGlvbih0aGlzLml0ZW1zW2ldLCBwYXJzZXIuY3VycmVudFRva2VuLCB0cmVlQWRhcHRlcik7XG5cbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wQWxsVXBUb0h0bWxFbGVtZW50LmNhbGwodGhpcyk7XG4gICAgfTtcblxuICAgIHN0YWNrLnJlbW92ZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIHBhcnNlci5jdXJyZW50VG9rZW4sIHRyZWVBZGFwdGVyKTtcbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgfTtcbn1cblxuZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiAocGFyc2VyKSB7XG4gICAgLy9OT1RFOiBvYnRhaW4gUGFyc2VyIHByb3RvIHRoaXMgd2F5IHRvIGF2b2lkIG1vZHVsZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgdmFyIHBhcnNlclByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcnNlciksXG4gICAgICAgIHRyZWVBZGFwdGVyID0gcGFyc2VyLnRyZWVBZGFwdGVyO1xuXG5cbiAgICAvL05PVEU6IHBhdGNoIF9yZXNldCBtZXRob2RcbiAgICBwYXJzZXIuX3Jlc2V0ID0gZnVuY3Rpb24gKGh0bWwsIGRvY3VtZW50LCBmcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgcGFyc2VyUHJvdG8uX3Jlc2V0LmNhbGwodGhpcywgaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCk7XG5cbiAgICAgICAgdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XG5cbiAgICAgICAgcGF0Y2hPcGVuRWxlbWVudHNTdGFjayh0aGlzLm9wZW5FbGVtZW50cywgcGFyc2VyKTtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50ID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gdG9rZW47XG4gICAgICAgIHBhcnNlclByb3RvLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50LmNhbGwodGhpcywgdG9rZW4pO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX3Byb2Nlc3NUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgICAgICBwYXJzZXJQcm90by5fcHJvY2Vzc1Rva2VuLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIC8vTk9URTogPGJvZHk+IGFuZCA8aHRtbD4gYXJlIG5ldmVyIHBvcHBlZCBmcm9tIHRoZSBzdGFjaywgc28gd2UgbmVlZCB0byB1cGRhdGVkXG4gICAgICAgIC8vdGhlaXIgZW5kIGxvY2F0aW9uIGV4cGxpY2l0bHkuXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTCB8fFxuICAgICAgICAgICAgKHRva2VuLnRhZ05hbWUgPT09ICQuQk9EWSAmJiB0aGlzLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQk9EWSkpKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0b2tlbi50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIHRva2VuLCB0cmVlQWRhcHRlcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvL0RvY3R5cGVcbiAgICBwYXJzZXIuX3NldERvY3VtZW50VHlwZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICBwYXJzZXJQcm90by5fc2V0RG9jdW1lbnRUeXBlLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciBkb2N1bWVudENoaWxkcmVuID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKHRoaXMuZG9jdW1lbnQpLFxuICAgICAgICAgICAgY25MZW5ndGggPSBkb2N1bWVudENoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNuTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnRDaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy9FbGVtZW50c1xuICAgIHBhcnNlci5fYXR0YWNoRWxlbWVudFRvVHJlZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIC8vTk9URTogX2F0dGFjaEVsZW1lbnRUb1RyZWUgaXMgY2FsbGVkIGZyb20gX2FwcGVuZEVsZW1lbnQsIF9pbnNlcnRFbGVtZW50IGFuZCBfaW5zZXJ0VGVtcGxhdGUgbWV0aG9kcy5cbiAgICAgICAgLy9TbyB3ZSB3aWxsIHVzZSB0b2tlbiBsb2NhdGlvbiBzdG9yZWQgaW4gdGhpcyBtZXRob2RzIGZvciB0aGUgZWxlbWVudC5cbiAgICAgICAgZWxlbWVudC5fX2xvY2F0aW9uID0gdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uIHx8IG51bGw7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IG51bGw7XG4gICAgICAgIHBhcnNlclByb3RvLl9hdHRhY2hFbGVtZW50VG9UcmVlLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgfTtcblxuICAgIHBhcnNlci5fYXBwZW5kRWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kRWxlbWVudC5jYWxsKHRoaXMsIHRva2VuLCBuYW1lc3BhY2VVUkkpO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX2luc2VydEVsZW1lbnQgPSBmdW5jdGlvbiAodG9rZW4sIG5hbWVzcGFjZVVSSSkge1xuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydEVsZW1lbnQuY2FsbCh0aGlzLCB0b2tlbiwgbmFtZXNwYWNlVVJJKTtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydFRlbXBsYXRlLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciB0bXBsQ29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyh0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50KVswXTtcblxuICAgICAgICB0bXBsQ29udGVudC5fX2xvY2F0aW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudC5fX2xvY2F0aW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy9Db21tZW50c1xuICAgIHBhcnNlci5fYXBwZW5kQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAodG9rZW4sIHBhcmVudCkge1xuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kQ29tbWVudE5vZGUuY2FsbCh0aGlzLCB0b2tlbiwgcGFyZW50KTtcblxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcbiAgICAgICAgICAgIGNvbW1lbnROb2RlID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgY29tbWVudE5vZGUuX19sb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgIH07XG5cbiAgICAvL1RleHRcbiAgICBwYXJzZXIuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9OT1RFOiBzdG9yZSBsYXN0IGZvc3RlciBwYXJlbnRpbmcgbG9jYXRpb24sIHNvIHdlIHdpbGwgYmUgYWJsZSB0byBmaW5kIGluc2VydGVkIHRleHRcbiAgICAgICAgLy9pbiBjYXNlIG9mIGZvc3RlciBwYXJlbnRpbmdcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBwYXJzZXJQcm90by5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbjtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRDaGFyYWN0ZXJzLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciBoYXNGb3N0ZXJQYXJlbnQgPSB0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpLFxuICAgICAgICAgICAgcGFyZW50aW5nTG9jYXRpb24gPSB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbixcbiAgICAgICAgICAgIHBhcmVudCA9IChoYXNGb3N0ZXJQYXJlbnQgJiYgcGFyZW50aW5nTG9jYXRpb24ucGFyZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudFRtcGxDb250ZW50IHx8XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50LFxuICAgICAgICAgICAgc2libGluZ3MgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcbiAgICAgICAgICAgIHRleHROb2RlSWR4ID0gaGFzRm9zdGVyUGFyZW50ICYmIHBhcmVudGluZ0xvY2F0aW9uLmJlZm9yZUVsZW1lbnQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5ncy5pbmRleE9mKHBhcmVudGluZ0xvY2F0aW9uLmJlZm9yZUVsZW1lbnQpIC0gMSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmdzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICB0ZXh0Tm9kZSA9IHNpYmxpbmdzW3RleHROb2RlSWR4XTtcblxuICAgICAgICAvL05PVEU6IGlmIHdlIGhhdmUgbG9jYXRpb24gYXNzaWduZWQgYnkgYW5vdGhlciB0b2tlbiwgdGhlbiBqdXN0IHVwZGF0ZSBlbmQgcG9zaXRpb25cbiAgICAgICAgaWYgKHRleHROb2RlLl9fbG9jYXRpb24pXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uLmVuZCA9IHRva2VuLmxvY2F0aW9uLmVuZDtcblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgfTtcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxyXG4gICAgTlMgPSBIVE1MLk5BTUVTUEFDRVM7XHJcblxyXG4vL0VsZW1lbnQgdXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBJbnRlZ2VyIGNvbXBhcmlzb25zIGFyZSBsb3ctY29zdCwgc28gd2UgY2FuIHVzZSB2ZXJ5IGZhc3QgdGFnIG5hbWUgbGVuZ3RoIGZpbHRlcnMgaGVyZS5cclxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXHJcbmZ1bmN0aW9uIGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRuKSB7XHJcbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlA7XHJcblxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlJQIHx8IHRuID09PSAkLlJUIHx8IHRuID09PSAkLkREIHx8IHRuID09PSAkLkRUIHx8IHRuID09PSAkLkxJO1xyXG5cclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5PUFRJT047XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLk9QVEdST1VQO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTY29waW5nRWxlbWVudCh0biwgbnMpIHtcclxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NSSB8fCB0biA9PT0gJC5NTyB8fCB0biA9PSAkLk1OIHx8IHRuID09PSAkLk1TKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRFU0MpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1URVhUKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5USVRMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuU1ZHO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgcmV0dXJuICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKSAmJiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXR1cm4gKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuTUFSUVVFRSkgJiYgbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuRk9SRUlHTl9PQkpFQ1QgJiYgbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLkFOTk9UQVRJT05fWE1MICYmIG5zID09PSBOUy5NQVRITUw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vL1N0YWNrIG9mIG9wZW4gZWxlbWVudHNcclxudmFyIE9wZW5FbGVtZW50U3RhY2sgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb2N1bWVudCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AgPSAtMTtcclxuICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IGRvY3VtZW50O1xyXG4gICAgdGhpcy5jdXJyZW50VGFnTmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRUbXBsQ29udGVudCA9IG51bGw7XHJcbiAgICB0aGlzLnRtcGxDb3VudCA9IDA7XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XHJcbn07XHJcblxyXG4vL0luZGV4IG9mIGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2luZGV4T2YgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IC0xO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlkeCA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpZHg7XHJcbn07XHJcblxyXG4vL1VwZGF0ZSBjdXJyZW50IGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2lzSW5UZW1wbGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KSA9PT0gTlMuSFRNTDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLl91cGRhdGVDdXJyZW50RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuaXRlbXNbdGhpcy5zdGFja1RvcF07XHJcbiAgICB0aGlzLmN1cnJlbnRUYWdOYW1lID0gdGhpcy5jdXJyZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLmN1cnJlbnQpO1xyXG5cclxuICAgIHRoaXMuY3VycmVudFRtcGxDb250ZW50ID0gdGhpcy5faXNJblRlbXBsYXRlKCkgPyB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXModGhpcy5jdXJyZW50KVswXSA6IG51bGw7XHJcbn07XHJcblxyXG4vL011dGF0aW9uc1xyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHRoaXMuaXRlbXNbKyt0aGlzLnN0YWNrVG9wXSA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc0luVGVtcGxhdGUoKSlcclxuICAgICAgICB0aGlzLnRtcGxDb3VudCsrO1xyXG5cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AtLTtcclxuXHJcbiAgICBpZiAodGhpcy50bXBsQ291bnQgPiAwICYmIHRoaXMuX2lzSW5UZW1wbGF0ZSgpKVxyXG4gICAgICAgIHRoaXMudG1wbENvdW50LS07XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiAob2xkRWxlbWVudCwgbmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IHRoaXMuX2luZGV4T2Yob2xkRWxlbWVudCk7XHJcbiAgICB0aGlzLml0ZW1zW2lkeF0gPSBuZXdFbGVtZW50O1xyXG5cclxuICAgIGlmIChpZHggPT09IHRoaXMuc3RhY2tUb3ApXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmluc2VydEFmdGVyID0gZnVuY3Rpb24gKHJlZmVyZW5jZUVsZW1lbnQsIG5ld0VsZW1lbnQpIHtcclxuICAgIHZhciBpbnNlcnRpb25JZHggPSB0aGlzLl9pbmRleE9mKHJlZmVyZW5jZUVsZW1lbnQpICsgMTtcclxuXHJcbiAgICB0aGlzLml0ZW1zLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld0VsZW1lbnQpO1xyXG5cclxuICAgIGlmIChpbnNlcnRpb25JZHggPT0gKyt0aGlzLnN0YWNrVG9wKVxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRhZ05hbWVQb3BwZWQgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWU7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWUsXHJcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsRWxlbWVudFBvcHBlZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHBvcHBlZEVsZW1lbnQgPSB0aGlzLmN1cnJlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmIChwb3BwZWRFbGVtZW50ID09PSBlbGVtZW50KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsTnVtYmVyZWRIZWFkZXJQb3BwZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy5jdXJyZW50VGFnTmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcEFsbFVwVG9IdG1sRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCByb290IDxodG1sPiBlbGVtZW50IGlzIGFsd2F5cyBmaXJzdCBpbiB0aGUgb3BlbiBlbGVtZW50IHN0YWNrLCBzb1xyXG4gICAgLy93ZSBwZXJmb3JtIHRoaXMgZmFzdCBzdGFjayBjbGVhbiB1cC5cclxuICAgIHRoaXMuc3RhY2tUb3AgPSAwO1xyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEFCTEUgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URU1QTEFURSAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRCT0RZICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEZPT1QgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRIRUFEICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEVNUExBVEUgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpIHtcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5UUiAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuSFRNTClcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YWNrVG9wLS07XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8vU2VhcmNoXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLy9Qcm9wZXJseSBuZXN0ZWQgPGJvZHk+IGVsZW1lbnQgKHNob3VsZCBiZSBzZWNvbmQgZWxlbWVudCBpbiBzdGFjaykuXHJcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuaXRlbXNbMV07XHJcbiAgICByZXR1cm4gZWxlbWVudCAmJiB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09ICQuQk9EWSA/IGVsZW1lbnQgOiBudWxsO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGV4T2YoZWxlbWVudCkgPiAtMTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmdldENvbW1vbkFuY2VzdG9yID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHZhciBlbGVtZW50SWR4ID0gdGhpcy5faW5kZXhPZihlbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gLS1lbGVtZW50SWR4ID49IDAgPyB0aGlzLml0ZW1zW2VsZW1lbnRJZHhdIDogbnVsbDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YWNrVG9wID09PSAwICYmIHRoaXMuY3VycmVudFRhZ05hbWUgPT09ICQuSFRNTDtcclxufTtcclxuXHJcbi8vRWxlbWVudCBpbiBzY29wZVxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmIChpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc051bWJlcmVkSGVhZGVySW5TY29wZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGlzU2NvcGluZ0VsZW1lbnQodG4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5MaXN0SXRlbVNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgoKHRuID09PSAkLlVMIHx8IHRuID09PSAkLk9MKSAmJiBucyA9PT0gTlMuSFRNTCkgfHwgaXNTY29waW5nRWxlbWVudCh0biwgbnMpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJbkJ1dHRvblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgodG4gPT09ICQuQlVUVE9OICYmIG5zID09PSBOUy5IVE1MKSB8fCBpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc0luVGFibGVTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAoKHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLkhUTUwpICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVEZPT1QpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKCh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5IVE1MKSAmJiBucyA9PT0gTlMuSFRNTClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5TZWxlY3RTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gIT09ICQuT1BUSU9OICYmIHRuICE9PSAkLk9QVEdST1VQICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vL0ltcGxpZWQgZW5kIHRhZ3NcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlIChpc0ltcGxpZWRFbmRUYWdSZXF1aXJlZCh0aGlzLmN1cnJlbnRUYWdOYW1lKSlcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24gPSBmdW5jdGlvbiAoZXhjbHVzaW9uVGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRoaXMuY3VycmVudFRhZ05hbWUpICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09IGV4Y2x1c2lvblRhZ05hbWUpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxuICAgIE9wZW5FbGVtZW50U3RhY2sgPSByZXF1aXJlKCcuL29wZW5fZWxlbWVudF9zdGFjaycpLFxuICAgIEZvcm1hdHRpbmdFbGVtZW50TGlzdCA9IHJlcXVpcmUoJy4vZm9ybWF0dGluZ19lbGVtZW50X2xpc3QnKSxcbiAgICBMb2NhdGlvbkluZm9NaXhpbiA9IHJlcXVpcmUoJy4vbG9jYXRpb25faW5mb19taXhpbicpLFxuICAgIERlZmF1bHRUcmVlQWRhcHRlciA9IHJlcXVpcmUoJy4uL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxuICAgIERvY3R5cGUgPSByZXF1aXJlKCcuLi9jb21tb24vZG9jdHlwZScpLFxuICAgIEZvcmVpZ25Db250ZW50ID0gcmVxdWlyZSgnLi4vY29tbW9uL2ZvcmVpZ25fY29udGVudCcpLFxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyksXG4gICAgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cbi8vQWxpYXNlc1xudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUyxcbiAgICBBVFRSUyA9IEhUTUwuQVRUUlM7XG5cbi8vRGVmYXVsdCBvcHRpb25zXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGRlY29kZUh0bWxFbnRpdGllczogdHJ1ZSxcbiAgICBsb2NhdGlvbkluZm86IGZhbHNlXG59O1xuXG4vL01pc2MgY29uc3RhbnRzXG52YXIgU0VBUkNIQUJMRV9JTkRFWF9ERUZBVUxUX1BST01QVCA9ICdUaGlzIGlzIGEgc2VhcmNoYWJsZSBpbmRleC4gRW50ZXIgc2VhcmNoIGtleXdvcmRzOiAnLFxuICAgIFNFQVJDSEFCTEVfSU5ERVhfSU5QVVRfTkFNRSA9ICdpc2luZGV4JyxcbiAgICBISURERU5fSU5QVVRfVFlQRSA9ICdoaWRkZW4nO1xuXG4vL0Fkb3B0aW9uIGFnZW5jeSBsb29wcyBpdGVyYXRpb24gY291bnRcbnZhciBBQV9PVVRFUl9MT09QX0lURVIgPSA4LFxuICAgIEFBX0lOTkVSX0xPT1BfSVRFUiA9IDM7XG5cbi8vSW5zZXJ0aW9uIG1vZGVzXG52YXIgSU5JVElBTF9NT0RFID0gJ0lOSVRJQUxfTU9ERScsXG4gICAgQkVGT1JFX0hUTUxfTU9ERSA9ICdCRUZPUkVfSFRNTF9NT0RFJyxcbiAgICBCRUZPUkVfSEVBRF9NT0RFID0gJ0JFRk9SRV9IRUFEX01PREUnLFxuICAgIElOX0hFQURfTU9ERSA9ICdJTl9IRUFEX01PREUnLFxuICAgIEFGVEVSX0hFQURfTU9ERSA9ICdBRlRFUl9IRUFEX01PREUnLFxuICAgIElOX0JPRFlfTU9ERSA9ICdJTl9CT0RZX01PREUnLFxuICAgIFRFWFRfTU9ERSA9ICdURVhUX01PREUnLFxuICAgIElOX1RBQkxFX01PREUgPSAnSU5fVEFCTEVfTU9ERScsXG4gICAgSU5fVEFCTEVfVEVYVF9NT0RFID0gJ0lOX1RBQkxFX1RFWFRfTU9ERScsXG4gICAgSU5fQ0FQVElPTl9NT0RFID0gJ0lOX0NBUFRJT05fTU9ERScsXG4gICAgSU5fQ09MVU1OX0dST1VQX01PREUgPSAnSU5fQ09MVU1OX0dST1VQX01PREUnLFxuICAgIElOX1RBQkxFX0JPRFlfTU9ERSA9ICdJTl9UQUJMRV9CT0RZX01PREUnLFxuICAgIElOX1JPV19NT0RFID0gJ0lOX1JPV19NT0RFJyxcbiAgICBJTl9DRUxMX01PREUgPSAnSU5fQ0VMTF9NT0RFJyxcbiAgICBJTl9TRUxFQ1RfTU9ERSA9ICdJTl9TRUxFQ1RfTU9ERScsXG4gICAgSU5fU0VMRUNUX0lOX1RBQkxFX01PREUgPSAnSU5fU0VMRUNUX0lOX1RBQkxFX01PREUnLFxuICAgIElOX1RFTVBMQVRFX01PREUgPSAnSU5fVEVNUExBVEVfTU9ERScsXG4gICAgQUZURVJfQk9EWV9NT0RFID0gJ0FGVEVSX0JPRFlfTU9ERScsXG4gICAgSU5fRlJBTUVTRVRfTU9ERSA9ICdJTl9GUkFNRVNFVF9NT0RFJyxcbiAgICBBRlRFUl9GUkFNRVNFVF9NT0RFID0gJ0FGVEVSX0ZSQU1FU0VUX01PREUnLFxuICAgIEFGVEVSX0FGVEVSX0JPRFlfTU9ERSA9ICdBRlRFUl9BRlRFUl9CT0RZX01PREUnLFxuICAgIEFGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREUgPSAnQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERSc7XG5cbi8vSW5zZXJ0aW9uIG1vZGUgcmVzZXQgbWFwXG52YXIgSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQID0ge307XG5cbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRSXSA9IElOX1JPV19NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEJPRFldID1cbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRIRUFEXSA9XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5URk9PVF0gPSBJTl9UQUJMRV9CT0RZX01PREU7XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5DQVBUSU9OXSA9IElOX0NBUFRJT05fTU9ERTtcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkNPTEdST1VQXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEFCTEVdID0gSU5fVEFCTEVfTU9ERTtcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkJPRFldID0gSU5fQk9EWV9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuRlJBTUVTRVRdID0gSU5fRlJBTUVTRVRfTU9ERTtcblxuLy9UZW1wbGF0ZSBpbnNlcnRpb24gbW9kZSBzd2l0Y2ggbWFwXG52YXIgVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUCA9IHt9O1xuXG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ0FQVElPTl0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLkNPTEdST1VQXSA9XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVEJPRFldID1cblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5URk9PVF0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIRUFEXSA9IElOX1RBQkxFX01PREU7XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ09MXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRSXSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5URF0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIXSA9IElOX1JPV19NT0RFO1xuXG4vL1Rva2VuIGhhbmRsZXJzIG1hcCBmb3IgaW5zZXJ0aW9uIG1vZGVzXG52YXIgXyA9IHt9O1xuXG5fW0lOSVRJQUxfTU9ERV0gPSB7fTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuSW5Jbml0aWFsTW9kZTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBkb2N0eXBlSW5Jbml0aWFsTW9kZTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID1cbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuSW5Jbml0aWFsTW9kZTtcblxuX1tCRUZPUkVfSFRNTF9NT0RFXSA9IHt9O1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUh0bWw7XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdCZWZvcmVIdG1sO1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdCZWZvcmVIdG1sO1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSHRtbDtcblxuX1tCRUZPUkVfSEVBRF9NT0RFXSA9IHt9O1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUhlYWQ7XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdCZWZvcmVIZWFkO1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdCZWZvcmVIZWFkO1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSGVhZDtcblxuX1tJTl9IRUFEX01PREVdID0ge307XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluSGVhZDtcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkhlYWQ7XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5IZWFkO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gdG9rZW5JbkhlYWQ7XG5cbl9bQUZURVJfSEVBRF9NT0RFXSA9IHt9O1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckhlYWQ7XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJIZWFkO1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0FmdGVySGVhZDtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQWZ0ZXJIZWFkO1xuXG5fW0lOX0JPRFlfTU9ERV0gPSB7fTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5Cb2R5O1xuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQm9keTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tURVhUX01PREVdID0ge307XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tURVhUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxuX1tURVhUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tURVhUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID1cbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tURVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luVGV4dDtcbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluVGV4dDtcblxuX1tJTl9UQUJMRV9NT0RFXSA9IHt9O1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5UYWJsZTtcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRhYmxlO1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblRhYmxlO1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9UQUJMRV9URVhUX01PREVdID0ge307XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlVGV4dDtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJblRhYmxlVGV4dDtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPVxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPVxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSB0b2tlbkluVGFibGVUZXh0O1xuXG5fW0lOX0NBUFRJT05fTU9ERV0gPSB7fTtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5DYXB0aW9uO1xuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQ2FwdGlvbjtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV0gPSB7fTtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluQ29sdW1uR3JvdXA7XG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkNvbHVtbkdyb3VwO1xuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Db2x1bW5Hcm91cDtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xuXG5fW0lOX1RBQkxFX0JPRFlfTU9ERV0gPSB7fTtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluVGFibGU7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5UYWJsZUJvZHk7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5UYWJsZUJvZHk7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fUk9XX01PREVdID0ge307XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlO1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luUm93O1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Sb3c7XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9DRUxMX01PREVdID0ge307XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luQ2VsbDtcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJbkNlbGw7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fU0VMRUNUX01PREVdID0ge307XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblNlbGVjdDtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luU2VsZWN0O1xuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdID0ge307XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblNlbGVjdEluVGFibGU7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblNlbGVjdEluVGFibGU7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9URU1QTEFURV9NT0RFXSA9IHt9O1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRlbXBsYXRlO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblRlbXBsYXRlO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluVGVtcGxhdGU7XG5cbl9bQUZURVJfQk9EWV9NT0RFXSA9IHt9O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdBZnRlckJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQWZ0ZXJCb2R5O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bSU5fRlJBTUVTRVRfTU9ERV0gPSB7fTtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luRnJhbWVzZXQ7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luRnJhbWVzZXQ7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bQUZURVJfRlJBTUVTRVRfTU9ERV0gPSB7fTtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0FmdGVyRnJhbWVzZXQ7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0FmdGVyRnJhbWVzZXQ7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXSA9IHt9O1xuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50VG9Eb2N1bWVudDtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJBZnRlckJvZHk7XG5fW0FGVEVSX0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHN0b3BQYXJzaW5nO1xuXG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdID0ge307XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQ7XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJBZnRlckZyYW1lc2V0O1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBzdG9wUGFyc2luZztcblxuLy9TZWFyY2hhYmxlIGluZGV4IGJ1aWxkaW5nIHV0aWxzICg8aXNpbmRleD4gdGFnKVxuZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUluZGV4Rm9ybUF0dHJzKGlzaW5kZXhTdGFydFRhZ1Rva2VuKSB7XG4gICAgdmFyIGluZGV4QWN0aW9uID0gVG9rZW5pemVyLmdldFRva2VuQXR0cihpc2luZGV4U3RhcnRUYWdUb2tlbiwgQVRUUlMuQUNUSU9OKSxcbiAgICAgICAgYXR0cnMgPSBbXTtcblxuICAgIGlmIChpbmRleEFjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBhdHRycy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IEFUVFJTLkFDVElPTixcbiAgICAgICAgICAgIHZhbHVlOiBpbmRleEFjdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleExhYmVsVGV4dChpc2luZGV4U3RhcnRUYWdUb2tlbikge1xuICAgIHZhciBpbmRleFByb21wdCA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIoaXNpbmRleFN0YXJ0VGFnVG9rZW4sIEFUVFJTLlBST01QVCk7XG5cbiAgICByZXR1cm4gaW5kZXhQcm9tcHQgPT09IG51bGwgPyBTRUFSQ0hBQkxFX0lOREVYX0RFRkFVTFRfUFJPTVBUIDogaW5kZXhQcm9tcHQ7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleElucHV0QXR0cnMoaXNpbmRleFN0YXJ0VGFnVG9rZW4pIHtcbiAgICB2YXIgaXNpbmRleEF0dHJzID0gaXNpbmRleFN0YXJ0VGFnVG9rZW4uYXR0cnMsXG4gICAgICAgIGlucHV0QXR0cnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXNpbmRleEF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuYW1lID0gaXNpbmRleEF0dHJzW2ldLm5hbWU7XG5cbiAgICAgICAgaWYgKG5hbWUgIT09IEFUVFJTLk5BTUUgJiYgbmFtZSAhPT0gQVRUUlMuQUNUSU9OICYmIG5hbWUgIT09IEFUVFJTLlBST01QVClcbiAgICAgICAgICAgIGlucHV0QXR0cnMucHVzaChpc2luZGV4QXR0cnNbaV0pO1xuICAgIH1cblxuICAgIGlucHV0QXR0cnMucHVzaCh7XG4gICAgICAgIG5hbWU6IEFUVFJTLk5BTUUsXG4gICAgICAgIHZhbHVlOiBTRUFSQ0hBQkxFX0lOREVYX0lOUFVUX05BTUVcbiAgICB9KTtcblxuICAgIHJldHVybiBpbnB1dEF0dHJzO1xufVxuXG4vL1BhcnNlclxudmFyIFBhcnNlciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRyZWVBZGFwdGVyLCBvcHRpb25zKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyIHx8IERlZmF1bHRUcmVlQWRhcHRlcjtcbiAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5tZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbiAgICB0aGlzLnNjcmlwdEhhbmRsZXIgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pXG4gICAgICAgIExvY2F0aW9uSW5mb01peGluLmFzc2lnbih0aGlzKTtcbn07XG5cbi8vQVBJXG5QYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50KCk7XG5cbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudCwgbnVsbCk7XG4gICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcblxuICAgIHJldHVybiBkb2N1bWVudDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUucGFyc2VGcmFnbWVudCA9IGZ1bmN0aW9uIChodG1sLCBmcmFnbWVudENvbnRleHQpIHtcbiAgICAvL05PVEU6IHVzZSA8dGVtcGxhdGU+IGVsZW1lbnQgYXMgYSBmcmFnbWVudCBjb250ZXh0IGlmIGNvbnRleHQgZWxlbWVudCB3YXMgbm90IHByb3ZpZGVkLFxuICAgIC8vc28gd2Ugd2lsbCBwYXJzZSBpbiBcImZvcmdpdmluZ1wiIG1hbm5lclxuICAgIGlmICghZnJhZ21lbnRDb250ZXh0KVxuICAgICAgICBmcmFnbWVudENvbnRleHQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJC5URU1QTEFURSwgTlMuSFRNTCwgW10pO1xuXG4gICAgLy9OT1RFOiBjcmVhdGUgZmFrZSBlbGVtZW50IHdoaWNoIHdpbGwgYmUgdXNlZCBhcyAnZG9jdW1lbnQnIGZvciBmcmFnbWVudCBwYXJzaW5nLlxuICAgIC8vVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGpzZG9tIHRoZXJlICdkb2N1bWVudCcgY2FuJ3QgYmUgcmVjcmVhdGVkLCB0aGVyZWZvcmVcbiAgICAvL2ZyYWdtZW50IHBhcnNpbmcgY2F1c2VzIG1lc3Npbmcgb2YgdGhlIG1haW4gYGRvY3VtZW50YC5cbiAgICB2YXIgZG9jdW1lbnRNb2NrID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KCdkb2N1bWVudG1vY2snLCBOUy5IVE1MLCBbXSk7XG5cbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudE1vY2ssIGZyYWdtZW50Q29udGV4dCk7XG5cbiAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGZyYWdtZW50Q29udGV4dCkgPT09ICQuVEVNUExBVEUpXG4gICAgICAgIHRoaXMuX3B1c2hUbXBsSW5zZXJ0aW9uTW9kZShJTl9URU1QTEFURV9NT0RFKTtcblxuICAgIHRoaXMuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcoKTtcbiAgICB0aGlzLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQoKTtcbiAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICB0aGlzLl9maW5kRm9ybUluRnJhZ21lbnRDb250ZXh0KCk7XG4gICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcblxuICAgIHZhciByb290RWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Rmlyc3RDaGlsZChkb2N1bWVudE1vY2spLFxuICAgICAgICBmcmFnbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgdGhpcy5fYWRvcHROb2Rlcyhyb290RWxlbWVudCwgZnJhZ21lbnQpO1xuXG4gICAgcmV0dXJuIGZyYWdtZW50O1xufTtcblxuLy9SZXNldCBzdGF0ZVxuUGFyc2VyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCkge1xuICAgIHRoaXMudG9rZW5pemVyID0gbmV3IFRva2VuaXplcihodG1sLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgdGhpcy5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTklUSUFMX01PREU7XG4gICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSAnJztcblxuICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IGZyYWdtZW50Q29udGV4dDtcblxuICAgIHRoaXMuaGVhZEVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuZm9ybUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vcGVuRWxlbWVudHMgPSBuZXcgT3BlbkVsZW1lbnRTdGFjayh0aGlzLmRvY3VtZW50LCB0aGlzLnRyZWVBZGFwdGVyKTtcbiAgICB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IG5ldyBGb3JtYXR0aW5nRWxlbWVudExpc3QodGhpcy50cmVlQWRhcHRlcik7XG5cbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sgPSBbXTtcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IG51bGw7XG5cbiAgICB0aGlzLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICB0aGlzLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSBmYWxzZTtcbn07XG5cbi8vUGFyc2luZyBsb29wXG5QYXJzZXIucHJvdG90eXBlLl9pdGVyYXRlUGFyc2luZ0xvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUoKTtcblxuICAgIHZhciB0b2tlbiA9IHRoaXMudG9rZW5pemVyLmdldE5leHRUb2tlbigpO1xuXG4gICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAmJiB0b2tlbi5jaGFyc1swXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGlmICh0b2tlbi5jaGFycy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB0b2tlbi5jaGFycyA9IHRva2VuLmNoYXJzLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSlcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9ydW5QYXJzaW5nTG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICB3aGlsZSAoIXRoaXMuc3RvcHBlZClcbiAgICAgICAgdGhpcy5faXRlcmF0ZVBhcnNpbmdMb29wKCk7XG59O1xuXG4vL1RleHQgcGFyc2luZ1xuUGFyc2VyLnByb3RvdHlwZS5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50KCk7XG5cbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gY3VycmVudCAmJiBjdXJyZW50ICE9PSB0aGlzLmRvY3VtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpICE9PSBOUy5IVE1MICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3N3aXRjaFRvVGV4dFBhcnNpbmcgPSBmdW5jdGlvbiAoY3VycmVudFRva2VuLCBuZXh0VG9rZW5pemVyU3RhdGUpIHtcbiAgICB0aGlzLl9pbnNlcnRFbGVtZW50KGN1cnJlbnRUb2tlbiwgTlMuSFRNTCk7XG4gICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBuZXh0VG9rZW5pemVyU3RhdGU7XG4gICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSB0aGlzLmluc2VydGlvbk1vZGU7XG4gICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gVEVYVF9NT0RFO1xufTtcblxuLy9GcmFnbWVudCBwYXJzaW5nXG5QYXJzZXIucHJvdG90eXBlLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA9PT0gMCAmJiB0aGlzLmZyYWdtZW50Q29udGV4dCA/XG4gICAgICAgICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0IDpcbiAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcblxuICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKSA9PT0gJC5GT1JNKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgICB9IHdoaWxlIChub2RlKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuZnJhZ21lbnRDb250ZXh0KTtcblxuICAgIGlmICh0biA9PT0gJC5USVRMRSB8fCB0biA9PT0gJC5URVhUQVJFQSlcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5SQ0RBVEE7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TVFlMRSB8fCB0biA9PT0gJC5YTVAgfHwgdG4gPT09ICQuSUZSQU1FIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuTk9FTUJFRCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5OT1NDUklQVCkge1xuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJBV1RFWFQ7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuUExBSU5URVhUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcbn07XG5cbi8vVHJlZSBtdXRhdGlvblxuUGFyc2VyLnByb3RvdHlwZS5fc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlci5zZXREb2N1bWVudFR5cGUodGhpcy5kb2N1bWVudCwgdG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2F0dGFjaEVsZW1lbnRUb1RyZWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpKVxuICAgICAgICB0aGlzLl9mb3N0ZXJQYXJlbnRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHBhcmVudCwgZWxlbWVudCk7XG4gICAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fYXBwZW5kRWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG5cbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5faW5zZXJ0RWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG5cbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHZhciB0bXBsID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIE5TLkhUTUwsIHRva2VuLmF0dHJzKSxcbiAgICAgICAgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZCh0bXBsLCBjb250ZW50KTtcbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKHRtcGwpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2godG1wbCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJC5IVE1MLCBOUy5IVE1MLCBbXSk7XG5cbiAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQsIGVsZW1lbnQpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9hcHBlbmRDb21tZW50Tm9kZSA9IGZ1bmN0aW9uICh0b2tlbiwgcGFyZW50KSB7XG4gICAgdmFyIGNvbW1lbnROb2RlID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVDb21tZW50Tm9kZSh0b2tlbi5kYXRhKTtcblxuICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBjb21tZW50Tm9kZSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCkpXG4gICAgICAgIHRoaXMuX2Zvc3RlclBhcmVudFRleHQodG9rZW4uY2hhcnMpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQocGFyZW50LCB0b2tlbi5jaGFycyk7XG4gICAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fYWRvcHROb2RlcyA9IGZ1bmN0aW9uIChkb25vciwgcmVjaXBpZW50KSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKGRvbm9yKTtcblxuICAgICAgICBpZiAoIWNoaWxkKVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGNoaWxkKTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChyZWNpcGllbnQsIGNoaWxkKTtcbiAgICB9XG59O1xuXG4vL1Rva2VuIHByb2Nlc3NpbmdcblBhcnNlci5wcm90b3R5cGUuX3Nob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKTtcblxuICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50ID09PSB0aGlzLmRvY3VtZW50KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KTtcblxuICAgIGlmIChucyA9PT0gTlMuSFRNTClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShjdXJyZW50KSA9PT0gJC5BTk5PVEFUSU9OX1hNTCAmJiBucyA9PT0gTlMuTUFUSE1MICYmXG4gICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gJiYgdG9rZW4udGFnTmFtZSA9PT0gJC5TVkcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBpc0NoYXJhY3RlclRva2VuID0gdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4sXG4gICAgICAgIGlzTWF0aE1MVGV4dFN0YXJ0VGFnID0gdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnRhZ05hbWUgIT09ICQuTUdMWVBIICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udGFnTmFtZSAhPT0gJC5NQUxJR05NQVJLO1xuXG4gICAgaWYgKChpc01hdGhNTFRleHRTdGFydFRhZyB8fCBpc0NoYXJhY3RlclRva2VuKSAmJiB0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gfHwgaXNDaGFyYWN0ZXJUb2tlbikgJiYgdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRva2VuLnR5cGUgIT09IFRva2VuaXplci5FT0ZfVE9LRU47XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICBfW3RoaXMuaW5zZXJ0aW9uTW9kZV1bdG9rZW4udHlwZV0odGhpcywgdG9rZW4pO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc1Rva2VuSW5Cb2R5TW9kZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIF9bSU5fQk9EWV9NT0RFXVt0b2tlbi50eXBlXSh0aGlzLCB0b2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50ID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4pXG4gICAgICAgIGNoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOKVxuICAgICAgICBudWxsQ2hhcmFjdGVySW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4pXG4gICAgICAgIGluc2VydENoYXJhY3RlcnModGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4pXG4gICAgICAgIGFwcGVuZENvbW1lbnQodGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTilcbiAgICAgICAgc3RhcnRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxuICAgICAgICBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMgPSBmdW5jdGlvbiAodGFnTmFtZSwgYXR0cnMpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRTdGFydFRhZ1Rva2VuKHRhZ05hbWUpO1xuXG4gICAgZmFrZVRva2VuLmF0dHJzID0gYXR0cnM7XG4gICAgdGhpcy5fcHJvY2Vzc1Rva2VuKGZha2VUb2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzRmFrZVN0YXJ0VGFnID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRTdGFydFRhZ1Rva2VuKHRhZ05hbWUpO1xuXG4gICAgdGhpcy5fcHJvY2Vzc1Rva2VuKGZha2VUb2tlbik7XG4gICAgcmV0dXJuIGZha2VUb2tlbjtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlRW5kVGFnID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRFbmRUYWdUb2tlbih0YWdOYW1lKTtcblxuICAgIHRoaXMuX3Byb2Nlc3NUb2tlbihmYWtlVG9rZW4pO1xuICAgIHJldHVybiBmYWtlVG9rZW47XG59O1xuXG4vL0ludGVncmF0aW9uIHBvaW50c1xuUGFyc2VyLnByb3RvdHlwZS5faXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEZvcmVpZ25Db250ZW50LmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2lzSHRtbEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSxcbiAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSxcbiAgICAgICAgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEZvcmVpZ25Db250ZW50LmlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIG5zLCBhdHRycyk7XG59O1xuXG4vL0FjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIHJlY29uc3RydWN0aW9uXG5QYXJzZXIucHJvdG90eXBlLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGlzdExlbmd0aCA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmxlbmd0aDtcblxuICAgIGlmIChsaXN0TGVuZ3RoKSB7XG4gICAgICAgIHZhciB1bm9wZW5JZHggPSBsaXN0TGVuZ3RoLFxuICAgICAgICAgICAgZW50cnkgPSBudWxsO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHVub3BlbklkeC0tO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5lbnRyaWVzW3Vub3BlbklkeF07XG5cbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZIHx8IHRoaXMub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGVudHJ5LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdW5vcGVuSWR4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHVub3BlbklkeCA+IDApO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSB1bm9wZW5JZHg7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZW50cmllc1tpXTtcbiAgICAgICAgICAgIHRoaXMuX2luc2VydEVsZW1lbnQoZW50cnkudG9rZW4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVudHJ5LmVsZW1lbnQpKTtcbiAgICAgICAgICAgIGVudHJ5LmVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLy9DbG9zZSBlbGVtZW50c1xuUGFyc2VyLnByb3RvdHlwZS5fY2xvc2VUYWJsZUNlbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSlcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5URCk7XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVEgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fY2xvc2VQRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlApO1xufTtcblxuLy9JbnNlcnRpb24gbW9kZXNcblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3AsIGxhc3QgPSBmYWxzZTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgbGFzdCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmZyYWdtZW50Q29udGV4dClcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5mcmFnbWVudENvbnRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXG4gICAgICAgICAgICBuZXdJbnNlcnRpb25Nb2RlID0gSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQW3RuXTtcblxuICAgICAgICBpZiAobmV3SW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gbmV3SW5zZXJ0aW9uTW9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoIWxhc3QgJiYgKHRuID09PSAkLlREIHx8IHRuID09PSAkLlRIKSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fQ0VMTF9NT0RFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICghbGFzdCAmJiB0biA9PT0gJC5IRUFEKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9IRUFEX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVCkge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0KGkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhUTUwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IHRoaXMuaGVhZEVsZW1lbnQgPyBBRlRFUl9IRUFEX01PREUgOiBCRUZPUkVfSEVBRF9NT0RFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChsYXN0KSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZUZvclNlbGVjdCA9IGZ1bmN0aW9uIChzZWxlY3RJZHgpIHtcbiAgICBpZiAoc2VsZWN0SWR4ID4gMCkge1xuICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0SWR4IC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV0sXG4gICAgICAgICAgICAgICAgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoYW5jZXN0b3IpO1xuXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX0lOX1RBQkxFX01PREU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX01PREU7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wdXNoVG1wbEluc2VydGlvbk1vZGUgPSBmdW5jdGlvbiAobW9kZSkge1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wdXNoKG1vZGUpO1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcCsrO1xuICAgIHRoaXMuY3VycmVudFRtcGxJbnNlcnRpb25Nb2RlID0gbW9kZTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3BvcFRtcGxJbnNlcnRpb25Nb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wb3AoKTtcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AtLTtcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1t0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3BdO1xufTtcblxuLy9Gb3N0ZXIgcGFyZW50aW5nXG5QYXJzZXIucHJvdG90eXBlLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KTtcblxuICAgIHJldHVybiB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCAmJiB0aGlzLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcodGhpcy5vcGVuRWxlbWVudHMuY3VycmVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxvY2F0aW9uID0ge1xuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIGJlZm9yZUVsZW1lbnQ6IG51bGxcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgb3BlbkVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXSxcbiAgICAgICAgICAgIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG9wZW5FbGVtZW50KSxcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkob3BlbkVsZW1lbnQpO1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKG9wZW5FbGVtZW50KVswXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShvcGVuRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhdGlvbi5wYXJlbnQpXG4gICAgICAgICAgICAgICAgbG9jYXRpb24uYmVmb3JlRWxlbWVudCA9IG9wZW5FbGVtZW50O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2kgLSAxXTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWxvY2F0aW9uLnBhcmVudClcbiAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbMF07XG5cbiAgICByZXR1cm4gbG9jYXRpb247XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9mb3N0ZXJQYXJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKTtcblxuICAgIGlmIChsb2NhdGlvbi5iZWZvcmVFbGVtZW50KVxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGVsZW1lbnQsIGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpO1xuICAgIGVsc2VcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChsb2NhdGlvbi5wYXJlbnQsIGVsZW1lbnQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fZm9zdGVyUGFyZW50VGV4dCA9IGZ1bmN0aW9uIChjaGFycykge1xuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbigpO1xuXG4gICAgaWYgKGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGNoYXJzLCBsb2NhdGlvbi5iZWZvcmVFbGVtZW50KTtcbiAgICBlbHNlXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dChsb2NhdGlvbi5wYXJlbnQsIGNoYXJzKTtcbn07XG5cbi8vU3BlY2lhbCBlbGVtZW50c1xuUGFyc2VyLnByb3RvdHlwZS5faXNTcGVjaWFsRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEhUTUwuU1BFQ0lBTF9FTEVNRU5UU1tuc11bdG5dO1xufTtcblxuLy9BZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RyZWUtY29uc3RydWN0aW9uLmh0bWwjYWRvcHRpb25BZ2VuY3kpXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vL1N0ZXBzIDUtOCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYU9idGFpbkZvcm1hdHRpbmdFbGVtZW50RW50cnkocCwgdG9rZW4pIHtcbiAgICB2YXIgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSh0b2tlbi50YWdOYW1lKTtcblxuICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgICAgIGlmICghcC5vcGVuRWxlbWVudHMuY29udGFpbnMoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSkge1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgICAgICAgICBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKCFwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRva2VuLnRhZ05hbWUpKVxuICAgICAgICAgICAgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IG51bGw7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIHJldHVybiBmb3JtYXR0aW5nRWxlbWVudEVudHJ5O1xufVxuXG4vL1N0ZXBzIDkgYW5kIDEwIG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgdmFyIGZ1cnRoZXN0QmxvY2sgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGZ1cnRoZXN0QmxvY2sgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIGlmICghZnVydGhlc3RCbG9jaykge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1cnRoZXN0QmxvY2s7XG59XG5cbi8vU3RlcCAxMyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudCkge1xuICAgIHZhciBlbGVtZW50ID0gbnVsbCxcbiAgICAgICAgbGFzdEVsZW1lbnQgPSBmdXJ0aGVzdEJsb2NrLFxuICAgICAgICBuZXh0RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZ1cnRoZXN0QmxvY2spO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBBQV9JTk5FUl9MT09QX0lURVI7IGkrKykge1xuICAgICAgICBlbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG5cbiAgICAgICAgLy9OT1RFOiBzdG9yZSBuZXh0IGVsZW1lbnQgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIChpdCBtYXkgYmUgZGVsZXRlZCBmcm9tIHRoZSBzdGFjayBieSBzdGVwIDkuNSlcbiAgICAgICAgbmV4dEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5nZXRDb21tb25BbmNlc3RvcihlbGVtZW50KTtcblxuICAgICAgICB2YXIgZWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5KGVsZW1lbnQpO1xuXG4gICAgICAgIGlmICghZWxlbWVudEVudHJ5KSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudClcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGVsZW1lbnQgPSBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpO1xuXG4gICAgICAgIGlmIChsYXN0RWxlbWVudCA9PT0gZnVydGhlc3RCbG9jaylcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmJvb2ttYXJrID0gZWxlbWVudEVudHJ5O1xuXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShsYXN0RWxlbWVudCk7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCwgbGFzdEVsZW1lbnQpO1xuICAgICAgICBsYXN0RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RFbGVtZW50O1xufVxuXG4vL1N0ZXAgMTMuNyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpIHtcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50RW50cnkuZWxlbWVudCksXG4gICAgICAgIG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoZWxlbWVudEVudHJ5LnRva2VuLnRhZ05hbWUsIG5zLCBlbGVtZW50RW50cnkudG9rZW4uYXR0cnMpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucmVwbGFjZShlbGVtZW50RW50cnkuZWxlbWVudCwgbmV3RWxlbWVudCk7XG4gICAgZWxlbWVudEVudHJ5LmVsZW1lbnQgPSBuZXdFbGVtZW50O1xuXG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG5cbi8vU3RlcCAxNCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpIHtcbiAgICBpZiAocC5faXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKGNvbW1vbkFuY2VzdG9yKSlcbiAgICAgICAgcC5fZm9zdGVyUGFyZW50RWxlbWVudChsYXN0RWxlbWVudCk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHRuID0gcC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGNvbW1vbkFuY2VzdG9yKSxcbiAgICAgICAgICAgIG5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY29tbW9uQW5jZXN0b3IpO1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTClcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKGNvbW1vbkFuY2VzdG9yKVswXTtcblxuICAgICAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCk7XG4gICAgfVxufVxuXG4vL1N0ZXBzIDE1LTE5IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhUmVwbGFjZUZvcm1hdHRpbmdFbGVtZW50KHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpLFxuICAgICAgICB0b2tlbiA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4sXG4gICAgICAgIG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbnMsIHRva2VuLmF0dHJzKTtcblxuICAgIHAuX2Fkb3B0Tm9kZXMoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG4gICAgcC50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcblxuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydEVsZW1lbnRBZnRlckJvb2ttYXJrKG5ld0VsZW1lbnQsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4pO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgcC5vcGVuRWxlbWVudHMuaW5zZXJ0QWZ0ZXIoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG59XG5cbi8vQWxnb3JpdGhtIGVudHJ5IHBvaW50XG5mdW5jdGlvbiBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEFBX09VVEVSX0xPT1BfSVRFUjsgaSsrKSB7XG4gICAgICAgIHZhciBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gYWFPYnRhaW5Gb3JtYXR0aW5nRWxlbWVudEVudHJ5KHAsIHRva2VuLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcblxuICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50RW50cnkpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB2YXIgZnVydGhlc3RCbG9jayA9IGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcblxuICAgICAgICBpZiAoIWZ1cnRoZXN0QmxvY2spXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5ib29rbWFyayA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XG5cbiAgICAgICAgdmFyIGxhc3RFbGVtZW50ID0gYWFJbm5lckxvb3AocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSxcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC5vcGVuRWxlbWVudHMuZ2V0Q29tbW9uQW5jZXN0b3IoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcblxuICAgICAgICBwLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUobGFzdEVsZW1lbnQpO1xuICAgICAgICBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpO1xuICAgICAgICBhYVJlcGxhY2VGb3JtYXR0aW5nRWxlbWVudChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICB9XG59XG5cblxuLy9HZW5lcmljIHRva2VuIGhhbmRsZXJzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gaWdub3JlVG9rZW4ocCwgdG9rZW4pIHtcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgcC5vcGVuRWxlbWVudHMuY3VycmVudClcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kQ29tbWVudE5vZGUodG9rZW4sIHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5kb2N1bWVudCk7XG59XG5cbmZ1bmN0aW9uIGluc2VydENoYXJhY3RlcnMocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gc3RvcFBhcnNpbmcocCwgdG9rZW4pIHtcbiAgICBwLnN0b3BwZWQgPSB0cnVlO1xufVxuXG4vLzEyLjIuNS40LjEgVGhlIFwiaW5pdGlhbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gZG9jdHlwZUluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcbiAgICBwLl9zZXREb2N1bWVudFR5cGUodG9rZW4pO1xuXG4gICAgaWYgKHRva2VuLmZvcmNlUXVpcmtzIHx8IERvY3R5cGUuaXNRdWlya3ModG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKSlcbiAgICAgICAgcC50cmVlQWRhcHRlci5zZXRRdWlya3NNb2RlKHAuZG9jdW1lbnQpO1xuXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hUTUxfTU9ERTtcbn1cblxuZnVuY3Rpb24gdG9rZW5JbkluaXRpYWxNb2RlKHAsIHRva2VuKSB7XG4gICAgcC50cmVlQWRhcHRlci5zZXRRdWlya3NNb2RlKHAuZG9jdW1lbnQpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IVE1MX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjIgVGhlIFwiYmVmb3JlIGh0bWxcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IRUFEX01PREU7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkJlZm9yZUh0bWwocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdCZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MIHx8IHRuID09PSAkLkhFQUQgfHwgdG4gPT09ICQuQk9EWSB8fCB0biA9PT0gJC5CUilcbiAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RmFrZVJvb3RFbGVtZW50KCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hFQURfTU9ERTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuMyBUaGUgXCJiZWZvcmUgaGVhZFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdCZWZvcmVIZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5IRUFEKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmhlYWRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fSEVBRF9NT0RFO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSEVBRCB8fCB0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkhUTUwgfHwgdG4gPT09ICQuQlIpXG4gICAgICAgIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5IRUFEKTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuNCBUaGUgXCJpbiBoZWFkXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luSGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5CR1NPVU5EIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuQ09NTUFORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVElUTEUpXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJDREFUQSk7XG5cbiAgICAvL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiBpbnRlcmFjdGl2ZSB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBzY3JpcHRpbmcsIHNvIHdlIHBhcnNlXG4gICAgLy88bm9zY3JpcHQ+IGFzIGEgcmF3dGV4dC5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TVFlMRSlcbiAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgIHAuX2luc2VydFRlbXBsYXRlKHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9URU1QTEFURV9NT0RFO1xuICAgICAgICBwLl9wdXNoVG1wbEluc2VydGlvbk1vZGUoSU5fVEVNUExBVEVfTU9ERSk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcbiAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJbkhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhFQUQpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0hFQURfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkJSIHx8IHRuID09PSAkLkhUTUwpXG4gICAgICAgIHRva2VuSW5IZWFkKHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkKCk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgIHAuX3BvcFRtcGxJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JbkhlYWQocCwgdG9rZW4pIHtcbiAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkhFQUQpO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC42IFRoZSBcImFmdGVyIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9GUkFNRVNFVF9NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuQkdTT1VORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TQ1JJUFQgfHwgdG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuVEVNUExBVEUgfHwgdG4gPT09ICQuVElUTEUpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucHVzaChwLmhlYWRFbGVtZW50KTtcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUocC5oZWFkRWxlbWVudCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5CUilcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJPRFkpO1xuICAgIHAuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjcgVGhlIFwiaW4gYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGh0bWxTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPT09IDApXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYWRvcHRBdHRyaWJ1dGVzKHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdLCB0b2tlbi5hdHRycyk7XG59XG5cbmZ1bmN0aW9uIGJvZHlTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG5cbiAgICBpZiAoYm9keUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmFkb3B0QXR0cmlidXRlcyhib2R5RWxlbWVudCwgdG9rZW4uYXR0cnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZnJhbWVzZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG5cbiAgICBpZiAocC5mcmFtZXNldE9rICYmIGJvZHlFbGVtZW50KSB7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShib2R5RWxlbWVudCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcEFsbFVwVG9IdG1sRWxlbWVudCgpO1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fRlJBTUVTRVRfTU9ERTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgdmFyIHRuID0gcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgLy9OT1RFOiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXIgdG9rZW4sIHRoZW4gaWdub3JlIHRoYXQgdG9rZW4gYW5kIG1vdmVcbiAgICAvL29uIHRvIHRoZSBuZXh0IG9uZS4gKE5ld2xpbmVzIGF0IHRoZSBzdGFydCBvZiBwcmUgYmxvY2tzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgaW5UZW1wbGF0ZSA9IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDA7XG5cbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgICAgIGlmICghaW5UZW1wbGF0ZSlcbiAgICAgICAgICAgIHAuZm9ybUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldLFxuICAgICAgICAgICAgdG4gPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKCh0b2tlbi50YWdOYW1lID09PSAkLkxJICYmIHRuID09PSAkLkxJKSB8fFxuICAgICAgICAgICAgKCh0b2tlbi50YWdOYW1lID09PSAkLkREIHx8IHRva2VuLnRhZ05hbWUgPT09ICQuRFQpICYmICh0biA9PT0gJC5ERCB8fCB0biA9PSAkLkRUKSkpIHtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKHRuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRuICE9PSAkLkFERFJFU1MgJiYgdG4gIT09ICQuRElWICYmIHRuICE9PSAkLlAgJiYgcC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUExBSU5URVhUO1xufVxuXG5mdW5jdGlvbiBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQlVUVE9OKSkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkJVVFRPTik7XG4gICAgICAgIGJ1dHRvblN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSgkLkEpO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnRFbnRyeSkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkEpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoYWN0aXZlRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShhY3RpdmVFbGVtZW50RW50cnkpO1xuICAgIH1cblxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaEVsZW1lbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuTk9CUikpIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5OT0JSKTtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICB9XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGFwcGxldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmICghcC50cmVlQWRhcHRlci5pc1F1aXJrc01vZGUocC5kb2N1bWVudCkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xufVxuXG5mdW5jdGlvbiBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcblxuICAgIHZhciBpbnB1dFR5cGUgPSBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHRva2VuLCBBVFRSUy5UWVBFKTtcblxuICAgIGlmICghaW5wdXRUeXBlIHx8IGlucHV0VHlwZS50b0xvd2VyQ2FzZSgpICE9PSBISURERU5fSU5QVVRfVFlQRSlcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG5cbn1cblxuZnVuY3Rpb24gcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBoclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGltYWdlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB0b2tlbi50YWdOYW1lID0gJC5JTUc7XG4gICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gaXNpbmRleFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLmZvcm1FbGVtZW50IHx8IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZ1dpdGhBdHRycygkLkZPUk0sIGdldFNlYXJjaGFibGVJbmRleEZvcm1BdHRycyh0b2tlbikpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuSFIpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuTEFCRUwpO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmluc2VydFRleHQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgZ2V0U2VhcmNoYWJsZUluZGV4TGFiZWxUZXh0KHRva2VuKSk7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMoJC5JTlBVVCwgZ2V0U2VhcmNoYWJsZUluZGV4SW5wdXRBdHRycyh0b2tlbikpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkxBQkVMKTtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkhSKTtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5GT1JNKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRleHRhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAvL05PVEU6IElmIHRoZSBuZXh0IHRva2VuIGlzIGEgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlciB0b2tlbiwgdGhlbiBpZ25vcmUgdGhhdCB0b2tlbiBhbmQgbW92ZVxuICAgIC8vb24gdG8gdGhlIG5leHQgb25lLiAoTmV3bGluZXMgYXQgdGhlIHN0YXJ0IG9mIHRleHRhcmVhIGVsZW1lbnRzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xuICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IFRFWFRfTU9ERTtcbn1cblxuZnVuY3Rpb24geG1wU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xufVxuXG5mdW5jdGlvbiBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xufVxuXG4vL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBwbHVnaW5zLCBzbyB3ZSBwYXJzZVxuLy88bm9lbWJlZD4gYXMgYSByYXd0ZXh0LlxuZnVuY3Rpb24gbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcblxuICAgIGlmIChwLmluc2VydGlvbk1vZGUgPT09IElOX1RBQkxFX01PREUgfHwgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9DQVBUSU9OX01PREUgfHxcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9UQUJMRV9CT0RZX01PREUgfHwgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9ST1dfTU9ERSB8fFxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IElOX0NFTExfTU9ERSkge1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9NT0RFO1xufVxuXG5mdW5jdGlvbiBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuZnVuY3Rpb24gcnBTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuUlVCWSkpXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBtZW51aXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG5cbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlbk1hdGhNTEF0dHJzKHRva2VuKTtcbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcblxuICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZylcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuTUFUSE1MKTtcbiAgICBlbHNlXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLk1BVEhNTCk7XG59XG5cbmZ1bmN0aW9uIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHQXR0cnModG9rZW4pO1xuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xuXG4gICAgaWYgKHRva2VuLnNlbGZDbG9zaW5nKVxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5TVkcpO1xuICAgIGVsc2VcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuU1ZHKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBzdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSSB8fCB0biA9PT0gJC5TIHx8IHRuID09PSAkLkIgfHwgdG4gPT09ICQuVSlcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkEpXG4gICAgICAgICAgICAgICAgYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5ETCB8fCB0biA9PT0gJC5PTCB8fCB0biA9PT0gJC5VTClcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTEkgfHwgdG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXG4gICAgICAgICAgICAgICAgbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNIHx8IHRuID09PSAkLlRUKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhSKVxuICAgICAgICAgICAgICAgIGhyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5SUCB8fCB0biA9PT0gJC5SVClcbiAgICAgICAgICAgICAgICBycFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVFIpXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkRJViB8fCB0biA9PT0gJC5ESVIgfHwgdG4gPT09ICQuTkFWKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlBSRSlcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJJRylcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTUcgfHwgdG4gPT09ICQuV0JSKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlhNUClcbiAgICAgICAgICAgICAgICB4bXBTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNWRylcbiAgICAgICAgICAgICAgICBzdmdTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkNPTClcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgICAgICAgICBodG1sU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5CQVNFIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSlcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJPRFkpXG4gICAgICAgICAgICAgICAgYm9keVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTUFJTiB8fCB0biA9PT0gJC5NRU5VKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZPUk0pXG4gICAgICAgICAgICAgICAgZm9ybVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQ09ERSB8fCB0biA9PT0gJC5GT05UKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PQlIpXG4gICAgICAgICAgICAgICAgbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVJFQSlcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQVRIKVxuICAgICAgICAgICAgICAgIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkhFQUQpXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRJVExFKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVNJREUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU01BTEwpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpXG4gICAgICAgICAgICAgICAgdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNQkVEKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklOUFVUKVxuICAgICAgICAgICAgICAgIGlucHV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QQVJBTSB8fCB0biA9PT0gJC5UUkFDSylcbiAgICAgICAgICAgICAgICBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSU1BR0UpXG4gICAgICAgICAgICAgICAgaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkZSQU1FICYmIHRuICE9PSAkLlRCT0RZICYmIHRuICE9PSAkLlRGT09UICYmIHRuICE9PSAkLlRIRUFEKVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJVVFRPTilcbiAgICAgICAgICAgICAgICBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNUUklLRSB8fCB0biA9PT0gJC5TVFJPTkcpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVBQTEVUIHx8IHRuID09PSAkLk9CSkVDVClcbiAgICAgICAgICAgICAgICBhcHBsZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLktFWUdFTilcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TT1VSQ0UpXG4gICAgICAgICAgICAgICAgcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklGUkFNRSlcbiAgICAgICAgICAgICAgICBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVClcbiAgICAgICAgICAgICAgICBzZWxlY3RTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTilcbiAgICAgICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CR1NPVU5EIHx8IHRuID09PSAkLkNPTU1BTkQpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5ERVRBSUxTIHx8IHRuID09PSAkLkFERFJFU1MgfHwgdG4gPT09ICQuQVJUSUNMRSB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTElTVElORylcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXG4gICAgICAgICAgICAgICAgYXBwbGV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JU0lOREVYKVxuICAgICAgICAgICAgICAgIGlzaW5kZXhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRU1CRUQpXG4gICAgICAgICAgICAgICAgbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ0FQVElPTilcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuTUVOVUlURU0pXG4gICAgICAgICAgICAgICAgbWVudWl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKVxuICAgICAgICAgICAgICAgIGZyYW1lc2V0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GSUVMRFNFVClcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URVhUQVJFQSlcbiAgICAgICAgICAgICAgICB0ZXh0YXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVClcbiAgICAgICAgICAgICAgICBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ09MR1JPVVApXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlBMQUlOVEVYVClcbiAgICAgICAgICAgICAgICBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJMT0NLUVVPVEUgfHwgdG4gPT09ICQuRklHQ0FQVElPTilcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBib2R5RW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5CT0RZKSlcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfQk9EWV9NT0RFO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaHRtbEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkJPRFkpO1xuXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZm9ybUVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCxcbiAgICAgICAgZm9ybUVsZW1lbnQgPSBwLmZvcm1FbGVtZW50O1xuXG4gICAgaWYgKCFpblRlbXBsYXRlKVxuICAgICAgICBwLmZvcm1FbGVtZW50ID0gbnVsbDtcblxuICAgIGlmICgoZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkZPUk0pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcblxuICAgICAgICBpZiAoaW5UZW1wbGF0ZSlcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkZPUk0pO1xuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtRWxlbWVudCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5QKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLlApO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbGlFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5MaXN0SXRlbVNjb3BlKCQuTEkpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuTEkpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5MSSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbnVtYmVyZWRIZWFkZXJFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhcHBsZXRFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG4pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJSKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBmb3IgKHZhciBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICBpZiAocC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0bikge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxFbGVtZW50UG9wcGVkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBlbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgc3dpdGNoICh0bi5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkEgfHwgdG4gPT09ICQuQiB8fCB0biA9PT0gJC5JIHx8IHRuID09PSAkLlMgfHwgdG4gPT0gJC5VKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlApXG4gICAgICAgICAgICAgICAgcEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKHRuID09ICQuREwgfHwgdG4gPT09ICQuVUwgfHwgdG4gPT09ICQuT0wpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkxJKVxuICAgICAgICAgICAgICAgIGxpRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXG4gICAgICAgICAgICAgICAgZGRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlckVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxuICAgICAgICAgICAgICAgIGJyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRU0gfHwgdG4gPT09ICQuVFQpXG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQklHKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRJUiB8fCB0biA9PT0gJC5ESVYgfHwgdG4gPT09ICQuTkFWKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CT0RZKVxuICAgICAgICAgICAgICAgIGJvZHlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICAgICAgICAgIGh0bWxFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GT1JNKVxuICAgICAgICAgICAgICAgIGZvcm1FbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DT0RFIHx8IHRuID09PSAkLkZPTlQgfHwgdG4gPT09ICQuTk9CUilcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQUlOIHx8IHRuID09PSAkLk1FTlUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkFTSURFKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TTUFMTClcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKVxuICAgICAgICAgICAgICAgIGFwcGxldEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09ICQuU1RSSUtFIHx8IHRuID09PSAkLlNUUk9ORylcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5BRERSRVNTIHx8IHRuID09PSAkLkFSVElDTEUgfHwgdG4gPT09ICQuREVUQUlMUyB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXG4gICAgICAgICAgICAgICAgYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRklFTERTRVQpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICAgICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CTE9DS1FVT1RFIHx8IHRuID09PSAkLkZJR0NBUFRJT04pXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdCA6XG4gICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVvZkluQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AgPiAtMSlcbiAgICAgICAgZW9mSW5UZW1wbGF0ZShwLCB0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XG59XG5cbi8vMTIuMi41LjQuOCBUaGUgXCJ0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBlbmRUYWdJblRleHQocCwgdG9rZW4pIHtcbiAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAuc2NyaXB0SGFuZGxlciAmJiB0b2tlbi50YWdOYW1lID09PSAkLlNDUklQVClcbiAgICAgICAgcC5zY3JpcHRIYW5kbGVyKHAuZG9jdW1lbnQsIHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG59XG5cblxuZnVuY3Rpb24gZW9mSW5UZXh0KHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjkgVGhlIFwiaW4gdGFibGVcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNoYXJhY3RlckluVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgY3VyVG4gPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZTtcblxuICAgIGlmIChjdXJUbiA9PT0gJC5UQUJMRSB8fCBjdXJUbiA9PT0gJC5UQk9EWSB8fCBjdXJUbiA9PT0gJC5URk9PVCB8fCBjdXJUbiA9PT0gJC5USEVBRCB8fCBjdXJUbiA9PT0gJC5UUikge1xuICAgICAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICAgICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gZmFsc2U7XG4gICAgICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9URVhUX01PREU7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBjYXB0aW9uU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DQVBUSU9OX01PREU7XG59XG5cbmZ1bmN0aW9uIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DT0xVTU5fR1JPVVBfTU9ERTtcbn1cblxuZnVuY3Rpb24gY29sU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkNPTEdST1VQKTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5mdW5jdGlvbiB0Ym9keVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfQk9EWV9NT0RFO1xufVxuXG5mdW5jdGlvbiB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UQk9EWSk7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UQUJMRSk7XG5cbiAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGlucHV0U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIGlucHV0VHlwZSA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIodG9rZW4sIEFUVFJTLlRZUEUpO1xuXG4gICAgaWYgKGlucHV0VHlwZSAmJiBpbnB1dFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gSElEREVOX0lOUFVUX1RZUEUpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLmZvcm1FbGVtZW50ICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA9PT0gMCkge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5mb3JtRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCB8fCB0biA9PT0gJC5UUilcbiAgICAgICAgICAgICAgICB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQ09MKVxuICAgICAgICAgICAgICAgIGNvbFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRk9STSlcbiAgICAgICAgICAgICAgICBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSlcbiAgICAgICAgICAgICAgICB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNUWUxFKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQpXG4gICAgICAgICAgICAgICAgdGJvZHlTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTlBVVClcbiAgICAgICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DQVBUSU9OKVxuICAgICAgICAgICAgICAgIGNhcHRpb25TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkNPTEdST1VQKVxuICAgICAgICAgICAgICAgIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UQUJMRSkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlRBQkxFKTtcbiAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdG9rZW4uaWdub3JlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwgJiZcbiAgICAgICAgICAgICB0biAhPT0gJC5UQk9EWSAmJiB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5URk9PVCAmJiB0biAhPT0gJC5USCAmJiB0biAhPT0gJC5USEVBRCAmJiB0biAhPT0gJC5UUikge1xuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGUgPSBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQ7XG5cbiAgICBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSB0cnVlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbkluQm9keU1vZGUodG9rZW4pO1xuICAgIHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGU7XG59XG5cblxuLy8xMi4yLjUuNC4xMCBUaGUgXCJpbiB0YWJsZSB0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMucHVzaCh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlckluVGFibGVUZXh0KHAsIHRva2VuKSB7XG4gICAgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLnB1c2godG9rZW4pO1xuICAgIHAuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbiA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBpZiAocC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHAucGVuZGluZ0NoYXJhY3RlclRva2Vuc1tpXSk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgcC5faW5zZXJ0Q2hhcmFjdGVycyhwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnNbaV0pO1xuICAgIH1cblxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC4xMSBUaGUgXCJpbiBjYXB0aW9uXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHwgdG4gPT09ICQuVEJPRFkgfHxcbiAgICAgICAgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEggfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQ0FQVElPTik7XG5cbiAgICAgICAgLy9OT1RFOiBUaGUgZmFrZSBlbmQgdGFnIHRva2VuIGhlcmUgY2FuIG9ubHkgYmUgaWdub3JlZCBpbiB0aGUgZnJhZ21lbnQgY2FzZS5cbiAgICAgICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuQ0FQVElPTikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkNBUFRJT04pO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX01PREU7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSkge1xuICAgICAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5DQVBUSU9OKTtcblxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCAmJiB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlRCT0RZICYmXG4gICAgICAgICAgICAgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEZPT1QgJiYgdG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEhFQUQgJiYgdG4gIT09ICQuVFIpIHtcbiAgICAgICAgZW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cblxuLy8xMi4yLjUuNC4xMiBUaGUgXCJpbiBjb2x1bW4gZ3JvdXBcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ09MKVxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ29sdW1uR3JvdXAocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNPTEdST1VQKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSAhPT0gJC5DT0xHUk9VUClcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5DT0wpXG4gICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkNPTEdST1VQKTtcblxuICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4xMyBUaGUgXCJpbiB0YWJsZSBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5UUikge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1JPV19NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UUik7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkJPRFkgJiYgdG4gIT09ICQuQ0FQVElPTiAmJiB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuQ09MR1JPVVAgfHxcbiAgICAgICAgICAgICB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlREICYmIHRuICE9PSAkLlRIICYmIHRuICE9PSAkLlRSKSB7XG4gICAgICAgIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuLy8xMi4yLjUuNC4xNCBUaGUgXCJpbiByb3dcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DRUxMX01PREU7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVFIpO1xuXG4gICAgICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRSKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UUikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlRSKTtcblxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UUik7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCB8fFxuICAgICAgICAgICAgIHRuICE9PSAkLkhUTUwgJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEgpIHtcbiAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5cbi8vMTIuMi41LjQuMTUgVGhlIFwiaW4gY2VsbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkNlbGwocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgIHRuID09PSAkLlREIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIIHx8IHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSKSB7XG5cbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSB8fCBwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5USCkpIHtcbiAgICAgICAgICAgIHAuX2Nsb3NlVGFibGVDZWxsKCk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ2VsbChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fUk9XX01PREU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fY2xvc2VUYWJsZUNlbGwoKTtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwpXG4gICAgICAgIGVuZFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMTYgVGhlIFwiaW4gc2VsZWN0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luU2VsZWN0KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRJT04pIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUSU9OKTtcblxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUR1JPVVApO1xuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVClcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuSU5QVVQgfHwgdG4gPT09ICQuS0VZR0VOIHx8IHRuID09PSAkLlRFWFRBUkVBKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNlbGVjdFNjb3BlKCQuU0VMRUNUKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVCB8fCB0biA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJblNlbGVjdChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuT1BUR1JPVVApIHtcbiAgICAgICAgdmFyIHByZXZPcGVuRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW3Aub3BlbkVsZW1lbnRzLnN0YWNrVG9wIC0gMV0sXG4gICAgICAgICAgICBwcmV2T3BlbkVsZW1lbnRUbiA9IHByZXZPcGVuRWxlbWVudCAmJiBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUocHJldk9wZW5FbGVtZW50KTtcblxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OICYmIHByZXZPcGVuRWxlbWVudFRuID09PSAkLk9QVEdST1VQKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0VMRUNUICYmIHAub3BlbkVsZW1lbnRzLmhhc0luU2VsZWN0U2NvcGUoJC5TRUxFQ1QpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlNFTEVDVCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjE3IFRoZSBcImluIHNlbGVjdCBpbiB0YWJsZVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblNlbGVjdEluVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHxcbiAgICAgICAgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIgfHwgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblNlbGVjdChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luU2VsZWN0SW5UYWJsZShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fFxuICAgICAgICB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUiB8fCB0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgZW5kVGFnSW5TZWxlY3QocCwgdG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjE4IFRoZSBcImluIHRlbXBsYXRlXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGVtcGxhdGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuQkdTT1VORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEgfHxcbiAgICAgICAgdG4gPT09ICQuTk9GUkFNRVMgfHwgdG4gPT09ICQuU0NSSVBUIHx8IHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLlRJVExFKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIG5ld0luc2VydGlvbk1vZGUgPSBURU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQW3RuXSB8fCBJTl9CT0RZX01PREU7XG5cbiAgICAgICAgcC5fcG9wVG1wbEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHVzaFRtcGxJbnNlcnRpb25Nb2RlKG5ld0luc2VydGlvbk1vZGUpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBuZXdJbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UZW1wbGF0ZShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlb2ZJblRlbXBsYXRlKHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUZW1wbGF0ZVBvcHBlZCgpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICBwLl9wb3BUbXBsSW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XG59XG5cblxuLy8xMi4yLjUuNC4xOSBUaGUgXCJhZnRlciBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5BZnRlckJvZHkocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MKSB7XG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQpXG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9BRlRFUl9CT0RZX01PREU7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMjAgVGhlIFwiaW4gZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5GcmFtZXNldChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUVTRVQpXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUUpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5GcmFtZXNldChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkZSQU1FU0VUICYmICFwLm9wZW5FbGVtZW50cy5pc1Jvb3RIdG1sRWxlbWVudEN1cnJlbnQoKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcblxuICAgICAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkZSQU1FU0VUKVxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfRlJBTUVTRVRfTU9ERTtcbiAgICB9XG59XG5cbi8vMTIuMi41LjQuMjEgVGhlIFwiYWZ0ZXIgZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREU7XG59XG5cbi8vMTIuMi41LjQuMjIgVGhlIFwiYWZ0ZXIgYWZ0ZXIgYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4yMyBUaGUgXCJhZnRlciBhZnRlciBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRlJBTUVTKVxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNSBUaGUgcnVsZXMgZm9yIHBhcnNpbmcgdG9rZW5zIGluIGZvcmVpZ24gY29udGVudFxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIG51bGxDaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XG4gICAgdG9rZW4uY2hhcnMgPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzdGFydFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICBpZiAoRm9yZWlnbkNvbnRlbnQuY2F1c2VzRXhpdCh0b2tlbikgJiYgIXAuZnJhZ21lbnRDb250ZXh0KSB7XG4gICAgICAgIHdoaWxlIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShwLm9wZW5FbGVtZW50cy5jdXJyZW50KSAhPT0gTlMuSFRNTCAmJlxuICAgICAgICAgICAgICAgKCFwLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSAmJlxuICAgICAgICAgICAgICAgKCFwLl9pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgY3VycmVudCA9IHAuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKSxcbiAgICAgICAgICAgIGN1cnJlbnROcyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpO1xuXG4gICAgICAgIGlmIChjdXJyZW50TnMgPT09IE5TLk1BVEhNTClcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuTWF0aE1MQXR0cnModG9rZW4pO1xuXG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnROcyA9PT0gTlMuU1ZHKSB7XG4gICAgICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR1RhZ05hbWUodG9rZW4pO1xuICAgICAgICAgICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcblxuICAgICAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpXG4gICAgICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIGZvciAodmFyIGkgPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KS50b0xvd2VyQ2FzZSgpID09PSB0b2tlbi50YWdOYW1lKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZWxlbWVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIihmdW5jdGlvbiAocHJvY2VzcyxnbG9iYWwpe1xuLyohXG4gKiBAb3ZlcnZpZXcgZXM2LXByb21pc2UgLSBhIHRpbnkgaW1wbGVtZW50YXRpb24gb2YgUHJvbWlzZXMvQSsuXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNCBZZWh1ZGEgS2F0eiwgVG9tIERhbGUsIFN0ZWZhbiBQZW5uZXIgYW5kIGNvbnRyaWJ1dG9ycyAoQ29udmVyc2lvbiB0byBFUzYgQVBJIGJ5IEpha2UgQXJjaGliYWxkKVxuICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZVxuICogICAgICAgICAgICBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2pha2VhcmNoaWJhbGQvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgMi4zLjBcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRvYmplY3RPckZ1bmN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc01heWJlVGhlbmFibGUoeCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsO1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkdXRpbHMkJF9pc0FycmF5O1xuICAgIGlmICghQXJyYXkuaXNBcnJheSkge1xuICAgICAgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkdXRpbHMkJF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc0FycmF5ID0gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheTtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbiA9IDA7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkdmVydHhOZXh0O1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkY3VzdG9tU2NoZWR1bGVyRm47XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGFzYXAgPSBmdW5jdGlvbiBhc2FwKGNhbGxiYWNrLCBhcmcpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuXSA9IGNhbGxiYWNrO1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2xpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW4gKyAxXSA9IGFyZztcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW4gKz0gMjtcbiAgICAgIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuID09PSAyKSB7XG4gICAgICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAgICAgLy8gSWYgYWRkaXRpb25hbCBjYWxsYmFja3MgYXJlIHF1ZXVlZCBiZWZvcmUgdGhlIHF1ZXVlIGlzIGZsdXNoZWQsIHRoZXlcbiAgICAgICAgLy8gd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBmbHVzaCB0aGF0IHdlIGFyZSBzY2hlZHVsaW5nLlxuICAgICAgICBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHNjaGVkdWxlRmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzZXRTY2hlZHVsZXIoc2NoZWR1bGVGbikge1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuID0gc2NoZWR1bGVGbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2V0QXNhcChhc2FwRm4pIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwID0gYXNhcEZuO1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3NlcldpbmRvdyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyR2xvYmFsID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJXaW5kb3cgfHwge307XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlciA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyR2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGlzTm9kZSA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB7fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbiAgICAvLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAvLyBub2RlXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU5leHRUaWNrKCkge1xuICAgICAgdmFyIG5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAgICAgLy8gc2V0SW1tZWRpYXRlIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgaW5zdGVhZFxuICAgICAgdmFyIHZlcnNpb24gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUubWF0Y2goL14oPzooXFxkKylcXC4pPyg/OihcXGQrKVxcLik/KFxcKnxcXGQrKSQvKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZlcnNpb24pICYmIHZlcnNpb25bMV0gPT09ICcwJyAmJiB2ZXJzaW9uWzJdID09PSAnMTAnKSB7XG4gICAgICAgIG5leHRUaWNrID0gc2V0SW1tZWRpYXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBuZXh0VGljayhsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB2ZXJ0eFxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VWZXJ0eFRpbWVyKCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkdmVydHhOZXh0KGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCkge1xuICAgICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgICAgdmFyIG9ic2VydmVyID0gbmV3IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlcihsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBub2RlLmRhdGEgPSAoaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB3ZWIgd29ya2VyXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgwKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVNldFRpbWVvdXQoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNldFRpbWVvdXQobGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoLCAxKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2goKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW47IGkrPTIpIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2ldO1xuICAgICAgICB2YXIgYXJnID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2krMV07XG5cbiAgICAgICAgY2FsbGJhY2soYXJnKTtcblxuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWVbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtpKzFdID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXR0ZW1wdFZlcnRleCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByID0gcmVxdWlyZTtcbiAgICAgICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHZlcnR4TmV4dCA9IHZlcnR4LnJ1bk9uTG9vcCB8fCB2ZXJ0eC5ydW5PbkNvbnRleHQ7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlVmVydHhUaW1lcigpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlU2V0VGltZW91dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaDtcbiAgICAvLyBEZWNpZGUgd2hhdCBhc3luYyBtZXRob2QgdG8gdXNlIHRvIHRyaWdnZXJpbmcgcHJvY2Vzc2luZyBvZiBxdWV1ZWQgY2FsbGJhY2tzOlxuICAgIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNOb2RlKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VOZXh0VGljaygpO1xuICAgIH0gZWxzZSBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNXb3JrZXIpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCk7XG4gICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3NlcldpbmRvdyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhdHRlbXB0VmVydGV4KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVNldFRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKCkge31cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HICAgPSB2b2lkIDA7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCA9IDE7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEICA9IDI7XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkR0VUX1RIRU5fRVJST1IgPSBuZXcgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKTtcblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHNlbGZGdWxsZmlsbG1lbnQoKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkY2Fubm90UmV0dXJuT3duKCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRnZXRUaGVuKHByb21pc2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW47XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHtcbiAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcChmdW5jdGlvbihwcm9taXNlKSB7XG4gICAgICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5VGhlbih0aGVuLCB0aGVuYWJsZSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBpZiAoc2VhbGVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgaWYgKHNlYWxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0sICdTZXR0bGU6ICcgKyAocHJvbWlzZS5fbGFiZWwgfHwgJyB1bmtub3duIHByb21pc2UnKSk7XG5cbiAgICAgICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0sIHByb21pc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIHRoZW5hYmxlKSB7XG4gICAgICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbmFibGUuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSkge1xuICAgICAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGhlbiA9IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGdldFRoZW4obWF5YmVUaGVuYWJsZSk7XG5cbiAgICAgICAgaWYgKHRoZW4gPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbih0aGVuKSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzZWxmRnVsbGZpbGxtZW50KCkpO1xuICAgICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkdXRpbHMkJG9iamVjdE9yRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gICAgICBpZiAocHJvbWlzZS5fb25lcnJvcikge1xuICAgICAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gocHJvbWlzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7IHJldHVybjsgfVxuXG4gICAgICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3N0YXRlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEO1xuXG4gICAgICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gsIHByb21pc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykgeyByZXR1cm47IH1cbiAgICAgIHByb21pc2UuX3N0YXRlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQ7XG4gICAgICBwcm9taXNlLl9yZXN1bHQgPSByZWFzb247XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICAgICAgdmFyIHN1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgICAgIHZhciBsZW5ndGggPSBzdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgICAgIHBhcmVudC5fb25lcnJvciA9IG51bGw7XG5cbiAgICAgIHN1YnNjcmliZXJzW2xlbmd0aF0gPSBjaGlsZDtcbiAgICAgIHN1YnNjcmliZXJzW2xlbmd0aCArIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50O1xuICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoICsgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURURdICA9IG9uUmVqZWN0aW9uO1xuXG4gICAgICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGFzYXAobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaCwgcGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRwdWJsaXNoKHByb21pc2UpIHtcbiAgICAgIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICAgICAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTtcblxuICAgICAgaWYgKHN1YnNjcmliZXJzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgdmFyIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsID0gcHJvbWlzZS5fcmVzdWx0O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07XG4gICAgICAgIGNhbGxiYWNrID0gc3Vic2NyaWJlcnNbaSArIHNldHRsZWRdO1xuXG4gICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKSB7XG4gICAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SID0gbmV3IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEVycm9yT2JqZWN0KCk7XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZGV0YWlsKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgICAgICByZXR1cm4gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgICAgIHZhciBoYXNDYWxsYmFjayA9IGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICAgICAgdmFsdWUsIGVycm9yLCBzdWNjZWVkZWQsIGZhaWxlZDtcblxuICAgICAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgICAgIHZhbHVlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IpIHtcbiAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7XG4gICAgICAgIC8vIG5vb3BcbiAgICAgIH0gZWxzZSBpZiAoaGFzQ2FsbGJhY2sgJiYgc3VjY2VlZGVkKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChmYWlsZWQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGluaXRpYWxpemVQcm9taXNlKHByb21pc2UsIHJlc29sdmVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSl7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvcihDb25zdHJ1Y3RvciwgaW5wdXQpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcblxuICAgICAgZW51bWVyYXRvci5faW5zdGFuY2VDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgICAgZW51bWVyYXRvci5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuXG4gICAgICBpZiAoZW51bWVyYXRvci5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHtcbiAgICAgICAgZW51bWVyYXRvci5faW5wdXQgICAgID0gaW5wdXQ7XG4gICAgICAgIGVudW1lcmF0b3IubGVuZ3RoICAgICA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgICAgIGVudW1lcmF0b3IuX2luaXQoKTtcblxuICAgICAgICBpZiAoZW51bWVyYXRvci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKGVudW1lcmF0b3IucHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtZXJhdG9yLmxlbmd0aCA9IGVudW1lcmF0b3IubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgZW51bWVyYXRvci5fZW51bWVyYXRlKCk7XG4gICAgICAgICAgaWYgKGVudW1lcmF0b3IuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChlbnVtZXJhdG9yLnByb21pc2UsIGVudW1lcmF0b3IuX3Jlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QoZW51bWVyYXRvci5wcm9taXNlLCBlbnVtZXJhdG9yLl92YWxpZGF0aW9uRXJyb3IoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0ZUlucHV0ID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzQXJyYXkoaW5wdXQpO1xuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5Jyk7XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3I7XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gICAgICB2YXIgbGVuZ3RoICA9IGVudW1lcmF0b3IubGVuZ3RoO1xuICAgICAgdmFyIHByb21pc2UgPSBlbnVtZXJhdG9yLnByb21pc2U7XG4gICAgICB2YXIgaW5wdXQgICA9IGVudW1lcmF0b3IuX2lucHV0O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX2VhY2hFbnRyeShpbnB1dFtpXSwgaSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24oZW50cnksIGkpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcbiAgICAgIHZhciBjID0gZW51bWVyYXRvci5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcblxuICAgICAgaWYgKGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNNYXliZVRoZW5hYmxlKGVudHJ5KSkge1xuICAgICAgICBpZiAoZW50cnkuY29uc3RydWN0b3IgPT09IGMgJiYgZW50cnkuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7XG4gICAgICAgICAgZW50cnkuX29uZXJyb3IgPSBudWxsO1xuICAgICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdChlbnRyeS5fc3RhdGUsIGksIGVudHJ5Ll9yZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudW1lcmF0b3IuX3dpbGxTZXR0bGVBdChjLnJlc29sdmUoZW50cnkpLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nLS07XG4gICAgICAgIGVudW1lcmF0b3IuX3Jlc3VsdFtpXSA9IGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3NldHRsZWRBdCA9IGZ1bmN0aW9uKHN0YXRlLCBpLCB2YWx1ZSkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuICAgICAgdmFyIHByb21pc2UgPSBlbnVtZXJhdG9yLnByb21pc2U7XG5cbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykge1xuICAgICAgICBlbnVtZXJhdG9yLl9yZW1haW5pbmctLTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtZXJhdG9yLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZW51bWVyYXRvci5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbihwcm9taXNlLCBpKSB7XG4gICAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICBlbnVtZXJhdG9yLl9zZXR0bGVkQXQobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQsIGksIHJlYXNvbik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkYWxsKGVudHJpZXMpIHtcbiAgICAgIHJldHVybiBuZXcgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJGRlZmF1bHQodGhpcywgZW50cmllcykucHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkYWxsO1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJhY2UkJHJhY2UoZW50cmllcykge1xuICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuXG4gICAgICBpZiAoIWxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgZnVuY3Rpb24gb25GdWxmaWxsbWVudCh2YWx1ZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gb25SZWplY3Rpb24ocmVhc29uKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShDb25zdHJ1Y3Rvci5yZXNvbHZlKGVudHJpZXNbaV0pLCB1bmRlZmluZWQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyYWNlJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmFjZSQkcmFjZTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZXNvbHZlJCRyZXNvbHZlKG9iamVjdCkge1xuICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgICAgIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3Rvcikge1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVzb2x2ZSQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlc29sdmUkJHJlc29sdmU7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVqZWN0JCRyZWplY3QocmVhc29uKSB7XG4gICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkcmVqZWN0O1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRjb3VudGVyID0gMDtcblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc1Jlc29sdmVyKCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc05ldygpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2U7XG4gICAgLyoqXG4gICAgICBQcm9taXNlIG9iamVjdHMgcmVwcmVzZW50IHRoZSBldmVudHVhbCByZXN1bHQgb2YgYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbi4gVGhlXG4gICAgICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICAgICAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uXG4gICAgICB3aHkgdGhlIHByb21pc2UgY2Fubm90IGJlIGZ1bGZpbGxlZC5cblxuICAgICAgVGVybWlub2xvZ3lcbiAgICAgIC0tLS0tLS0tLS0tXG5cbiAgICAgIC0gYHByb21pc2VgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB3aXRoIGEgYHRoZW5gIG1ldGhvZCB3aG9zZSBiZWhhdmlvciBjb25mb3JtcyB0byB0aGlzIHNwZWNpZmljYXRpb24uXG4gICAgICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gICAgICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2FsIEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEgcHJvbWlzZSkuXG4gICAgICAtIGBleGNlcHRpb25gIGlzIGEgdmFsdWUgdGhhdCBpcyB0aHJvd24gdXNpbmcgdGhlIHRocm93IHN0YXRlbWVudC5cbiAgICAgIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgICAgIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEgcHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuXG4gICAgICBBIHByb21pc2UgY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXM6IHBlbmRpbmcsIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQuXG5cbiAgICAgIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gICAgICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlXG4gICAgICByZWplY3RlZCBzdGF0ZS4gIEEgZnVsZmlsbG1lbnQgdmFsdWUgaXMgbmV2ZXIgYSB0aGVuYWJsZS5cblxuICAgICAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gICAgICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBwcm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzXG4gICAgICBzZXR0bGVkIHN0YXRlLiAgU28gYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCByZWplY3RzIHdpbGxcbiAgICAgIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgICAgIGl0c2VsZiBmdWxmaWxsLlxuXG5cbiAgICAgIEJhc2ljIFVzYWdlOlxuICAgICAgLS0tLS0tLS0tLS0tXG5cbiAgICAgIGBgYGpzXG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAvLyBvbiBzdWNjZXNzXG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuXG4gICAgICAgIC8vIG9uIGZhaWx1cmVcbiAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICB9KTtcblxuICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgLy8gb24gcmVqZWN0aW9uXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBBZHZhbmNlZCBVc2FnZTpcbiAgICAgIC0tLS0tLS0tLS0tLS0tLVxuXG4gICAgICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzXG4gICAgICBgWE1MSHR0cFJlcXVlc3Rgcy5cblxuICAgICAgYGBganNcbiAgICAgIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgICAgeGhyLnNlbmQoKTtcblxuICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ2dldEpTT046IGAnICsgdXJsICsgJ2AgZmFpbGVkIHdpdGggc3RhdHVzOiBbJyArIHRoaXMuc3RhdHVzICsgJ10nKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ2V0SlNPTignL3Bvc3RzLmpzb24nKS50aGVuKGZ1bmN0aW9uKGpzb24pIHtcbiAgICAgICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICAvLyBvbiByZWplY3Rpb25cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFVubGlrZSBjYWxsYmFja3MsIHByb21pc2VzIGFyZSBncmVhdCBjb21wb3NhYmxlIHByaW1pdGl2ZXMuXG5cbiAgICAgIGBgYGpzXG4gICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgIGdldEpTT04oJy9wb3N0cycpLFxuICAgICAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICAgICAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpe1xuICAgICAgICB2YWx1ZXNbMF0gLy8gPT4gcG9zdHNKU09OXG4gICAgICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQGNsYXNzIFByb21pc2VcbiAgICAgIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVyXG4gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgICBAY29uc3RydWN0b3JcbiAgICAqL1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlKHJlc29sdmVyKSB7XG4gICAgICB0aGlzLl9pZCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRjb3VudGVyKys7XG4gICAgICB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgICAgIGlmIChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wICE9PSByZXNvbHZlcikge1xuICAgICAgICBpZiAoIWxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbihyZXNvbHZlcikpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkbmVlZHNSZXNvbHZlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlKSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc05ldygpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLmFsbCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yYWNlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmFjZSQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yZXNvbHZlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVzb2x2ZSQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yZWplY3QgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZWplY3QkJGRlZmF1bHQ7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UuX3NldFNjaGVkdWxlciA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzZXRTY2hlZHVsZXI7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UuX3NldEFzYXAgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2V0QXNhcDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5fYXNhcCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwO1xuXG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UucHJvdG90eXBlID0ge1xuICAgICAgY29uc3RydWN0b3I6IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLFxuXG4gICAgLyoqXG4gICAgICBUaGUgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCxcbiAgICAgIHdoaWNoIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlXG4gICAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24odXNlcil7XG4gICAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyB1c2VyIGlzIHVuYXZhaWxhYmxlLCBhbmQgeW91IGFyZSBnaXZlbiB0aGUgcmVhc29uIHdoeVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQ2hhaW5pbmdcbiAgICAgIC0tLS0tLS0tXG5cbiAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgYHRoZW5gIGlzIGl0c2VsZiBhIHByb21pc2UuICBUaGlzIHNlY29uZCwgJ2Rvd25zdHJlYW0nXG4gICAgICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3QgcHJvbWlzZSdzIGZ1bGZpbGxtZW50XG4gICAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICByZXR1cm4gdXNlci5uYW1lO1xuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICByZXR1cm4gJ2RlZmF1bHQgbmFtZSc7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAgIC8vIHdpbGwgYmUgYCdkZWZhdWx0IG5hbWUnYFxuICAgICAgfSk7XG5cbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgICAvLyBJZiBgZmluZFVzZXJgIHJlamVjdGVkLCBgcmVhc29uYCB3aWxsIGJlICdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jy5cbiAgICAgIH0pO1xuICAgICAgYGBgXG4gICAgICBJZiB0aGUgZG93bnN0cmVhbSBwcm9taXNlIGRvZXMgbm90IHNwZWNpZnkgYSByZWplY3Rpb24gaGFuZGxlciwgcmVqZWN0aW9uIHJlYXNvbnMgd2lsbCBiZSBwcm9wYWdhdGVkIGZ1cnRoZXIgZG93bnN0cmVhbS5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBBc3NpbWlsYXRpb25cbiAgICAgIC0tLS0tLS0tLS0tLVxuXG4gICAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgICAgcmV0cmlldmVkIGFzeW5jaHJvbm91c2x5LiBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSByZXR1cm5pbmcgYSBwcm9taXNlIGluIHRoZVxuICAgICAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAgIC8vIFRoZSB1c2VyJ3MgY29tbWVudHMgYXJlIG5vdyBhdmFpbGFibGVcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgZnVsZmlsbHMsIHdlJ2xsIGhhdmUgdGhlIHZhbHVlIGhlcmVcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgU2ltcGxlIEV4YW1wbGVcbiAgICAgIC0tLS0tLS0tLS0tLS0tXG5cbiAgICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgpO1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9XG4gICAgICBgYGBcblxuICAgICAgRXJyYmFjayBFeGFtcGxlXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIGZhaWx1cmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzdWNjZXNzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFByb21pc2UgRXhhbXBsZTtcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgZmluZFJlc3VsdCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgICAgLS0tLS0tLS0tLS0tLS1cblxuICAgICAgU3luY2hyb25vdXMgRXhhbXBsZVxuXG4gICAgICBgYGBqYXZhc2NyaXB0XG4gICAgICB2YXIgYXV0aG9yLCBib29rcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgICBib29rcyAgPSBmaW5kQm9va3NCeUF1dGhvcihhdXRob3IpO1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9XG4gICAgICBgYGBcblxuICAgICAgRXJyYmFjayBFeGFtcGxlXG5cbiAgICAgIGBgYGpzXG5cbiAgICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcblxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuXG4gICAgICB9XG5cbiAgICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgIC8vIGZhaWx1cmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tzKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgZmFpbHVyZShyZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzdWNjZXNzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFByb21pc2UgRXhhbXBsZTtcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgZmluZEF1dGhvcigpLlxuICAgICAgICB0aGVuKGZpbmRCb29rc0J5QXV0aG9yKS5cbiAgICAgICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBAbWV0aG9kIHRoZW5cbiAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkXG4gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAgICovXG4gICAgICB0aGVuOiBmdW5jdGlvbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCAmJiAhb25GdWxmaWxsbWVudCB8fCBzdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQgJiYgIW9uUmVqZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHBhcmVudC5fcmVzdWx0O1xuXG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1tzdGF0ZSAtIDFdO1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRpbnZva2VDYWxsYmFjayhzdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCByZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9LFxuXG4gICAgLyoqXG4gICAgICBgY2F0Y2hgIGlzIHNpbXBseSBzdWdhciBmb3IgYHRoZW4odW5kZWZpbmVkLCBvblJlamVjdGlvbilgIHdoaWNoIG1ha2VzIGl0IHRoZSBzYW1lXG4gICAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuXG4gICAgICBgYGBqc1xuICAgICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkbid0IGZpbmQgdGhhdCBhdXRob3InKTtcbiAgICAgIH1cblxuICAgICAgLy8gc3luY2hyb25vdXNcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbmRBdXRob3IoKTtcbiAgICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICB9XG5cbiAgICAgIC8vIGFzeW5jIHdpdGggcHJvbWlzZXNcbiAgICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQG1ldGhvZCBjYXRjaFxuICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICAgKi9cbiAgICAgICdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pO1xuICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRwb2x5ZmlsbCgpIHtcbiAgICAgIHZhciBsb2NhbDtcblxuICAgICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWwgPSBnbG9iYWw7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGxvY2FsID0gc2VsZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbG9jYWwgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgICAgaWYgKFAgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKSA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2NhbC5Qcm9taXNlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJGRlZmF1bHQ7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcG9seWZpbGwkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkcG9seWZpbGwkJHBvbHlmaWxsO1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2UgPSB7XG4gICAgICAnUHJvbWlzZSc6IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0LFxuICAgICAgJ3BvbHlmaWxsJzogbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0XG4gICAgfTtcblxuICAgIC8qIGdsb2JhbCBkZWZpbmU6dHJ1ZSBtb2R1bGU6dHJ1ZSB3aW5kb3c6IHRydWUgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKSB7XG4gICAgICBkZWZpbmUoZnVuY3Rpb24oKSB7IHJldHVybiBsaWIkZXM2JHByb21pc2UkdW1kJCRFUzZQcm9taXNlOyB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZVsnZXhwb3J0cyddKSB7XG4gICAgICBtb2R1bGVbJ2V4cG9ydHMnXSA9IGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNbJ0VTNlByb21pc2UnXSA9IGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2U7XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0KCk7XG59KS5jYWxsKHRoaXMpO1xuXG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5bGN6WXRjSEp2YldselpTOWthWE4wTDJWek5pMXdjbTl0YVhObExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9oWEc0Z0tpQkFiM1psY25acFpYY2daWE0yTFhCeWIyMXBjMlVnTFNCaElIUnBibmtnYVcxd2JHVnRaVzUwWVhScGIyNGdiMllnVUhKdmJXbHpaWE12UVNzdVhHNGdLaUJBWTI5d2VYSnBaMmgwSUVOdmNIbHlhV2RvZENBb1l5a2dNakF4TkNCWlpXaDFaR0VnUzJGMGVpd2dWRzl0SUVSaGJHVXNJRk4wWldaaGJpQlFaVzV1WlhJZ1lXNWtJR052Ym5SeWFXSjFkRzl5Y3lBb1EyOXVkbVZ5YzJsdmJpQjBieUJGVXpZZ1FWQkpJR0o1SUVwaGEyVWdRWEpqYUdsaVlXeGtLVnh1SUNvZ1FHeHBZMlZ1YzJVZ0lDQk1hV05sYm5ObFpDQjFibVJsY2lCTlNWUWdiR2xqWlc1elpWeHVJQ29nSUNBZ0lDQWdJQ0FnSUNCVFpXVWdhSFIwY0hNNkx5OXlZWGN1WjJsMGFIVmlkWE5sY21OdmJuUmxiblF1WTI5dEwycGhhMlZoY21Ob2FXSmhiR1F2WlhNMkxYQnliMjFwYzJVdmJXRnpkR1Z5TDB4SlEwVk9VMFZjYmlBcUlFQjJaWEp6YVc5dUlDQWdNaTR6TGpCY2JpQXFMMXh1WEc0b1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ1hDSjFjMlVnYzNSeWFXTjBYQ0k3WEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpIVjBhV3h6SkNSdlltcGxZM1JQY2taMWJtTjBhVzl1S0hncElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGVYQmxiMllnZUNBOVBUMGdKMloxYm1OMGFXOXVKeUI4ZkNBb2RIbHdaVzltSUhnZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUhnZ0lUMDlJRzUxYkd3cE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1IxZEdsc2N5UWthWE5HZFc1amRHbHZiaWg0S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEhsd1pXOW1JSGdnUFQwOUlDZG1kVzVqZEdsdmJpYzdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhWMGFXeHpKQ1JwYzAxaGVXSmxWR2hsYm1GaWJHVW9lQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFI1Y0dWdlppQjRJRDA5UFNBbmIySnFaV04wSnlBbUppQjRJQ0U5UFNCdWRXeHNPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtkWFJwYkhNa0pGOXBjMEZ5Y21GNU8xeHVJQ0FnSUdsbUlDZ2hRWEp5WVhrdWFYTkJjbkpoZVNrZ2UxeHVJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhWMGFXeHpKQ1JmYVhOQmNuSmhlU0E5SUdaMWJtTjBhVzl1SUNoNEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQlBZbXBsWTNRdWNISnZkRzkwZVhCbExuUnZVM1J5YVc1bkxtTmhiR3dvZUNrZ1BUMDlJQ2RiYjJKcVpXTjBJRUZ5Y21GNVhTYzdYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrZFhScGJITWtKRjlwYzBGeWNtRjVJRDBnUVhKeVlYa3VhWE5CY25KaGVUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdiR2xpSkdWek5pUndjbTl0YVhObEpIVjBhV3h6SkNScGMwRnljbUY1SUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhWMGFXeHpKQ1JmYVhOQmNuSmhlVHRjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHeGxiaUE5SURBN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1IwYjFOMGNtbHVaeUE5SUh0OUxuUnZVM1J5YVc1bk8xeHVJQ0FnSUhaaGNpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrZG1WeWRIaE9aWGgwTzF4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZM1Z6ZEc5dFUyTm9aV1IxYkdWeVJtNDdYRzVjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHRnpZWEFnUFNCbWRXNWpkR2x2YmlCaGMyRndLR05oYkd4aVlXTnJMQ0JoY21jcElIdGNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1J4ZFdWMVpWdHNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYkdWdVhTQTlJR05oYkd4aVlXTnJPMXh1SUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhGMVpYVmxXMnhwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSc1pXNGdLeUF4WFNBOUlHRnlaenRjYmlBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSc1pXNGdLejBnTWp0Y2JpQWdJQ0FnSUdsbUlDaHNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYkdWdUlEMDlQU0F5S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRWxtSUd4bGJpQnBjeUF5TENCMGFHRjBJRzFsWVc1eklIUm9ZWFFnZDJVZ2JtVmxaQ0IwYnlCelkyaGxaSFZzWlNCaGJpQmhjM2x1WXlCbWJIVnphQzVjYmlBZ0lDQWdJQ0FnTHk4Z1NXWWdZV1JrYVhScGIyNWhiQ0JqWVd4c1ltRmphM01nWVhKbElIRjFaWFZsWkNCaVpXWnZjbVVnZEdobElIRjFaWFZsSUdseklHWnNkWE5vWldRc0lIUm9aWGxjYmlBZ0lDQWdJQ0FnTHk4Z2QybHNiQ0JpWlNCd2NtOWpaWE56WldRZ1lua2dkR2hwY3lCbWJIVnphQ0IwYUdGMElIZGxJR0Z5WlNCelkyaGxaSFZzYVc1bkxseHVJQ0FnSUNBZ0lDQnBaaUFvYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHTjFjM1J2YlZOamFHVmtkV3hsY2tadUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHTjFjM1J2YlZOamFHVmtkV3hsY2tadUtHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JtYkhWemFDazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pITmphR1ZrZFd4bFJteDFjMmdvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpaWFJUWTJobFpIVnNaWElvYzJOb1pXUjFiR1ZHYmlrZ2UxeHVJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKR04xYzNSdmJWTmphR1ZrZFd4bGNrWnVJRDBnYzJOb1pXUjFiR1ZHYmp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa2MyVjBRWE5oY0NoaGMyRndSbTRwSUh0Y2JpQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUmhjMkZ3SUQwZ1lYTmhjRVp1TzF4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZbkp2ZDNObGNsZHBibVJ2ZHlBOUlDaDBlWEJsYjJZZ2QybHVaRzkzSUNFOVBTQW5kVzVrWldacGJtVmtKeWtnUHlCM2FXNWtiM2NnT2lCMWJtUmxabWx1WldRN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JpY205M2MyVnlSMnh2WW1Gc0lEMGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkdKeWIzZHpaWEpYYVc1a2IzY2dmSHdnZTMwN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JDY205M2MyVnlUWFYwWVhScGIyNVBZbk5sY25abGNpQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSaWNtOTNjMlZ5UjJ4dlltRnNMazExZEdGMGFXOXVUMkp6WlhKMlpYSWdmSHdnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHSnliM2R6WlhKSGJHOWlZV3d1VjJWaVMybDBUWFYwWVhScGIyNVBZbk5sY25abGNqdGNiaUFnSUNCMllYSWdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkdselRtOWtaU0E5SUhSNWNHVnZaaUJ3Y205alpYTnpJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5QW1KaUI3ZlM1MGIxTjBjbWx1Wnk1allXeHNLSEJ5YjJObGMzTXBJRDA5UFNBblcyOWlhbVZqZENCd2NtOWpaWE56WFNjN1hHNWNiaUFnSUNBdkx5QjBaWE4wSUdadmNpQjNaV0lnZDI5eWEyVnlJR0oxZENCdWIzUWdhVzRnU1VVeE1GeHVJQ0FnSUhaaGNpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYVhOWGIzSnJaWElnUFNCMGVYQmxiMllnVldsdWREaERiR0Z0Y0dWa1FYSnlZWGtnSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltWEc0Z0lDQWdJQ0IwZVhCbGIyWWdhVzF3YjNKMFUyTnlhWEIwY3lBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NnSmlaY2JpQWdJQ0FnSUhSNWNHVnZaaUJOWlhOellXZGxRMmhoYm01bGJDQWhQVDBnSjNWdVpHVm1hVzVsWkNjN1hHNWNiaUFnSUNBdkx5QnViMlJsWEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhWelpVNWxlSFJVYVdOcktDa2dlMXh1SUNBZ0lDQWdkbUZ5SUc1bGVIUlVhV05ySUQwZ2NISnZZMlZ6Y3k1dVpYaDBWR2xqYXp0Y2JpQWdJQ0FnSUM4dklHNXZaR1VnZG1WeWMybHZiaUF3TGpFd0xuZ2daR2x6Y0d4aGVYTWdZU0JrWlhCeVpXTmhkR2x2YmlCM1lYSnVhVzVuSUhkb1pXNGdibVY0ZEZScFkyc2dhWE1nZFhObFpDQnlaV04xY25OcGRtVnNlVnh1SUNBZ0lDQWdMeThnYzJWMFNXMXRaV1JwWVhSbElITm9iM1ZzWkNCaVpTQjFjMlZrSUdsdWMzUmxZV1FnYVc1emRHVmhaRnh1SUNBZ0lDQWdkbUZ5SUhabGNuTnBiMjRnUFNCd2NtOWpaWE56TG5abGNuTnBiMjV6TG01dlpHVXViV0YwWTJnb0wxNG9Qem9vWEZ4a0t5bGNYQzRwUHlnL09paGNYR1FyS1Z4Y0xpay9LRnhjS254Y1hHUXJLU1F2S1R0Y2JpQWdJQ0FnSUdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0habGNuTnBiMjRwSUNZbUlIWmxjbk5wYjI1Yk1WMGdQVDA5SUNjd0p5QW1KaUIyWlhKemFXOXVXekpkSUQwOVBTQW5NVEFuS1NCN1hHNGdJQ0FnSUNBZ0lHNWxlSFJVYVdOcklEMGdjMlYwU1cxdFpXUnBZWFJsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnY21WMGRYSnVJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCdVpYaDBWR2xqYXloc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtabXgxYzJncE8xeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QjJaWEowZUZ4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSMWMyVldaWEowZUZScGJXVnlLQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtkbVZ5ZEhoT1pYaDBLR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSbWJIVnphQ2s3WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDFjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSMWMyVk5kWFJoZEdsdmJrOWljMlZ5ZG1WeUtDa2dlMXh1SUNBZ0lDQWdkbUZ5SUdsMFpYSmhkR2x2Ym5NZ1BTQXdPMXh1SUNBZ0lDQWdkbUZ5SUc5aWMyVnlkbVZ5SUQwZ2JtVjNJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSQ2NtOTNjMlZ5VFhWMFlYUnBiMjVQWW5ObGNuWmxjaWhzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa1pteDFjMmdwTzF4dUlDQWdJQ0FnZG1GeUlHNXZaR1VnUFNCa2IyTjFiV1Z1ZEM1amNtVmhkR1ZVWlhoMFRtOWtaU2duSnlrN1hHNGdJQ0FnSUNCdlluTmxjblpsY2k1dlluTmxjblpsS0c1dlpHVXNJSHNnWTJoaGNtRmpkR1Z5UkdGMFlUb2dkSEoxWlNCOUtUdGNibHh1SUNBZ0lDQWdjbVYwZFhKdUlHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdJQ0J1YjJSbExtUmhkR0VnUFNBb2FYUmxjbUYwYVc5dWN5QTlJQ3NyYVhSbGNtRjBhVzl1Y3lBbElESXBPMXh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUIzWldJZ2QyOXlhMlZ5WEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhWelpVMWxjM05oWjJWRGFHRnVibVZzS0NrZ2UxeHVJQ0FnSUNBZ2RtRnlJR05vWVc1dVpXd2dQU0J1WlhjZ1RXVnpjMkZuWlVOb1lXNXVaV3dvS1R0Y2JpQWdJQ0FnSUdOb1lXNXVaV3d1Y0c5eWRERXViMjV0WlhOellXZGxJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHWnNkWE5vTzF4dUlDQWdJQ0FnY21WMGRYSnVJR1oxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdJQ0FnSUNBZ1kyaGhibTVsYkM1d2IzSjBNaTV3YjNOMFRXVnpjMkZuWlNnd0tUdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSFZ6WlZObGRGUnBiV1Z2ZFhRb0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJSE5sZEZScGJXVnZkWFFvYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHWnNkWE5vTENBeEtUdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSeGRXVjFaU0E5SUc1bGR5QkJjbkpoZVNneE1EQXdLVHRjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrWm14MWMyZ29LU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnNaVzQ3SUdrclBUSXBJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHTmhiR3hpWVdOcklEMGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhGMVpYVmxXMmxkTzF4dUlDQWdJQ0FnSUNCMllYSWdZWEpuSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSEYxWlhWbFcya3JNVjA3WEc1Y2JpQWdJQ0FnSUNBZ1kyRnNiR0poWTJzb1lYSm5LVHRjYmx4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjWFZsZFdWYmFWMGdQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnhkV1YxWlZ0cEt6RmRJRDBnZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtiR1Z1SUQwZ01EdGNiaUFnSUNCOVhHNWNiaUFnSUNCbWRXNWpkR2x2YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZWFIwWlcxd2RGWmxjblJsZUNncElIdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQnlJRDBnY21WeGRXbHlaVHRjYmlBZ0lDQWdJQ0FnZG1GeUlIWmxjblI0SUQwZ2NpZ25kbVZ5ZEhnbktUdGNiaUFnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhabGNuUjRUbVY0ZENBOUlIWmxjblI0TG5KMWJrOXVURzl2Y0NCOGZDQjJaWEowZUM1eWRXNVBia052Ym5SbGVIUTdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrZFhObFZtVnlkSGhVYVcxbGNpZ3BPMXh1SUNBZ0lDQWdmU0JqWVhSamFDaGxLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa2RYTmxVMlYwVkdsdFpXOTFkQ2dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjMk5vWldSMWJHVkdiSFZ6YUR0Y2JpQWdJQ0F2THlCRVpXTnBaR1VnZDJoaGRDQmhjM2x1WXlCdFpYUm9iMlFnZEc4Z2RYTmxJSFJ2SUhSeWFXZG5aWEpwYm1jZ2NISnZZMlZ6YzJsdVp5QnZaaUJ4ZFdWMVpXUWdZMkZzYkdKaFkydHpPbHh1SUNBZ0lHbG1JQ2hzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa2FYTk9iMlJsS1NCN1hHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjMk5vWldSMWJHVkdiSFZ6YUNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1IxYzJWT1pYaDBWR2xqYXlncE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKRUp5YjNkelpYSk5kWFJoZEdsdmJrOWljMlZ5ZG1WeUtTQjdYRzRnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYzJOb1pXUjFiR1ZHYkhWemFDQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSMWMyVk5kWFJoZEdsdmJrOWljMlZ5ZG1WeUtDazdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaHNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYVhOWGIzSnJaWElwSUh0Y2JpQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpZMmhsWkhWc1pVWnNkWE5vSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSFZ6WlUxbGMzTmhaMlZEYUdGdWJtVnNLQ2s3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2hzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa1luSnZkM05sY2xkcGJtUnZkeUE5UFQwZ2RXNWtaV1pwYm1Wa0lDWW1JSFI1Y0dWdlppQnlaWEYxYVhKbElEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjMk5vWldSMWJHVkdiSFZ6YUNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JoZEhSbGJYQjBWbVZ5ZEdWNEtDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpZMmhsWkhWc1pVWnNkWE5vSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSFZ6WlZObGRGUnBiV1Z2ZFhRb0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNCbWRXNWpkR2x2YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSdWIyOXdLQ2tnZTMxY2JseHVJQ0FnSUhaaGNpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlFSVTVFU1U1SElDQWdQU0IyYjJsa0lEQTdYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRVpWVEVaSlRFeEZSQ0E5SURFN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pGSkZTa1ZEVkVWRUlDQTlJREk3WEc1Y2JpQWdJQ0IyWVhJZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1IwVlVYMVJJUlU1ZlJWSlNUMUlnUFNCdVpYY2diR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtSWEp5YjNKUFltcGxZM1FvS1R0Y2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhObGJHWkdkV3hzWm1sc2JHMWxiblFvS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGUjVjR1ZGY25KdmNpaGNJbGx2ZFNCallXNXViM1FnY21WemIyeDJaU0JoSUhCeWIyMXBjMlVnZDJsMGFDQnBkSE5sYkdaY0lpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1kyRnVibTkwVW1WMGRYSnVUM2R1S0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QlVlWEJsUlhKeWIzSW9KMEVnY0hKdmJXbHpaWE1nWTJGc2JHSmhZMnNnWTJGdWJtOTBJSEpsZEhWeWJpQjBhR0YwSUhOaGJXVWdjSEp2YldselpTNG5LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUm5aWFJVYUdWdUtIQnliMjFwYzJVcElIdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ3Y205dGFYTmxMblJvWlc0N1hHNGdJQ0FnSUNCOUlHTmhkR05vS0dWeWNtOXlLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkVkRlZGOVVTRVZPWDBWU1VrOVNMbVZ5Y205eUlEMGdaWEp5YjNJN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSSFJWUmZWRWhGVGw5RlVsSlBVanRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUjBjbmxVYUdWdUtIUm9aVzRzSUhaaGJIVmxMQ0JtZFd4bWFXeHNiV1Z1ZEVoaGJtUnNaWElzSUhKbGFtVmpkR2x2YmtoaGJtUnNaWElwSUh0Y2JpQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJSFJvWlc0dVkyRnNiQ2gyWVd4MVpTd2dablZzWm1sc2JHMWxiblJJWVc1a2JHVnlMQ0J5WldwbFkzUnBiMjVJWVc1a2JHVnlLVHRjYmlBZ0lDQWdJSDBnWTJGMFkyZ29aU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JvWVc1a2JHVkdiM0psYVdkdVZHaGxibUZpYkdVb2NISnZiV2x6WlN3Z2RHaGxibUZpYkdVc0lIUm9aVzRwSUh0Y2JpQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZWE5oY0NobWRXNWpkR2x2Ymlod2NtOXRhWE5sS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ6WldGc1pXUWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdkbUZ5SUdWeWNtOXlJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrZEhKNVZHaGxiaWgwYUdWdUxDQjBhR1Z1WVdKc1pTd2dablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2MyVmhiR1ZrS1NCN0lISmxkSFZ5YmpzZ2ZWeHVJQ0FnSUNBZ0lDQWdJSE5sWVd4bFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSb1pXNWhZbXhsSUNFOVBTQjJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WemIyeDJaU2h3Y205dGFYTmxMQ0IyWVd4MVpTazdYRzRnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHWjFiR1pwYkd3b2NISnZiV2x6WlN3Z2RtRnNkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU3dnWm5WdVkzUnBiMjRvY21WaGMyOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSE5sWVd4bFpDa2dleUJ5WlhSMWNtNDdJSDFjYmlBZ0lDQWdJQ0FnSUNCelpXRnNaV1FnUFNCMGNuVmxPMXh1WEc0Z0lDQWdJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa2NtVnFaV04wS0hCeWIyMXBjMlVzSUhKbFlYTnZiaWs3WEc0Z0lDQWdJQ0FnSUgwc0lDZFRaWFIwYkdVNklDY2dLeUFvY0hKdmJXbHpaUzVmYkdGaVpXd2dmSHdnSnlCMWJtdHViM2R1SUhCeWIyMXBjMlVuS1NrN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0NGelpXRnNaV1FnSmlZZ1pYSnliM0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnpaV0ZzWldRZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pISmxhbVZqZENod2NtOXRhWE5sTENCbGNuSnZjaWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwc0lIQnliMjFwYzJVcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdoaGJtUnNaVTkzYmxSb1pXNWhZbXhsS0hCeWIyMXBjMlVzSUhSb1pXNWhZbXhsS1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hsYm1GaWJHVXVYM04wWVhSbElEMDlQU0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JHVlV4R1NVeE1SVVFwSUh0Y2JpQWdJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1puVnNabWxzYkNod2NtOXRhWE5sTENCMGFHVnVZV0pzWlM1ZmNtVnpkV3gwS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RHaGxibUZpYkdVdVgzTjBZWFJsSUQwOVBTQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlNSVXBGUTFSRlJDa2dlMXh1SUNBZ0lDQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J5WldwbFkzUW9jSEp2YldselpTd2dkR2hsYm1GaWJHVXVYM0psYzNWc2RDazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUnpkV0p6WTNKcFltVW9kR2hsYm1GaWJHVXNJSFZ1WkdWbWFXNWxaQ3dnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpYTnZiSFpsS0hCeWIyMXBjMlVzSUhaaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnZlN3Z1puVnVZM1JwYjI0b2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZxWldOMEtIQnliMjFwYzJVc0lISmxZWE52YmlrN1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHaGhibVJzWlUxaGVXSmxWR2hsYm1GaWJHVW9jSEp2YldselpTd2diV0Y1WW1WVWFHVnVZV0pzWlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLRzFoZVdKbFZHaGxibUZpYkdVdVkyOXVjM1J5ZFdOMGIzSWdQVDA5SUhCeWIyMXBjMlV1WTI5dWMzUnlkV04wYjNJcElIdGNiaUFnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWthR0Z1Wkd4bFQzZHVWR2hsYm1GaWJHVW9jSEp2YldselpTd2diV0Y1WW1WVWFHVnVZV0pzWlNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMllYSWdkR2hsYmlBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHZGxkRlJvWlc0b2JXRjVZbVZVYUdWdVlXSnNaU2s3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvWlc0Z1BUMDlJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRWRGVkY5VVNFVk9YMFZTVWs5U0tTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WcVpXTjBLSEJ5YjIxcGMyVXNJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRWRGVkY5VVNFVk9YMFZTVWs5U0xtVnljbTl5S1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBhR1Z1SUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSbWRXeG1hV3hzS0hCeWIyMXBjMlVzSUcxaGVXSmxWR2hsYm1GaWJHVXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0d4cFlpUmxjellrY0hKdmJXbHpaU1IxZEdsc2N5UWthWE5HZFc1amRHbHZiaWgwYUdWdUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdoaGJtUnNaVVp2Y21WcFoyNVVhR1Z1WVdKc1pTaHdjbTl0YVhObExDQnRZWGxpWlZSb1pXNWhZbXhsTENCMGFHVnVLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSbWRXeG1hV3hzS0hCeWIyMXBjMlVzSUcxaGVXSmxWR2hsYm1GaWJHVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZ6YjJ4MlpTaHdjbTl0YVhObExDQjJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLSEJ5YjIxcGMyVWdQVDA5SUhaaGJIVmxLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhKbGFtVmpkQ2h3Y205dGFYTmxMQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J6Wld4bVJuVnNiR1pwYkd4dFpXNTBLQ2twTzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoc2FXSWtaWE0ySkhCeWIyMXBjMlVrZFhScGJITWtKRzlpYW1WamRFOXlSblZ1WTNScGIyNG9kbUZzZFdVcEtTQjdYRzRnSUNBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKR2hoYm1Sc1pVMWhlV0psVkdobGJtRmliR1VvY0hKdmJXbHpaU3dnZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtablZzWm1sc2JDaHdjbTl0YVhObExDQjJZV3gxWlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnWm5WdVkzUnBiMjRnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY0hWaWJHbHphRkpsYW1WamRHbHZiaWh3Y205dGFYTmxLU0I3WEc0Z0lDQWdJQ0JwWmlBb2NISnZiV2x6WlM1ZmIyNWxjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ0lDQndjbTl0YVhObExsOXZibVZ5Y205eUtIQnliMjFwYzJVdVgzSmxjM1ZzZENrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pIQjFZbXhwYzJnb2NISnZiV2x6WlNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWm5WdVkzUnBiMjRnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrWm5Wc1ptbHNiQ2h3Y205dGFYTmxMQ0IyWVd4MVpTa2dlMXh1SUNBZ0lDQWdhV1lnS0hCeWIyMXBjMlV1WDNOMFlYUmxJQ0U5UFNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSUVJVNUVTVTVIS1NCN0lISmxkSFZ5YmpzZ2ZWeHVYRzRnSUNBZ0lDQndjbTl0YVhObExsOXlaWE4xYkhRZ1BTQjJZV3gxWlR0Y2JpQWdJQ0FnSUhCeWIyMXBjMlV1WDNOMFlYUmxJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrUmxWTVJrbE1URVZFTzF4dVhHNGdJQ0FnSUNCcFppQW9jSEp2YldselpTNWZjM1ZpYzJOeWFXSmxjbk11YkdWdVozUm9JQ0U5UFNBd0tTQjdYRzRnSUNBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSaGMyRndLR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKSEIxWW14cGMyZ3NJSEJ5YjIxcGMyVXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pISmxhbVZqZENod2NtOXRhWE5sTENCeVpXRnpiMjRwSUh0Y2JpQWdJQ0FnSUdsbUlDaHdjbTl0YVhObExsOXpkR0YwWlNBaFBUMGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtVRVZPUkVsT1J5a2dleUJ5WlhSMWNtNDdJSDFjYmlBZ0lDQWdJSEJ5YjIxcGMyVXVYM04wWVhSbElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtVa1ZLUlVOVVJVUTdYRzRnSUNBZ0lDQndjbTl0YVhObExsOXlaWE4xYkhRZ1BTQnlaV0Z6YjI0N1hHNWNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JoYzJGd0tHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pIQjFZbXhwYzJoU1pXcGxZM1JwYjI0c0lIQnliMjFwYzJVcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhOMVluTmpjbWxpWlNod1lYSmxiblFzSUdOb2FXeGtMQ0J2YmtaMWJHWnBiR3h0Wlc1MExDQnZibEpsYW1WamRHbHZiaWtnZTF4dUlDQWdJQ0FnZG1GeUlITjFZbk5qY21saVpYSnpJRDBnY0dGeVpXNTBMbDl6ZFdKelkzSnBZbVZ5Y3p0Y2JpQWdJQ0FnSUhaaGNpQnNaVzVuZEdnZ1BTQnpkV0p6WTNKcFltVnljeTVzWlc1bmRHZzdYRzVjYmlBZ0lDQWdJSEJoY21WdWRDNWZiMjVsY25KdmNpQTlJRzUxYkd3N1hHNWNiaUFnSUNBZ0lITjFZbk5qY21saVpYSnpXMnhsYm1kMGFGMGdQU0JqYUdsc1pEdGNiaUFnSUNBZ0lITjFZbk5qY21saVpYSnpXMnhsYm1kMGFDQXJJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRVpWVEVaSlRFeEZSRjBnUFNCdmJrWjFiR1pwYkd4dFpXNTBPMXh1SUNBZ0lDQWdjM1ZpYzJOeWFXSmxjbk5iYkdWdVozUm9JQ3NnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrVWtWS1JVTlVSVVJkSUNBOUlHOXVVbVZxWldOMGFXOXVPMXh1WEc0Z0lDQWdJQ0JwWmlBb2JHVnVaM1JvSUQwOVBTQXdJQ1ltSUhCaGNtVnVkQzVmYzNSaGRHVXBJSHRjYmlBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHRnpZWEFvYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY0hWaWJHbHphQ3dnY0dGeVpXNTBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUndkV0pzYVhOb0tIQnliMjFwYzJVcElIdGNiaUFnSUNBZ0lIWmhjaUJ6ZFdKelkzSnBZbVZ5Y3lBOUlIQnliMjFwYzJVdVgzTjFZbk5qY21saVpYSnpPMXh1SUNBZ0lDQWdkbUZ5SUhObGRIUnNaV1FnUFNCd2NtOXRhWE5sTGw5emRHRjBaVHRjYmx4dUlDQWdJQ0FnYVdZZ0tITjFZbk5qY21saVpYSnpMbXhsYm1kMGFDQTlQVDBnTUNrZ2V5QnlaWFIxY200N0lIMWNibHh1SUNBZ0lDQWdkbUZ5SUdOb2FXeGtMQ0JqWVd4c1ltRmpheXdnWkdWMFlXbHNJRDBnY0hKdmJXbHpaUzVmY21WemRXeDBPMXh1WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUhOMVluTmpjbWxpWlhKekxteGxibWQwYURzZ2FTQXJQU0F6S1NCN1hHNGdJQ0FnSUNBZ0lHTm9hV3hrSUQwZ2MzVmljMk55YVdKbGNuTmJhVjA3WEc0Z0lDQWdJQ0FnSUdOaGJHeGlZV05ySUQwZ2MzVmljMk55YVdKbGNuTmJhU0FySUhObGRIUnNaV1JkTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYUdsc1pDa2dlMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdsdWRtOXJaVU5oYkd4aVlXTnJLSE5sZEhSc1pXUXNJR05vYVd4a0xDQmpZV3hzWW1GamF5d2daR1YwWVdsc0tUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0JqWVd4c1ltRmpheWhrWlhSaGFXd3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUhCeWIyMXBjMlV1WDNOMVluTmpjbWxpWlhKekxteGxibWQwYUNBOUlEQTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1JYSnliM0pQWW1wbFkzUW9LU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnljbTl5SUQwZ2JuVnNiRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrVkZKWlgwTkJWRU5JWDBWU1VrOVNJRDBnYm1WM0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pFVnljbTl5VDJKcVpXTjBLQ2s3WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1IwY25sRFlYUmphQ2hqWVd4c1ltRmpheXdnWkdWMFlXbHNLU0I3WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyRnNiR0poWTJzb1pHVjBZV2xzS1R0Y2JpQWdJQ0FnSUgwZ1kyRjBZMmdvWlNrZ2UxeHVJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlVVbGxmUTBGVVEwaGZSVkpTVDFJdVpYSnliM0lnUFNCbE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1ZGSlpYME5CVkVOSVgwVlNVazlTTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKR2x1ZG05clpVTmhiR3hpWVdOcktITmxkSFJzWldRc0lIQnliMjFwYzJVc0lHTmhiR3hpWVdOckxDQmtaWFJoYVd3cElIdGNiaUFnSUNBZ0lIWmhjaUJvWVhORFlXeHNZbUZqYXlBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWRHbHNjeVFrYVhOR2RXNWpkR2x2YmloallXeHNZbUZqYXlrc1hHNGdJQ0FnSUNBZ0lDQWdkbUZzZFdVc0lHVnljbTl5TENCemRXTmpaV1ZrWldRc0lHWmhhV3hsWkR0Y2JseHVJQ0FnSUNBZ2FXWWdLR2hoYzBOaGJHeGlZV05yS1NCN1hHNGdJQ0FnSUNBZ0lIWmhiSFZsSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa2RISjVRMkYwWTJnb1kyRnNiR0poWTJzc0lHUmxkR0ZwYkNrN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0haaGJIVmxJRDA5UFNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSVVVsbGZRMEZVUTBoZlJWSlNUMUlwSUh0Y2JpQWdJQ0FnSUNBZ0lDQm1ZV2xzWldRZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lHVnljbTl5SUQwZ2RtRnNkV1V1WlhKeWIzSTdYRzRnSUNBZ0lDQWdJQ0FnZG1Gc2RXVWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJSE4xWTJObFpXUmxaQ0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCcFppQW9jSEp2YldselpTQTlQVDBnZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpXcGxZM1FvY0hKdmJXbHpaU3dnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrWTJGdWJtOTBVbVYwZFhKdVQzZHVLQ2twTzF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjJZV3gxWlNBOUlHUmxkR0ZwYkR0Y2JpQWdJQ0FnSUNBZ2MzVmpZMlZsWkdWa0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FXWWdLSEJ5YjIxcGMyVXVYM04wWVhSbElDRTlQU0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JRUlU1RVNVNUhLU0I3WEc0Z0lDQWdJQ0FnSUM4dklHNXZiM0JjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvYUdGelEyRnNiR0poWTJzZ0ppWWdjM1ZqWTJWbFpHVmtLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhKbGMyOXNkbVVvY0hKdmJXbHpaU3dnZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2htWVdsc1pXUXBJSHRjYmlBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WcVpXTjBLSEJ5YjIxcGMyVXNJR1Z5Y205eUtUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9jMlYwZEd4bFpDQTlQVDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrUmxWTVJrbE1URVZFS1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHWjFiR1pwYkd3b2NISnZiV2x6WlN3Z2RtRnNkV1VwTzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoelpYUjBiR1ZrSUQwOVBTQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlNSVXBGUTFSRlJDa2dlMXh1SUNBZ0lDQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J5WldwbFkzUW9jSEp2YldselpTd2dkbUZzZFdVcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdsdWFYUnBZV3hwZW1WUWNtOXRhWE5sS0hCeWIyMXBjMlVzSUhKbGMyOXNkbVZ5S1NCN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0J5WlhOdmJIWmxjaWhtZFc1amRHbHZiaUJ5WlhOdmJIWmxVSEp2YldselpTaDJZV3gxWlNsN1hHNGdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZ6YjJ4MlpTaHdjbTl0YVhObExDQjJZV3gxWlNrN1hHNGdJQ0FnSUNBZ0lIMHNJR1oxYm1OMGFXOXVJSEpsYW1WamRGQnliMjFwYzJVb2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZxWldOMEtIQnliMjFwYzJVc0lISmxZWE52YmlrN1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdmU0JqWVhSamFDaGxLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhKbGFtVmpkQ2h3Y205dGFYTmxMQ0JsS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtaVzUxYldWeVlYUnZjaVFrUlc1MWJXVnlZWFJ2Y2loRGIyNXpkSEoxWTNSdmNpd2dhVzV3ZFhRcElIdGNiaUFnSUNBZ0lIWmhjaUJsYm5WdFpYSmhkRzl5SUQwZ2RHaHBjenRjYmx4dUlDQWdJQ0FnWlc1MWJXVnlZWFJ2Y2k1ZmFXNXpkR0Z1WTJWRGIyNXpkSEoxWTNSdmNpQTlJRU52Ym5OMGNuVmpkRzl5TzF4dUlDQWdJQ0FnWlc1MWJXVnlZWFJ2Y2k1d2NtOXRhWE5sSUQwZ2JtVjNJRU52Ym5OMGNuVmpkRzl5S0d4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkc1dmIzQXBPMXh1WEc0Z0lDQWdJQ0JwWmlBb1pXNTFiV1Z5WVhSdmNpNWZkbUZzYVdSaGRHVkpibkIxZENocGJuQjFkQ2twSUh0Y2JpQWdJQ0FnSUNBZ1pXNTFiV1Z5WVhSdmNpNWZhVzV3ZFhRZ0lDQWdJRDBnYVc1d2RYUTdYRzRnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1YkdWdVozUm9JQ0FnSUNBOUlHbHVjSFYwTG14bGJtZDBhRHRjYmlBZ0lDQWdJQ0FnWlc1MWJXVnlZWFJ2Y2k1ZmNtVnRZV2x1YVc1bklEMGdhVzV3ZFhRdWJHVnVaM1JvTzF4dVhHNGdJQ0FnSUNBZ0lHVnVkVzFsY21GMGIzSXVYMmx1YVhRb0tUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb1pXNTFiV1Z5WVhSdmNpNXNaVzVuZEdnZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUm1kV3htYVd4c0tHVnVkVzFsY21GMGIzSXVjSEp2YldselpTd2daVzUxYldWeVlYUnZjaTVmY21WemRXeDBLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCbGJuVnRaWEpoZEc5eUxteGxibWQwYUNBOUlHVnVkVzFsY21GMGIzSXViR1Z1WjNSb0lIeDhJREE3WEc0Z0lDQWdJQ0FnSUNBZ1pXNTFiV1Z5WVhSdmNpNWZaVzUxYldWeVlYUmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1Z1ZFcxbGNtRjBiM0l1WDNKbGJXRnBibWx1WnlBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtablZzWm1sc2JDaGxiblZ0WlhKaGRHOXlMbkJ5YjIxcGMyVXNJR1Z1ZFcxbGNtRjBiM0l1WDNKbGMzVnNkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUnlaV3BsWTNRb1pXNTFiV1Z5WVhSdmNpNXdjbTl0YVhObExDQmxiblZ0WlhKaGRHOXlMbDkyWVd4cFpHRjBhVzl1UlhKeWIzSW9LU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpHVnVkVzFsY21GMGIzSWtKRVZ1ZFcxbGNtRjBiM0l1Y0hKdmRHOTBlWEJsTGw5MllXeHBaR0YwWlVsdWNIVjBJRDBnWm5WdVkzUnBiMjRvYVc1d2RYUXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa2RYUnBiSE1rSkdselFYSnlZWGtvYVc1d2RYUXBPMXh1SUNBZ0lIMDdYRzVjYmlBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa1pXNTFiV1Z5WVhSdmNpUWtSVzUxYldWeVlYUnZjaTV3Y205MGIzUjVjR1V1WDNaaGJHbGtZWFJwYjI1RmNuSnZjaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QkZjbkp2Y2lnblFYSnlZWGtnVFdWMGFHOWtjeUJ0ZFhOMElHSmxJSEJ5YjNacFpHVmtJR0Z1SUVGeWNtRjVKeWs3WEc0Z0lDQWdmVHRjYmx4dUlDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUmxiblZ0WlhKaGRHOXlKQ1JGYm5WdFpYSmhkRzl5TG5CeWIzUnZkSGx3WlM1ZmFXNXBkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVmY21WemRXeDBJRDBnYm1WM0lFRnljbUY1S0hSb2FYTXViR1Z1WjNSb0tUdGNiaUFnSUNCOU8xeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUmxiblZ0WlhKaGRHOXlKQ1JrWldaaGRXeDBJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR1Z1ZFcxbGNtRjBiM0lrSkVWdWRXMWxjbUYwYjNJN1hHNWNiaUFnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWlc1MWJXVnlZWFJ2Y2lRa1JXNTFiV1Z5WVhSdmNpNXdjbTkwYjNSNWNHVXVYMlZ1ZFcxbGNtRjBaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2RtRnlJR1Z1ZFcxbGNtRjBiM0lnUFNCMGFHbHpPMXh1WEc0Z0lDQWdJQ0IyWVhJZ2JHVnVaM1JvSUNBOUlHVnVkVzFsY21GMGIzSXViR1Z1WjNSb08xeHVJQ0FnSUNBZ2RtRnlJSEJ5YjIxcGMyVWdQU0JsYm5WdFpYSmhkRzl5TG5CeWIyMXBjMlU3WEc0Z0lDQWdJQ0IyWVhJZ2FXNXdkWFFnSUNBOUlHVnVkVzFsY21GMGIzSXVYMmx1Y0hWME8xeHVYRzRnSUNBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2NISnZiV2x6WlM1ZmMzUmhkR1VnUFQwOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pGQkZUa1JKVGtjZ0ppWWdhU0E4SUd4bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1WDJWaFkyaEZiblJ5ZVNocGJuQjFkRnRwWFN3Z2FTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSbGJuVnRaWEpoZEc5eUpDUkZiblZ0WlhKaGRHOXlMbkJ5YjNSdmRIbHdaUzVmWldGamFFVnVkSEo1SUQwZ1puVnVZM1JwYjI0b1pXNTBjbmtzSUdrcElIdGNiaUFnSUNBZ0lIWmhjaUJsYm5WdFpYSmhkRzl5SUQwZ2RHaHBjenRjYmlBZ0lDQWdJSFpoY2lCaklEMGdaVzUxYldWeVlYUnZjaTVmYVc1emRHRnVZMlZEYjI1emRISjFZM1J2Y2p0Y2JseHVJQ0FnSUNBZ2FXWWdLR3hwWWlSbGN6WWtjSEp2YldselpTUjFkR2xzY3lRa2FYTk5ZWGxpWlZSb1pXNWhZbXhsS0dWdWRISjVLU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9aVzUwY25rdVkyOXVjM1J5ZFdOMGIzSWdQVDA5SUdNZ0ppWWdaVzUwY25rdVgzTjBZWFJsSUNFOVBTQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlFSVTVFU1U1SEtTQjdYRzRnSUNBZ0lDQWdJQ0FnWlc1MGNua3VYMjl1WlhKeWIzSWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1WDNObGRIUnNaV1JCZENobGJuUnllUzVmYzNSaGRHVXNJR2tzSUdWdWRISjVMbDl5WlhOMWJIUXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUdWdWRXMWxjbUYwYjNJdVgzZHBiR3hUWlhSMGJHVkJkQ2hqTG5KbGMyOXNkbVVvWlc1MGNua3BMQ0JwS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1pXNTFiV1Z5WVhSdmNpNWZjbVZ0WVdsdWFXNW5MUzA3WEc0Z0lDQWdJQ0FnSUdWdWRXMWxjbUYwYjNJdVgzSmxjM1ZzZEZ0cFhTQTlJR1Z1ZEhKNU8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwN1hHNWNiaUFnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWlc1MWJXVnlZWFJ2Y2lRa1JXNTFiV1Z5WVhSdmNpNXdjbTkwYjNSNWNHVXVYM05sZEhSc1pXUkJkQ0E5SUdaMWJtTjBhVzl1S0hOMFlYUmxMQ0JwTENCMllXeDFaU2tnZTF4dUlDQWdJQ0FnZG1GeUlHVnVkVzFsY21GMGIzSWdQU0IwYUdsek8xeHVJQ0FnSUNBZ2RtRnlJSEJ5YjIxcGMyVWdQU0JsYm5WdFpYSmhkRzl5TG5CeWIyMXBjMlU3WEc1Y2JpQWdJQ0FnSUdsbUlDaHdjbTl0YVhObExsOXpkR0YwWlNBOVBUMGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtVRVZPUkVsT1J5a2dlMXh1SUNBZ0lDQWdJQ0JsYm5WdFpYSmhkRzl5TGw5eVpXMWhhVzVwYm1jdExUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb2MzUmhkR1VnUFQwOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pGSkZTa1ZEVkVWRUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WcVpXTjBLSEJ5YjIxcGMyVXNJSFpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0JsYm5WdFpYSmhkRzl5TGw5eVpYTjFiSFJiYVYwZ1BTQjJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnBaaUFvWlc1MWJXVnlZWFJ2Y2k1ZmNtVnRZV2x1YVc1bklEMDlQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHWjFiR1pwYkd3b2NISnZiV2x6WlN3Z1pXNTFiV1Z5WVhSdmNpNWZjbVZ6ZFd4MEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVYRzRnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdWdWRXMWxjbUYwYjNJa0pFVnVkVzFsY21GMGIzSXVjSEp2ZEc5MGVYQmxMbDkzYVd4c1UyVjBkR3hsUVhRZ1BTQm1kVzVqZEdsdmJpaHdjbTl0YVhObExDQnBLU0I3WEc0Z0lDQWdJQ0IyWVhJZ1pXNTFiV1Z5WVhSdmNpQTlJSFJvYVhNN1hHNWNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pITjFZbk5qY21saVpTaHdjbTl0YVhObExDQjFibVJsWm1sdVpXUXNJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1WDNObGRIUnNaV1JCZENoc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSR1ZVeEdTVXhNUlVRc0lHa3NJSFpoYkhWbEtUdGNiaUFnSUNBZ0lIMHNJR1oxYm1OMGFXOXVLSEpsWVhOdmJpa2dlMXh1SUNBZ0lDQWdJQ0JsYm5WdFpYSmhkRzl5TGw5elpYUjBiR1ZrUVhRb2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1VrVktSVU5VUlVRc0lHa3NJSEpsWVhOdmJpazdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlPMXh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkdGc2JDUWtZV3hzS0dWdWRISnBaWE1wSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdWdWRXMWxjbUYwYjNJa0pHUmxabUYxYkhRb2RHaHBjeXdnWlc1MGNtbGxjeWt1Y0hKdmJXbHpaVHRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpHRnNiQ1FrWkdWbVlYVnNkQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKR0ZzYkNRa1lXeHNPMXh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkhKaFkyVWtKSEpoWTJVb1pXNTBjbWxsY3lrZ2UxeHVJQ0FnSUNBZ0x5cHFjMmhwYm5RZ2RtRnNhV1IwYUdsek9uUnlkV1VnS2k5Y2JpQWdJQ0FnSUhaaGNpQkRiMjV6ZEhKMVkzUnZjaUE5SUhSb2FYTTdYRzVjYmlBZ0lDQWdJSFpoY2lCd2NtOXRhWE5sSUQwZ2JtVjNJRU52Ym5OMGNuVmpkRzl5S0d4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkc1dmIzQXBPMXh1WEc0Z0lDQWdJQ0JwWmlBb0lXeHBZaVJsY3pZa2NISnZiV2x6WlNSMWRHbHNjeVFrYVhOQmNuSmhlU2hsYm5SeWFXVnpLU2tnZTF4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpXcGxZM1FvY0hKdmJXbHpaU3dnYm1WM0lGUjVjR1ZGY25KdmNpZ25XVzkxSUcxMWMzUWdjR0Z6Y3lCaGJpQmhjbkpoZVNCMGJ5QnlZV05sTGljcEtUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIQnliMjFwYzJVN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lIWmhjaUJzWlc1bmRHZ2dQU0JsYm5SeWFXVnpMbXhsYm1kMGFEdGNibHh1SUNBZ0lDQWdablZ1WTNScGIyNGdiMjVHZFd4bWFXeHNiV1Z1ZENoMllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpYTnZiSFpsS0hCeWIyMXBjMlVzSUhaaGJIVmxLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWm5WdVkzUnBiMjRnYjI1U1pXcGxZM1JwYjI0b2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pISmxhbVZqZENod2NtOXRhWE5sTENCeVpXRnpiMjRwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnY0hKdmJXbHpaUzVmYzNSaGRHVWdQVDA5SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkZCRlRrUkpUa2NnSmlZZ2FTQThJR3hsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pITjFZbk5qY21saVpTaERiMjV6ZEhKMVkzUnZjaTV5WlhOdmJIWmxLR1Z1ZEhKcFpYTmJhVjBwTENCMWJtUmxabWx1WldRc0lHOXVSblZzWm1sc2JHMWxiblFzSUc5dVVtVnFaV04wYVc5dUtUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdjbVYwZFhKdUlIQnliMjFwYzJVN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0hKdmJXbHpaU1J5WVdObEpDUmtaV1poZFd4MElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa2NtRmpaU1FrY21GalpUdGNiaUFnSUNCbWRXNWpkR2x2YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0hKdmJXbHpaU1J5WlhOdmJIWmxKQ1J5WlhOdmJIWmxLRzlpYW1WamRDa2dlMXh1SUNBZ0lDQWdMeXBxYzJocGJuUWdkbUZzYVdSMGFHbHpPblJ5ZFdVZ0tpOWNiaUFnSUNBZ0lIWmhjaUJEYjI1emRISjFZM1J2Y2lBOUlIUm9hWE03WEc1Y2JpQWdJQ0FnSUdsbUlDaHZZbXBsWTNRZ0ppWWdkSGx3Wlc5bUlHOWlhbVZqZENBOVBUMGdKMjlpYW1WamRDY2dKaVlnYjJKcVpXTjBMbU52Ym5OMGNuVmpkRzl5SUQwOVBTQkRiMjV6ZEhKMVkzUnZjaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYjJKcVpXTjBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IyWVhJZ2NISnZiV2x6WlNBOUlHNWxkeUJEYjI1emRISjFZM1J2Y2loc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSdWIyOXdLVHRjYmlBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKSEpsYzI5c2RtVW9jSEp2YldselpTd2diMkpxWldOMEtUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCd2NtOXRhWE5sTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtjbVZ6YjJ4MlpTUWtaR1ZtWVhWc2RDQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpISmxjMjlzZG1Va0pISmxjMjlzZG1VN1hHNGdJQ0FnWm5WdVkzUnBiMjRnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtjbVZxWldOMEpDUnlaV3BsWTNRb2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBdkttcHphR2x1ZENCMllXeHBaSFJvYVhNNmRISjFaU0FxTDF4dUlDQWdJQ0FnZG1GeUlFTnZibk4wY25WamRHOXlJRDBnZEdocGN6dGNiaUFnSUNBZ0lIWmhjaUJ3Y205dGFYTmxJRDBnYm1WM0lFTnZibk4wY25WamRHOXlLR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRzV2YjNBcE8xeHVJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa2NtVnFaV04wS0hCeWIyMXBjMlVzSUhKbFlYTnZiaWs3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdjSEp2YldselpUdGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkhKbGFtVmpkQ1FrWkdWbVlYVnNkQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKSEpsYW1WamRDUWtjbVZxWldOME8xeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUmpiM1Z1ZEdWeUlEMGdNRHRjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUnVaV1ZrYzFKbGMyOXNkbVZ5S0NrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpZ25XVzkxSUcxMWMzUWdjR0Z6Y3lCaElISmxjMjlzZG1WeUlHWjFibU4wYVc5dUlHRnpJSFJvWlNCbWFYSnpkQ0JoY21kMWJXVnVkQ0IwYnlCMGFHVWdjSEp2YldselpTQmpiMjV6ZEhKMVkzUnZjaWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUnVaV1ZrYzA1bGR5Z3BJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvWENKR1lXbHNaV1FnZEc4Z1kyOXVjM1J5ZFdOMElDZFFjbTl0YVhObEp6b2dVR3hsWVhObElIVnpaU0IwYUdVZ0oyNWxkeWNnYjNCbGNtRjBiM0lzSUhSb2FYTWdiMkpxWldOMElHTnZibk4wY25WamRHOXlJR05oYm01dmRDQmlaU0JqWVd4c1pXUWdZWE1nWVNCbWRXNWpkR2x2Ymk1Y0lpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUmtaV1poZFd4MElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pGQnliMjFwYzJVN1hHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNCUWNtOXRhWE5sSUc5aWFtVmpkSE1nY21Wd2NtVnpaVzUwSUhSb1pTQmxkbVZ1ZEhWaGJDQnlaWE4xYkhRZ2IyWWdZVzRnWVhONWJtTm9jbTl1YjNWeklHOXdaWEpoZEdsdmJpNGdWR2hsWEc0Z0lDQWdJQ0J3Y21sdFlYSjVJSGRoZVNCdlppQnBiblJsY21GamRHbHVaeUIzYVhSb0lHRWdjSEp2YldselpTQnBjeUIwYUhKdmRXZG9JR2wwY3lCZ2RHaGxibUFnYldWMGFHOWtMQ0IzYUdsamFGeHVJQ0FnSUNBZ2NtVm5hWE4wWlhKeklHTmhiR3hpWVdOcmN5QjBieUJ5WldObGFYWmxJR1ZwZEdobGNpQmhJSEJ5YjIxcGMyVW5jeUJsZG1WdWRIVmhiQ0IyWVd4MVpTQnZjaUIwYUdVZ2NtVmhjMjl1WEc0Z0lDQWdJQ0IzYUhrZ2RHaGxJSEJ5YjIxcGMyVWdZMkZ1Ym05MElHSmxJR1oxYkdacGJHeGxaQzVjYmx4dUlDQWdJQ0FnVkdWeWJXbHViMnh2WjNsY2JpQWdJQ0FnSUMwdExTMHRMUzB0TFMwdFhHNWNiaUFnSUNBZ0lDMGdZSEJ5YjIxcGMyVmdJR2x6SUdGdUlHOWlhbVZqZENCdmNpQm1kVzVqZEdsdmJpQjNhWFJvSUdFZ1lIUm9aVzVnSUcxbGRHaHZaQ0IzYUc5elpTQmlaV2hoZG1sdmNpQmpiMjVtYjNKdGN5QjBieUIwYUdseklITndaV05wWm1sallYUnBiMjR1WEc0Z0lDQWdJQ0F0SUdCMGFHVnVZV0pzWldBZ2FYTWdZVzRnYjJKcVpXTjBJRzl5SUdaMWJtTjBhVzl1SUhSb1lYUWdaR1ZtYVc1bGN5QmhJR0IwYUdWdVlDQnRaWFJvYjJRdVhHNGdJQ0FnSUNBdElHQjJZV3gxWldBZ2FYTWdZVzU1SUd4bFoyRnNJRXBoZG1GVFkzSnBjSFFnZG1Gc2RXVWdLR2x1WTJ4MVpHbHVaeUIxYm1SbFptbHVaV1FzSUdFZ2RHaGxibUZpYkdVc0lHOXlJR0VnY0hKdmJXbHpaU2t1WEc0Z0lDQWdJQ0F0SUdCbGVHTmxjSFJwYjI1Z0lHbHpJR0VnZG1Gc2RXVWdkR2hoZENCcGN5QjBhSEp2ZDI0Z2RYTnBibWNnZEdobElIUm9jbTkzSUhOMFlYUmxiV1Z1ZEM1Y2JpQWdJQ0FnSUMwZ1lISmxZWE52Ym1BZ2FYTWdZU0IyWVd4MVpTQjBhR0YwSUdsdVpHbGpZWFJsY3lCM2FIa2dZU0J3Y205dGFYTmxJSGRoY3lCeVpXcGxZM1JsWkM1Y2JpQWdJQ0FnSUMwZ1lITmxkSFJzWldSZ0lIUm9aU0JtYVc1aGJDQnlaWE4wYVc1bklITjBZWFJsSUc5bUlHRWdjSEp2YldselpTd2dablZzWm1sc2JHVmtJRzl5SUhKbGFtVmpkR1ZrTGx4dVhHNGdJQ0FnSUNCQklIQnliMjFwYzJVZ1kyRnVJR0psSUdsdUlHOXVaU0J2WmlCMGFISmxaU0J6ZEdGMFpYTTZJSEJsYm1ScGJtY3NJR1oxYkdacGJHeGxaQ3dnYjNJZ2NtVnFaV04wWldRdVhHNWNiaUFnSUNBZ0lGQnliMjFwYzJWeklIUm9ZWFFnWVhKbElHWjFiR1pwYkd4bFpDQm9ZWFpsSUdFZ1puVnNabWxzYkcxbGJuUWdkbUZzZFdVZ1lXNWtJR0Z5WlNCcGJpQjBhR1VnWm5Wc1ptbHNiR1ZrWEc0Z0lDQWdJQ0J6ZEdGMFpTNGdJRkJ5YjIxcGMyVnpJSFJvWVhRZ1lYSmxJSEpsYW1WamRHVmtJR2hoZG1VZ1lTQnlaV3BsWTNScGIyNGdjbVZoYzI5dUlHRnVaQ0JoY21VZ2FXNGdkR2hsWEc0Z0lDQWdJQ0J5WldwbFkzUmxaQ0J6ZEdGMFpTNGdJRUVnWm5Wc1ptbHNiRzFsYm5RZ2RtRnNkV1VnYVhNZ2JtVjJaWElnWVNCMGFHVnVZV0pzWlM1Y2JseHVJQ0FnSUNBZ1VISnZiV2x6WlhNZ1kyRnVJR0ZzYzI4Z1ltVWdjMkZwWkNCMGJ5QXFjbVZ6YjJ4MlpTb2dZU0IyWVd4MVpTNGdJRWxtSUhSb2FYTWdkbUZzZFdVZ2FYTWdZV3h6YnlCaFhHNGdJQ0FnSUNCd2NtOXRhWE5sTENCMGFHVnVJSFJvWlNCdmNtbG5hVzVoYkNCd2NtOXRhWE5sSjNNZ2MyVjBkR3hsWkNCemRHRjBaU0IzYVd4c0lHMWhkR05vSUhSb1pTQjJZV3gxWlNkelhHNGdJQ0FnSUNCelpYUjBiR1ZrSUhOMFlYUmxMaUFnVTI4Z1lTQndjbTl0YVhObElIUm9ZWFFnS25KbGMyOXNkbVZ6S2lCaElIQnliMjFwYzJVZ2RHaGhkQ0J5WldwbFkzUnpJSGRwYkd4Y2JpQWdJQ0FnSUdsMGMyVnNaaUJ5WldwbFkzUXNJR0Z1WkNCaElIQnliMjFwYzJVZ2RHaGhkQ0FxY21WemIyeDJaWE1xSUdFZ2NISnZiV2x6WlNCMGFHRjBJR1oxYkdacGJHeHpJSGRwYkd4Y2JpQWdJQ0FnSUdsMGMyVnNaaUJtZFd4bWFXeHNMbHh1WEc1Y2JpQWdJQ0FnSUVKaGMybGpJRlZ6WVdkbE9seHVJQ0FnSUNBZ0xTMHRMUzB0TFMwdExTMHRYRzVjYmlBZ0lDQWdJR0JnWUdwelhHNGdJQ0FnSUNCMllYSWdjSEp2YldselpTQTlJRzVsZHlCUWNtOXRhWE5sS0daMWJtTjBhVzl1S0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnZTF4dUlDQWdJQ0FnSUNBdkx5QnZiaUJ6ZFdOalpYTnpYRzRnSUNBZ0lDQWdJSEpsYzI5c2RtVW9kbUZzZFdVcE8xeHVYRzRnSUNBZ0lDQWdJQzh2SUc5dUlHWmhhV3gxY21WY2JpQWdJQ0FnSUNBZ2NtVnFaV04wS0hKbFlYTnZiaWs3WEc0Z0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ2NISnZiV2x6WlM1MGFHVnVLR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJQzh2SUc5dUlHWjFiR1pwYkd4dFpXNTBYRzRnSUNBZ0lDQjlMQ0JtZFc1amRHbHZiaWh5WldGemIyNHBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2IyNGdjbVZxWldOMGFXOXVYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJR0JnWUZ4dVhHNGdJQ0FnSUNCQlpIWmhibU5sWkNCVmMyRm5aVHBjYmlBZ0lDQWdJQzB0TFMwdExTMHRMUzB0TFMwdExWeHVYRzRnSUNBZ0lDQlFjbTl0YVhObGN5QnphR2x1WlNCM2FHVnVJR0ZpYzNSeVlXTjBhVzVuSUdGM1lYa2dZWE41Ym1Ob2NtOXViM1Z6SUdsdWRHVnlZV04wYVc5dWN5QnpkV05vSUdGelhHNGdJQ0FnSUNCZ1dFMU1TSFIwY0ZKbGNYVmxjM1JnY3k1Y2JseHVJQ0FnSUNBZ1lHQmdhbk5jYmlBZ0lDQWdJR1oxYm1OMGFXOXVJR2RsZEVwVFQwNG9kWEpzS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTaG1kVzVqZEdsdmJpaHlaWE52YkhabExDQnlaV3BsWTNRcGUxeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCNGFISWdQU0J1WlhjZ1dFMU1TSFIwY0ZKbGNYVmxjM1FvS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJSGhvY2k1dmNHVnVLQ2RIUlZRbkxDQjFjbXdwTzF4dUlDQWdJQ0FnSUNBZ0lIaG9jaTV2Ym5KbFlXUjVjM1JoZEdWamFHRnVaMlVnUFNCb1lXNWtiR1Z5TzF4dUlDQWdJQ0FnSUNBZ0lIaG9jaTV5WlhOd2IyNXpaVlI1Y0dVZ1BTQW5hbk52YmljN1hHNGdJQ0FnSUNBZ0lDQWdlR2h5TG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSjBGalkyVndkQ2NzSUNkaGNIQnNhV05oZEdsdmJpOXFjMjl1SnlrN1hHNGdJQ0FnSUNBZ0lDQWdlR2h5TG5ObGJtUW9LVHRjYmx4dUlDQWdJQ0FnSUNBZ0lHWjFibU4wYVc5dUlHaGhibVJzWlhJb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kR2hwY3k1eVpXRmtlVk4wWVhSbElEMDlQU0IwYUdsekxrUlBUa1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YzNSaGRIVnpJRDA5UFNBeU1EQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxLSFJvYVhNdWNtVnpjRzl1YzJVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvSjJkbGRFcFRUMDQ2SUdBbklDc2dkWEpzSUNzZ0oyQWdabUZwYkdWa0lIZHBkR2dnYzNSaGRIVnpPaUJiSnlBcklIUm9hWE11YzNSaGRIVnpJQ3NnSjEwbktTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1oyVjBTbE5QVGlnbkwzQnZjM1J6TG1wemIyNG5LUzUwYUdWdUtHWjFibU4wYVc5dUtHcHpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdiMjRnWm5Wc1ptbHNiRzFsYm5SY2JpQWdJQ0FnSUgwc0lHWjFibU4wYVc5dUtISmxZWE52YmlrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJ2YmlCeVpXcGxZM1JwYjI1Y2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ1lHQmdYRzVjYmlBZ0lDQWdJRlZ1YkdsclpTQmpZV3hzWW1GamEzTXNJSEJ5YjIxcGMyVnpJR0Z5WlNCbmNtVmhkQ0JqYjIxd2IzTmhZbXhsSUhCeWFXMXBkR2wyWlhNdVhHNWNiaUFnSUNBZ0lHQmdZR3B6WEc0Z0lDQWdJQ0JRY205dGFYTmxMbUZzYkNoYlhHNGdJQ0FnSUNBZ0lHZGxkRXBUVDA0b0p5OXdiM04wY3ljcExGeHVJQ0FnSUNBZ0lDQm5aWFJLVTA5T0tDY3ZZMjl0YldWdWRITW5LVnh1SUNBZ0lDQWdYU2t1ZEdobGJpaG1kVzVqZEdsdmJpaDJZV3gxWlhNcGUxeHVJQ0FnSUNBZ0lDQjJZV3gxWlhOYk1GMGdMeThnUFQ0Z2NHOXpkSE5LVTA5T1hHNGdJQ0FnSUNBZ0lIWmhiSFZsYzFzeFhTQXZMeUE5UGlCamIyMXRaVzUwYzBwVFQwNWNibHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkbUZzZFdWek8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnUUdOc1lYTnpJRkJ5YjIxcGMyVmNiaUFnSUNBZ0lFQndZWEpoYlNCN1puVnVZM1JwYjI1OUlISmxjMjlzZG1WeVhHNGdJQ0FnSUNCVmMyVm1kV3dnWm05eUlIUnZiMnhwYm1jdVhHNGdJQ0FnSUNCQVkyOXVjM1J5ZFdOMGIzSmNiaUFnSUNBcUwxeHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKQ1JRY205dGFYTmxLSEpsYzI5c2RtVnlLU0I3WEc0Z0lDQWdJQ0IwYUdsekxsOXBaQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKQ1JqYjNWdWRHVnlLeXM3WEc0Z0lDQWdJQ0IwYUdsekxsOXpkR0YwWlNBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnSUNBZ0lIUm9hWE11WDNKbGMzVnNkQ0E5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0FnSUhSb2FYTXVYM04xWW5OamNtbGlaWEp6SUQwZ1cxMDdYRzVjYmlBZ0lDQWdJR2xtSUNoc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSdWIyOXdJQ0U5UFNCeVpYTnZiSFpsY2lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVd4cFlpUmxjellrY0hKdmJXbHpaU1IxZEdsc2N5UWthWE5HZFc1amRHbHZiaWh5WlhOdmJIWmxjaWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNRa2JtVmxaSE5TWlhOdmJIWmxjaWdwTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdhV1lnS0NFb2RHaHBjeUJwYm5OMFlXNWpaVzltSUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKQ1JRY205dGFYTmxLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSdVpXVmtjMDVsZHlncE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrYVc1cGRHbGhiR2w2WlZCeWIyMXBjMlVvZEdocGN5d2djbVZ6YjJ4MlpYSXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSUWNtOXRhWE5sTG1Gc2JDQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpHRnNiQ1FrWkdWbVlYVnNkRHRjYmlBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNRa1VISnZiV2x6WlM1eVlXTmxJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtjbUZqWlNRa1pHVm1ZWFZzZER0Y2JpQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtjSEp2YldselpTUWtVSEp2YldselpTNXlaWE52YkhabElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa2NtVnpiMngyWlNRa1pHVm1ZWFZzZER0Y2JpQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtjSEp2YldselpTUWtVSEp2YldselpTNXlaV3BsWTNRZ1BTQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNSeVpXcGxZM1FrSkdSbFptRjFiSFE3WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pGQnliMjFwYzJVdVgzTmxkRk5qYUdWa2RXeGxjaUE5SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpaWFJUWTJobFpIVnNaWEk3WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pGQnliMjFwYzJVdVgzTmxkRUZ6WVhBZ1BTQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYzJWMFFYTmhjRHRjYmlBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNRa1VISnZiV2x6WlM1ZllYTmhjQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUmhjMkZ3TzF4dVhHNGdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtKRkJ5YjIxcGMyVXVjSEp2ZEc5MGVYQmxJRDBnZTF4dUlDQWdJQ0FnWTI5dWMzUnlkV04wYjNJNklHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSUWNtOXRhWE5sTEZ4dVhHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNCVWFHVWdjSEpwYldGeWVTQjNZWGtnYjJZZ2FXNTBaWEpoWTNScGJtY2dkMmwwYUNCaElIQnliMjFwYzJVZ2FYTWdkR2h5YjNWbmFDQnBkSE1nWUhSb1pXNWdJRzFsZEdodlpDeGNiaUFnSUNBZ0lIZG9hV05vSUhKbFoybHpkR1Z5Y3lCallXeHNZbUZqYTNNZ2RHOGdjbVZqWldsMlpTQmxhWFJvWlhJZ1lTQndjbTl0YVhObEozTWdaWFpsYm5SMVlXd2dkbUZzZFdVZ2IzSWdkR2hsWEc0Z0lDQWdJQ0J5WldGemIyNGdkMmg1SUhSb1pTQndjbTl0YVhObElHTmhibTV2ZENCaVpTQm1kV3htYVd4c1pXUXVYRzVjYmlBZ0lDQWdJR0JnWUdwelhHNGdJQ0FnSUNCbWFXNWtWWE5sY2lncExuUm9aVzRvWm5WdVkzUnBiMjRvZFhObGNpbDdYRzRnSUNBZ0lDQWdJQzh2SUhWelpYSWdhWE1nWVhaaGFXeGhZbXhsWEc0Z0lDQWdJQ0I5TENCbWRXNWpkR2x2YmloeVpXRnpiMjRwZTF4dUlDQWdJQ0FnSUNBdkx5QjFjMlZ5SUdseklIVnVZWFpoYVd4aFlteGxMQ0JoYm1RZ2VXOTFJR0Z5WlNCbmFYWmxiaUIwYUdVZ2NtVmhjMjl1SUhkb2VWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnUTJoaGFXNXBibWRjYmlBZ0lDQWdJQzB0TFMwdExTMHRYRzVjYmlBZ0lDQWdJRlJvWlNCeVpYUjFjbTRnZG1Gc2RXVWdiMllnWUhSb1pXNWdJR2x6SUdsMGMyVnNaaUJoSUhCeWIyMXBjMlV1SUNCVWFHbHpJSE5sWTI5dVpDd2dKMlJ2ZDI1emRISmxZVzBuWEc0Z0lDQWdJQ0J3Y205dGFYTmxJR2x6SUhKbGMyOXNkbVZrSUhkcGRHZ2dkR2hsSUhKbGRIVnliaUIyWVd4MVpTQnZaaUIwYUdVZ1ptbHljM1FnY0hKdmJXbHpaU2R6SUdaMWJHWnBiR3h0Wlc1MFhHNGdJQ0FnSUNCdmNpQnlaV3BsWTNScGIyNGdhR0Z1Wkd4bGNpd2diM0lnY21WcVpXTjBaV1FnYVdZZ2RHaGxJR2hoYm1Sc1pYSWdkR2h5YjNkeklHRnVJR1Y0WTJWd2RHbHZiaTVjYmx4dUlDQWdJQ0FnWUdCZ2FuTmNiaUFnSUNBZ0lHWnBibVJWYzJWeUtDa3VkR2hsYmlobWRXNWpkR2x2YmlBb2RYTmxjaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZFhObGNpNXVZVzFsTzF4dUlDQWdJQ0FnZlN3Z1puVnVZM1JwYjI0Z0tISmxZWE52YmlrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z0oyUmxabUYxYkhRZ2JtRnRaU2M3WEc0Z0lDQWdJQ0I5S1M1MGFHVnVLR1oxYm1OMGFXOXVJQ2gxYzJWeVRtRnRaU2tnZTF4dUlDQWdJQ0FnSUNBdkx5QkpaaUJnWm1sdVpGVnpaWEpnSUdaMWJHWnBiR3hsWkN3Z1lIVnpaWEpPWVcxbFlDQjNhV3hzSUdKbElIUm9aU0IxYzJWeUozTWdibUZ0WlN3Z2IzUm9aWEozYVhObElHbDBYRzRnSUNBZ0lDQWdJQzh2SUhkcGJHd2dZbVVnWUNka1pXWmhkV3gwSUc1aGJXVW5ZRnh1SUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0FnSUdacGJtUlZjMlZ5S0NrdWRHaGxiaWhtZFc1amRHbHZiaUFvZFhObGNpa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFp2ZFc1a0lIVnpaWElzSUdKMWRDQnpkR2xzYkNCMWJtaGhjSEI1SnlrN1hHNGdJQ0FnSUNCOUxDQm1kVzVqZEdsdmJpQW9jbVZoYzI5dUtTQjdYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25ZR1pwYm1SVmMyVnlZQ0J5WldwbFkzUmxaQ0JoYm1RZ2QyVW5jbVVnZFc1b1lYQndlU2NwTzF4dUlDQWdJQ0FnZlNrdWRHaGxiaWhtZFc1amRHbHZiaUFvZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2JtVjJaWElnY21WaFkyaGxaRnh1SUNBZ0lDQWdmU3dnWm5WdVkzUnBiMjRnS0hKbFlYTnZiaWtnZTF4dUlDQWdJQ0FnSUNBdkx5QnBaaUJnWm1sdVpGVnpaWEpnSUdaMWJHWnBiR3hsWkN3Z1lISmxZWE52Ym1BZ2QybHNiQ0JpWlNBblJtOTFibVFnZFhObGNpd2dZblYwSUhOMGFXeHNJSFZ1YUdGd2NIa25MbHh1SUNBZ0lDQWdJQ0F2THlCSlppQmdabWx1WkZWelpYSmdJSEpsYW1WamRHVmtMQ0JnY21WaGMyOXVZQ0IzYVd4c0lHSmxJQ2RnWm1sdVpGVnpaWEpnSUhKbGFtVmpkR1ZrSUdGdVpDQjNaU2R5WlNCMWJtaGhjSEI1Snk1Y2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ1lHQmdYRzRnSUNBZ0lDQkpaaUIwYUdVZ1pHOTNibk4wY21WaGJTQndjbTl0YVhObElHUnZaWE1nYm05MElITndaV05wWm5rZ1lTQnlaV3BsWTNScGIyNGdhR0Z1Wkd4bGNpd2djbVZxWldOMGFXOXVJSEpsWVhOdmJuTWdkMmxzYkNCaVpTQndjbTl3WVdkaGRHVmtJR1oxY25Sb1pYSWdaRzkzYm5OMGNtVmhiUzVjYmx4dUlDQWdJQ0FnWUdCZ2FuTmNiaUFnSUNBZ0lHWnBibVJWYzJWeUtDa3VkR2hsYmlobWRXNWpkR2x2YmlBb2RYTmxjaWtnZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1VHVmtZV2R2WjJsallXeEZlR05sY0hScGIyNG9KMVZ3YzNSeVpXRnRJR1Z5Y205eUp5azdYRzRnSUNBZ0lDQjlLUzUwYUdWdUtHWjFibU4wYVc5dUlDaDJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJ1WlhabGNpQnlaV0ZqYUdWa1hHNGdJQ0FnSUNCOUtTNTBhR1Z1S0daMWJtTjBhVzl1SUNoMllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNBdkx5QnVaWFpsY2lCeVpXRmphR1ZrWEc0Z0lDQWdJQ0I5TENCbWRXNWpkR2x2YmlBb2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRlJvWlNCZ1VHVmtaMkZuYjJOcFlXeEZlR05sY0hScGIyNWdJR2x6SUhCeWIzQmhaMkYwWldRZ1lXeHNJSFJvWlNCM1lYa2daRzkzYmlCMGJ5Qm9aWEpsWEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUdCZ1lGeHVYRzRnSUNBZ0lDQkJjM05wYldsc1lYUnBiMjVjYmlBZ0lDQWdJQzB0TFMwdExTMHRMUzB0TFZ4dVhHNGdJQ0FnSUNCVGIyMWxkR2x0WlhNZ2RHaGxJSFpoYkhWbElIbHZkU0IzWVc1MElIUnZJSEJ5YjNCaFoyRjBaU0IwYnlCaElHUnZkMjV6ZEhKbFlXMGdjSEp2YldselpTQmpZVzRnYjI1c2VTQmlaVnh1SUNBZ0lDQWdjbVYwY21sbGRtVmtJR0Z6ZVc1amFISnZibTkxYzJ4NUxpQlVhR2x6SUdOaGJpQmlaU0JoWTJocFpYWmxaQ0JpZVNCeVpYUjFjbTVwYm1jZ1lTQndjbTl0YVhObElHbHVJSFJvWlZ4dUlDQWdJQ0FnWm5Wc1ptbHNiRzFsYm5RZ2IzSWdjbVZxWldOMGFXOXVJR2hoYm1Sc1pYSXVJRlJvWlNCa2IzZHVjM1J5WldGdElIQnliMjFwYzJVZ2QybHNiQ0IwYUdWdUlHSmxJSEJsYm1ScGJtZGNiaUFnSUNBZ0lIVnVkR2xzSUhSb1pTQnlaWFIxY201bFpDQndjbTl0YVhObElHbHpJSE5sZEhSc1pXUXVJRlJvYVhNZ2FYTWdZMkZzYkdWa0lDcGhjM05wYldsc1lYUnBiMjRxTGx4dVhHNGdJQ0FnSUNCZ1lHQnFjMXh1SUNBZ0lDQWdabWx1WkZWelpYSW9LUzUwYUdWdUtHWjFibU4wYVc5dUlDaDFjMlZ5S1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCbWFXNWtRMjl0YldWdWRITkNlVUYxZEdodmNpaDFjMlZ5S1R0Y2JpQWdJQ0FnSUgwcExuUm9aVzRvWm5WdVkzUnBiMjRnS0dOdmJXMWxiblJ6S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRlJvWlNCMWMyVnlKM01nWTI5dGJXVnVkSE1nWVhKbElHNXZkeUJoZG1GcGJHRmliR1ZjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnWUdCZ1hHNWNiaUFnSUNBZ0lFbG1JSFJvWlNCaGMzTnBiV3hwWVhSbFpDQndjbTl0YVhObElISmxhbVZqZEhNc0lIUm9aVzRnZEdobElHUnZkMjV6ZEhKbFlXMGdjSEp2YldselpTQjNhV3hzSUdGc2MyOGdjbVZxWldOMExseHVYRzRnSUNBZ0lDQmdZR0JxYzF4dUlDQWdJQ0FnWm1sdVpGVnpaWElvS1M1MGFHVnVLR1oxYm1OMGFXOXVJQ2gxYzJWeUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQm1hVzVrUTI5dGJXVnVkSE5DZVVGMWRHaHZjaWgxYzJWeUtUdGNiaUFnSUNBZ0lIMHBMblJvWlc0b1puVnVZM1JwYjI0Z0tHTnZiVzFsYm5SektTQjdYRzRnSUNBZ0lDQWdJQzh2SUVsbUlHQm1hVzVrUTI5dGJXVnVkSE5DZVVGMWRHaHZjbUFnWm5Wc1ptbHNiSE1zSUhkbEoyeHNJR2hoZG1VZ2RHaGxJSFpoYkhWbElHaGxjbVZjYmlBZ0lDQWdJSDBzSUdaMWJtTjBhVzl1SUNoeVpXRnpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdTV1lnWUdacGJtUkRiMjF0Wlc1MGMwSjVRWFYwYUc5eVlDQnlaV3BsWTNSekxDQjNaU2RzYkNCb1lYWmxJSFJvWlNCeVpXRnpiMjRnYUdWeVpWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnVTJsdGNHeGxJRVY0WVcxd2JHVmNiaUFnSUNBZ0lDMHRMUzB0TFMwdExTMHRMUzB0WEc1Y2JpQWdJQ0FnSUZONWJtTm9jbTl1YjNWeklFVjRZVzF3YkdWY2JseHVJQ0FnSUNBZ1lHQmdhbUYyWVhOamNtbHdkRnh1SUNBZ0lDQWdkbUZ5SUhKbGMzVnNkRHRjYmx4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdjbVZ6ZFd4MElEMGdabWx1WkZKbGMzVnNkQ2dwTzF4dUlDQWdJQ0FnSUNBdkx5QnpkV05qWlhOelhHNGdJQ0FnSUNCOUlHTmhkR05vS0hKbFlYTnZiaWtnZTF4dUlDQWdJQ0FnSUNBdkx5Qm1ZV2xzZFhKbFhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCZ1lHQmNibHh1SUNBZ0lDQWdSWEp5WW1GamF5QkZlR0Z0Y0d4bFhHNWNiaUFnSUNBZ0lHQmdZR3B6WEc0Z0lDQWdJQ0JtYVc1a1VtVnpkV3gwS0daMWJtTjBhVzl1S0hKbGMzVnNkQ3dnWlhKeUtYdGNiaUFnSUNBZ0lDQWdhV1lnS0dWeWNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUM4dklHWmhhV3gxY21WY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJ6ZFdOalpYTnpYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnWUdCZ1hHNWNiaUFnSUNBZ0lGQnliMjFwYzJVZ1JYaGhiWEJzWlR0Y2JseHVJQ0FnSUNBZ1lHQmdhbUYyWVhOamNtbHdkRnh1SUNBZ0lDQWdabWx1WkZKbGMzVnNkQ2dwTG5Sb1pXNG9ablZ1WTNScGIyNG9jbVZ6ZFd4MEtYdGNiaUFnSUNBZ0lDQWdMeThnYzNWalkyVnpjMXh1SUNBZ0lDQWdmU3dnWm5WdVkzUnBiMjRvY21WaGMyOXVLWHRjYmlBZ0lDQWdJQ0FnTHk4Z1ptRnBiSFZ5WlZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCZ1lHQmNibHh1SUNBZ0lDQWdRV1IyWVc1alpXUWdSWGhoYlhCc1pWeHVJQ0FnSUNBZ0xTMHRMUzB0TFMwdExTMHRMUzFjYmx4dUlDQWdJQ0FnVTNsdVkyaHliMjV2ZFhNZ1JYaGhiWEJzWlZ4dVhHNGdJQ0FnSUNCZ1lHQnFZWFpoYzJOeWFYQjBYRzRnSUNBZ0lDQjJZWElnWVhWMGFHOXlMQ0JpYjI5cmN6dGNibHh1SUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ1lYVjBhRzl5SUQwZ1ptbHVaRUYxZEdodmNpZ3BPMXh1SUNBZ0lDQWdJQ0JpYjI5cmN5QWdQU0JtYVc1a1FtOXZhM05DZVVGMWRHaHZjaWhoZFhSb2IzSXBPMXh1SUNBZ0lDQWdJQ0F2THlCemRXTmpaWE56WEc0Z0lDQWdJQ0I5SUdOaGRHTm9LSEpsWVhOdmJpa2dlMXh1SUNBZ0lDQWdJQ0F2THlCbVlXbHNkWEpsWEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JnWUdCY2JseHVJQ0FnSUNBZ1JYSnlZbUZqYXlCRmVHRnRjR3hsWEc1Y2JpQWdJQ0FnSUdCZ1lHcHpYRzVjYmlBZ0lDQWdJR1oxYm1OMGFXOXVJR1p2ZFc1a1FtOXZhM01vWW05dmEzTXBJSHRjYmx4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCbWRXNWpkR2x2YmlCbVlXbHNkWEpsS0hKbFlYTnZiaWtnZTF4dVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHWnBibVJCZFhSb2IzSW9ablZ1WTNScGIyNG9ZWFYwYUc5eUxDQmxjbklwZTF4dUlDQWdJQ0FnSUNCcFppQW9aWEp5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdabUZwYkhWeVpTaGxjbklwTzF4dUlDQWdJQ0FnSUNBZ0lDOHZJR1poYVd4MWNtVmNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWm1sdVpFSnZiMjlyYzBKNVFYVjBhRzl5S0dGMWRHaHZjaXdnWm5WdVkzUnBiMjRvWW05dmEzTXNJR1Z5Y2lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9aWEp5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnBiSFZ5WlNobGNuSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbWIzVnVaRUp2YjJ0ektHSnZiMnR6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vS0hKbFlYTnZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnBiSFZ5WlNoeVpXRnpiMjRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNobGNuSnZjaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdabUZwYkhWeVpTaGxjbklwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0F2THlCemRXTmpaWE56WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ1lHQmdYRzVjYmlBZ0lDQWdJRkJ5YjIxcGMyVWdSWGhoYlhCc1pUdGNibHh1SUNBZ0lDQWdZR0JnYW1GMllYTmpjbWx3ZEZ4dUlDQWdJQ0FnWm1sdVpFRjFkR2h2Y2lncExseHVJQ0FnSUNBZ0lDQjBhR1Z1S0dacGJtUkNiMjlyYzBKNVFYVjBhRzl5S1M1Y2JpQWdJQ0FnSUNBZ2RHaGxiaWhtZFc1amRHbHZiaWhpYjI5cmN5bDdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1ptOTFibVFnWW05dmEzTmNiaUFnSUNBZ0lIMHBMbU5oZEdOb0tHWjFibU4wYVc5dUtISmxZWE52YmlsN1hHNGdJQ0FnSUNBZ0lDOHZJSE52YldWMGFHbHVaeUIzWlc1MElIZHliMjVuWEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUdCZ1lGeHVYRzRnSUNBZ0lDQkFiV1YwYUc5a0lIUm9aVzVjYmlBZ0lDQWdJRUJ3WVhKaGJTQjdSblZ1WTNScGIyNTlJRzl1Um5Wc1ptbHNiR1ZrWEc0Z0lDQWdJQ0JBY0dGeVlXMGdlMFoxYm1OMGFXOXVmU0J2YmxKbGFtVmpkR1ZrWEc0Z0lDQWdJQ0JWYzJWbWRXd2dabTl5SUhSdmIyeHBibWN1WEc0Z0lDQWdJQ0JBY21WMGRYSnVJSHRRY205dGFYTmxmVnh1SUNBZ0lDb3ZYRzRnSUNBZ0lDQjBhR1Z1T2lCbWRXNWpkR2x2YmlodmJrWjFiR1pwYkd4dFpXNTBMQ0J2YmxKbGFtVmpkR2x2YmlrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnY0dGeVpXNTBJRDBnZEdocGN6dGNiaUFnSUNBZ0lDQWdkbUZ5SUhOMFlYUmxJRDBnY0dGeVpXNTBMbDl6ZEdGMFpUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb2MzUmhkR1VnUFQwOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pFWlZURVpKVEV4RlJDQW1KaUFoYjI1R2RXeG1hV3hzYldWdWRDQjhmQ0J6ZEdGMFpTQTlQVDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrVWtWS1JVTlVSVVFnSmlZZ0lXOXVVbVZxWldOMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCMllYSWdZMmhwYkdRZ1BTQnVaWGNnZEdocGN5NWpiMjV6ZEhKMVkzUnZjaWhzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J1YjI5d0tUdGNiaUFnSUNBZ0lDQWdkbUZ5SUhKbGMzVnNkQ0E5SUhCaGNtVnVkQzVmY21WemRXeDBPMXh1WEc0Z0lDQWdJQ0FnSUdsbUlDaHpkR0YwWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCallXeHNZbUZqYXlBOUlHRnlaM1Z0Wlc1MGMxdHpkR0YwWlNBdElERmRPMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUmhjMkZ3S0daMWJtTjBhVzl1S0NsN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JwYm5admEyVkRZV3hzWW1GamF5aHpkR0YwWlN3Z1kyaHBiR1FzSUdOaGJHeGlZV05yTENCeVpYTjFiSFFwTzF4dUlDQWdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhOMVluTmpjbWxpWlNod1lYSmxiblFzSUdOb2FXeGtMQ0J2YmtaMWJHWnBiR3h0Wlc1MExDQnZibEpsYW1WamRHbHZiaWs3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyaHBiR1E3WEc0Z0lDQWdJQ0I5TEZ4dVhHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNCZ1kyRjBZMmhnSUdseklITnBiWEJzZVNCemRXZGhjaUJtYjNJZ1lIUm9aVzRvZFc1a1pXWnBibVZrTENCdmJsSmxhbVZqZEdsdmJpbGdJSGRvYVdOb0lHMWhhMlZ6SUdsMElIUm9aU0J6WVcxbFhHNGdJQ0FnSUNCaGN5QjBhR1VnWTJGMFkyZ2dZbXh2WTJzZ2IyWWdZU0IwY25rdlkyRjBZMmdnYzNSaGRHVnRaVzUwTGx4dVhHNGdJQ0FnSUNCZ1lHQnFjMXh1SUNBZ0lDQWdablZ1WTNScGIyNGdabWx1WkVGMWRHaHZjaWdwZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjJOdmRXeGtiaWQwSUdacGJtUWdkR2hoZENCaGRYUm9iM0luS1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0x5OGdjM2x1WTJoeWIyNXZkWE5jYmlBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lHWnBibVJCZFhSb2IzSW9LVHRjYmlBZ0lDQWdJSDBnWTJGMFkyZ29jbVZoYzI5dUtTQjdYRzRnSUNBZ0lDQWdJQzh2SUhOdmJXVjBhR2x1WnlCM1pXNTBJSGR5YjI1blhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJR0Z6ZVc1aklIZHBkR2dnY0hKdmJXbHpaWE5jYmlBZ0lDQWdJR1pwYm1SQmRYUm9iM0lvS1M1allYUmphQ2htZFc1amRHbHZiaWh5WldGemIyNHBlMXh1SUNBZ0lDQWdJQ0F2THlCemIyMWxkR2hwYm1jZ2QyVnVkQ0IzY205dVoxeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnUUcxbGRHaHZaQ0JqWVhSamFGeHVJQ0FnSUNBZ1FIQmhjbUZ0SUh0R2RXNWpkR2x2Ym4wZ2IyNVNaV3BsWTNScGIyNWNiaUFnSUNBZ0lGVnpaV1oxYkNCbWIzSWdkRzl2YkdsdVp5NWNiaUFnSUNBZ0lFQnlaWFIxY200Z2UxQnliMjFwYzJWOVhHNGdJQ0FnS2k5Y2JpQWdJQ0FnSUNkallYUmphQ2M2SUdaMWJtTjBhVzl1S0c5dVVtVnFaV04wYVc5dUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5Sb1pXNG9iblZzYkN3Z2IyNVNaV3BsWTNScGIyNHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMDdYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhCdmJIbG1hV3hzSkNSd2IyeDVabWxzYkNncElIdGNiaUFnSUNBZ0lIWmhjaUJzYjJOaGJEdGNibHh1SUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJuYkc5aVlXd2dJVDA5SUNkMWJtUmxabWx1WldRbktTQjdYRzRnSUNBZ0lDQWdJQ0FnYkc5allXd2dQU0JuYkc5aVlXdzdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQnpaV3htSUNFOVBTQW5kVzVrWldacGJtVmtKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHeHZZMkZzSUQwZ2MyVnNaanRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JHOWpZV3dnUFNCR2RXNWpkR2x2YmlnbmNtVjBkWEp1SUhSb2FYTW5LU2dwTzF4dUlDQWdJQ0FnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHdiMng1Wm1sc2JDQm1ZV2xzWldRZ1ltVmpZWFZ6WlNCbmJHOWlZV3dnYjJKcVpXTjBJR2x6SUhWdVlYWmhhV3hoWW14bElHbHVJSFJvYVhNZ1pXNTJhWEp2Ym0xbGJuUW5LVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lIWmhjaUJRSUQwZ2JHOWpZV3d1VUhKdmJXbHpaVHRjYmx4dUlDQWdJQ0FnYVdZZ0tGQWdKaVlnVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzUwYjFOMGNtbHVaeTVqWVd4c0tGQXVjbVZ6YjJ4MlpTZ3BLU0E5UFQwZ0oxdHZZbXBsWTNRZ1VISnZiV2x6WlYwbklDWW1JQ0ZRTG1OaGMzUXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JzYjJOaGJDNVFjbTl0YVhObElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pHUmxabUYxYkhRN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0c5c2VXWnBiR3drSkdSbFptRjFiSFFnUFNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0c5c2VXWnBiR3drSkhCdmJIbG1hV3hzTzF4dVhHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWJXUWtKRVZUTmxCeWIyMXBjMlVnUFNCN1hHNGdJQ0FnSUNBblVISnZiV2x6WlNjNklHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSa1pXWmhkV3gwTEZ4dUlDQWdJQ0FnSjNCdmJIbG1hV3hzSnpvZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhCdmJIbG1hV3hzSkNSa1pXWmhkV3gwWEc0Z0lDQWdmVHRjYmx4dUlDQWdJQzhxSUdkc2IySmhiQ0JrWldacGJtVTZkSEoxWlNCdGIyUjFiR1U2ZEhKMVpTQjNhVzVrYjNjNklIUnlkV1VnS2k5Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdSbFptbHVaU0E5UFQwZ0oyWjFibU4wYVc5dUp5QW1KaUJrWldacGJtVmJKMkZ0WkNkZEtTQjdYRzRnSUNBZ0lDQmtaV1pwYm1Vb1puVnVZM1JwYjI0b0tTQjdJSEpsZEhWeWJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa2RXMWtKQ1JGVXpaUWNtOXRhWE5sT3lCOUtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCdGIyUjFiR1VnSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltSUcxdlpIVnNaVnNuWlhod2IzSjBjeWRkS1NCN1hHNGdJQ0FnSUNCdGIyUjFiR1ZiSjJWNGNHOXlkSE1uWFNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWJXUWtKRVZUTmxCeWIyMXBjMlU3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2gwZVhCbGIyWWdkR2hwY3lBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTmJKMFZUTmxCeWIyMXBjMlVuWFNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWJXUWtKRVZUTmxCeWIyMXBjMlU3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpIQnZiSGxtYVd4c0pDUmtaV1poZFd4MEtDazdYRzU5S1M1allXeHNLSFJvYVhNcE8xeHVYRzRpWFgwPSIsIi8qXG5Db3B5cmlnaHQgKEMpIDIwMTUgRnJlZCBLLiBTY2hvdHQgPGZrc2Nob3R0QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50eWxAZ21haWwuY29tPlxuQ29weXJpZ2h0IChDKSAyMDEzIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+XG5Db3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMgPG1hdGhpYXNAcWl3aS5iZT5cbkNvcHlyaWdodCAoQykgMjAxMiBKb29zdC1XaW0gQm9la2VzdGVpam4gPGpvb3N0LXdpbUBib2VrZXN0ZWlqbi5ubD5cbkNvcHlyaWdodCAoQykgMjAxMiBLcmlzIEtvd2FsIDxrcmlzLmtvd2FsQGNpeGFyLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTIgQXJwYWQgQm9yc29zIDxhcnBhZC5ib3Jzb3NAZ29vZ2xlbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTEgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG5BTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG5JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG4vKmVzbGludCBuby11bmRlZmluZWQ6MCwgbm8tdXNlLWJlZm9yZS1kZWZpbmU6IDAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIHN5bnRheCA9IHJlcXVpcmUoXCIuL2xpYi9zeW50YXhcIiksXG4gICAgdG9rZW5JbmZvID0gcmVxdWlyZShcIi4vbGliL3Rva2VuLWluZm9cIiksXG4gICAgYXN0Tm9kZVR5cGVzID0gcmVxdWlyZShcIi4vbGliL2FzdC1ub2RlLXR5cGVzXCIpLFxuICAgIGFzdE5vZGVGYWN0b3J5ID0gcmVxdWlyZShcIi4vbGliL2FzdC1ub2RlLWZhY3RvcnlcIiksXG4gICAgZGVmYXVsdEZlYXR1cmVzID0gcmVxdWlyZShcIi4vbGliL2ZlYXR1cmVzXCIpLFxuICAgIE1lc3NhZ2VzID0gcmVxdWlyZShcIi4vbGliL21lc3NhZ2VzXCIpLFxuICAgIFhIVE1MRW50aXRpZXMgPSByZXF1aXJlKFwiLi9saWIveGh0bWwtZW50aXRpZXNcIiksXG4gICAgU3RyaW5nTWFwID0gcmVxdWlyZShcIi4vbGliL3N0cmluZy1tYXBcIiksXG4gICAgY29tbWVudEF0dGFjaG1lbnQgPSByZXF1aXJlKFwiLi9saWIvY29tbWVudC1hdHRhY2htZW50XCIpO1xuXG52YXIgVG9rZW4gPSB0b2tlbkluZm8uVG9rZW4sXG4gICAgVG9rZW5OYW1lID0gdG9rZW5JbmZvLlRva2VuTmFtZSxcbiAgICBGbkV4cHJUb2tlbnMgPSB0b2tlbkluZm8uRm5FeHByVG9rZW5zLFxuICAgIFJlZ2V4ID0gc3ludGF4LlJlZ2V4LFxuICAgIFByb3BlcnR5S2luZCxcbiAgICBzb3VyY2UsXG4gICAgc3RyaWN0LFxuICAgIGluZGV4LFxuICAgIGxpbmVOdW1iZXIsXG4gICAgbGluZVN0YXJ0LFxuICAgIGxlbmd0aCxcbiAgICBsb29rYWhlYWQsXG4gICAgc3RhdGUsXG4gICAgZXh0cmE7XG5cblByb3BlcnR5S2luZCA9IHtcbiAgICBEYXRhOiAxLFxuICAgIEdldDogMixcbiAgICBTZXQ6IDRcbn07XG5cblxuLy8gRW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIHRocm93IGFuIGVycm9yLlxuLy8gVGhpcyBpcyBvbmx5IHRvIGhhdmUgYSBiZXR0ZXIgY29udHJhY3Qgc2VtYW50aWMsIGkuZS4gYW5vdGhlciBzYWZldHkgbmV0XG4vLyB0byBjYXRjaCBhIGxvZ2ljIGVycm9yLiBUaGUgY29uZGl0aW9uIHNoYWxsIGJlIGZ1bGZpbGxlZCBpbiBub3JtYWwgY2FzZS5cbi8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBjb25kaXRpb24gb24gYW55IHVzZXIgaW5wdXQuXG5cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBU1NFUlQ6IFwiICsgbWVzc2FnZSk7XG4gICAgfVxufVxuXG4vLyA3LjQgQ29tbWVudHNcblxuZnVuY3Rpb24gYWRkQ29tbWVudCh0eXBlLCB2YWx1ZSwgc3RhcnQsIGVuZCwgbG9jKSB7XG4gICAgdmFyIGNvbW1lbnQ7XG5cbiAgICBhc3NlcnQodHlwZW9mIHN0YXJ0ID09PSBcIm51bWJlclwiLCBcIkNvbW1lbnQgbXVzdCBoYXZlIHZhbGlkIHBvc2l0aW9uXCIpO1xuXG4gICAgLy8gQmVjYXVzZSB0aGUgd2F5IHRoZSBhY3R1YWwgdG9rZW4gaXMgc2Nhbm5lZCwgb2Z0ZW4gdGhlIGNvbW1lbnRzXG4gICAgLy8gKGlmIGFueSkgYXJlIHNraXBwZWQgdHdpY2UgZHVyaW5nIHRoZSBsZXhpY2FsIGFuYWx5c2lzLlxuICAgIC8vIFRodXMsIHdlIG5lZWQgdG8gc2tpcCBhZGRpbmcgYSBjb21tZW50IGlmIHRoZSBjb21tZW50IGFycmF5IGFscmVhZHlcbiAgICAvLyBoYW5kbGVkIGl0LlxuICAgIGlmIChzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID49IHN0YXJ0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUubGFzdENvbW1lbnRTdGFydCA9IHN0YXJ0O1xuXG4gICAgY29tbWVudCA9IHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfTtcbiAgICBpZiAoZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgY29tbWVudC5yYW5nZSA9IFtzdGFydCwgZW5kXTtcbiAgICB9XG4gICAgaWYgKGV4dHJhLmxvYykge1xuICAgICAgICBjb21tZW50LmxvYyA9IGxvYztcbiAgICB9XG4gICAgZXh0cmEuY29tbWVudHMucHVzaChjb21tZW50KTtcblxuICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7XG4gICAgICAgIGNvbW1lbnRBdHRhY2htZW50LmFkZENvbW1lbnQoY29tbWVudCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBza2lwU2luZ2xlTGluZUNvbW1lbnQob2Zmc2V0KSB7XG4gICAgdmFyIHN0YXJ0LCBsb2MsIGNoLCBjb21tZW50O1xuXG4gICAgc3RhcnQgPSBpbmRleCAtIG9mZnNldDtcbiAgICBsb2MgPSB7XG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIG9mZnNldFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIG9mZnNldCwgaW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICBsb2MuZW5kID0ge1xuICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkQ29tbWVudChcIkxpbmVcIiwgY29tbWVudCwgc3RhcnQsIGluZGV4IC0gMSwgbG9jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaCA9PT0gMTMgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAxMCkge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHRyYS5jb21tZW50cykge1xuICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0LCBpbmRleCk7XG4gICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICB9O1xuICAgICAgICBhZGRDb21tZW50KFwiTGluZVwiLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBza2lwTXVsdGlMaW5lQ29tbWVudCgpIHtcbiAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7XG5cbiAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgc3RhcnQgPSBpbmRleCAtIDI7XG4gICAgICAgIGxvYyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMlxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MEEpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7XG4gICAgICAgICAgICAvLyBCbG9jayBjb21tZW50IGVuZHMgd2l0aCBcIiovXCIuXG4gICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIDIsIGluZGV4IC0gMik7XG4gICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBhZGRDb21tZW50KFwiQmxvY2tcIiwgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xufVxuXG5mdW5jdGlvbiBza2lwQ29tbWVudCgpIHtcbiAgICB2YXIgY2gsIHN0YXJ0O1xuXG4gICAgc3RhcnQgPSAoaW5kZXggPT09IDApO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAgICAgICBpZiAoc3ludGF4LmlzV2hpdGVTcGFjZShjaCkpIHtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgwQSkge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIHN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyRikgeyAvLyBVKzAwMkYgaXMgXCIvXCJcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMik7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkgeyAgLy8gVSswMDJBIGlzIFwiKlwiXG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIHNraXBNdWx0aUxpbmVDb21tZW50KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ICYmIGNoID09PSAweDJEKSB7IC8vIFUrMDAyRCBpcyBcIi1cIlxuICAgICAgICAgICAgLy8gVSswMDNFIGlzIFwiPlwiXG4gICAgICAgICAgICBpZiAoKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MkQpICYmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDIpID09PSAweDNFKSkge1xuICAgICAgICAgICAgICAgIC8vIFwiLS0+XCIgaXMgYSBzaW5nbGUtbGluZSBjb21tZW50XG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNDKSB7IC8vIFUrMDAzQyBpcyBcIjxcIlxuICAgICAgICAgICAgaWYgKHNvdXJjZS5zbGljZShpbmRleCArIDEsIGluZGV4ICsgNCkgPT09IFwiIS0tXCIpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgPGBcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgIWBcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWBcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWBcbiAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7XG4gICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwO1xuXG4gICAgbGVuID0gKHByZWZpeCA9PT0gXCJ1XCIpID8gNCA6IDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBzeW50YXguaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgXCIwMTIzNDU2Nzg5YWJjZGVmXCIuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xufVxuXG4vKipcbiAqIFNjYW5zIGFuIGV4dGVuZGVkIHVuaWNvZGUgY29kZSBwb2ludCBlc2NhcGUgc2VxdWVuY2UgZnJvbSBzb3VyY2UuIFRocm93cyBhblxuICogZXJyb3IgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5IG9yIGlmIHRoZSBjb2RlIHBvaW50IHZhbHVlIGlzIHRvbyBsYXJnZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcgY3JlYXRlZCBieSB0aGUgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpIHtcbiAgICB2YXIgY2gsIGNvZGUsIGN1MSwgY3UyO1xuXG4gICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIGNvZGUgPSAwO1xuXG4gICAgLy8gQXQgbGVhc3Qgb25lIGhleCBkaWdpdCBpcyByZXF1aXJlZC5cbiAgICBpZiAoY2ggPT09IFwifVwiKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgaWYgKCFzeW50YXguaXNIZXhEaWdpdChjaCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyBcIjAxMjM0NTY3ODlhYmNkZWZcIi5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGlmIChjb2RlID4gMHgxMEZGRkYgfHwgY2ggIT09IFwifVwiKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIC8vIFVURi0xNiBFbmNvZGluZ1xuICAgIGlmIChjb2RlIDw9IDB4RkZGRikge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICB9XG4gICAgY3UxID0gKChjb2RlIC0gMHgxMDAwMCkgPj4gMTApICsgMHhEODAwO1xuICAgIGN1MiA9ICgoY29kZSAtIDB4MTAwMDApICYgMTAyMykgKyAweERDMDA7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3UxLCBjdTIpO1xufVxuXG5mdW5jdGlvbiBnZXRFc2NhcGVkSWRlbnRpZmllcigpIHtcbiAgICB2YXIgY2gsIGlkO1xuXG4gICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCsrKTtcbiAgICBpZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuXG4gICAgLy8gXCJcXHVcIiAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgaWYgKGNoID09PSAweDVDKSB7XG4gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIGNoID0gc2NhbkhleEVzY2FwZShcInVcIik7XG4gICAgICAgIGlmICghY2ggfHwgY2ggPT09IFwiXFxcXFwiIHx8ICFzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlkID0gY2g7XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoIXN5bnRheC5pc0lkZW50aWZpZXJQYXJ0KGNoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgaWQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICAgICAgLy8gXCJcXHVcIiAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChjaCA9PT0gMHg1Qykge1xuICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHIoMCwgaWQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKFwidVwiKTtcbiAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09IFwiXFxcXFwiIHx8ICFzeW50YXguaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIGdldElkZW50aWZpZXIoKSB7XG4gICAgdmFyIHN0YXJ0LCBjaDtcblxuICAgIHN0YXJ0ID0gaW5kZXgrKztcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIGlmIChjaCA9PT0gMHg1Qykge1xuICAgICAgICAgICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgIGluZGV4ID0gc3RhcnQ7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXNjYXBlZElkZW50aWZpZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCk7XG59XG5cbmZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKCkge1xuICAgIHZhciBzdGFydCwgaWQsIHR5cGU7XG5cbiAgICBzdGFydCA9IGluZGV4O1xuXG4gICAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICBpZCA9IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUMpID8gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSA6IGdldElkZW50aWZpZXIoKTtcblxuICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQgb3IgbGl0ZXJhbCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci5cbiAgICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlkZW50aWZpZXIuXG4gICAgaWYgKGlkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjtcbiAgICB9IGVsc2UgaWYgKHN5bnRheC5pc0tleXdvcmQoaWQsIHN0cmljdCwgZXh0cmEuZWNtYUZlYXR1cmVzKSkge1xuICAgICAgICB0eXBlID0gVG9rZW4uS2V5d29yZDtcbiAgICB9IGVsc2UgaWYgKGlkID09PSBcIm51bGxcIikge1xuICAgICAgICB0eXBlID0gVG9rZW4uTnVsbExpdGVyYWw7XG4gICAgfSBlbHNlIGlmIChpZCA9PT0gXCJ0cnVlXCIgfHwgaWQgPT09IFwiZmFsc2VcIikge1xuICAgICAgICB0eXBlID0gVG9rZW4uQm9vbGVhbkxpdGVyYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgdmFsdWU6IGlkLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuXG4vLyA3LjcgUHVuY3R1YXRvcnNcblxuZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7XG4gICAgdmFyIHN0YXJ0ID0gaW5kZXgsXG4gICAgICAgIGNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCksXG4gICAgICAgIGNvZGUyLFxuICAgICAgICBjaDEgPSBzb3VyY2VbaW5kZXhdLFxuICAgICAgICBjaDIsXG4gICAgICAgIGNoMyxcbiAgICAgICAgY2g0O1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIC8vIENoZWNrIGZvciBtb3N0IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLlxuICAgICAgICBjYXNlIDQwOiAgIC8vICggb3BlbiBicmFja2V0XG4gICAgICAgIGNhc2UgNDE6ICAgLy8gKSBjbG9zZSBicmFja2V0XG4gICAgICAgIGNhc2UgNTk6ICAgLy8gOyBzZW1pY29sb25cbiAgICAgICAgY2FzZSA0NDogICAvLyAsIGNvbW1hXG4gICAgICAgIGNhc2UgOTE6ICAgLy8gW1xuICAgICAgICBjYXNlIDkzOiAgIC8vIF1cbiAgICAgICAgY2FzZSA1ODogICAvLyA6XG4gICAgICAgIGNhc2UgNjM6ICAgLy8gP1xuICAgICAgICBjYXNlIDEyNjogIC8vIH5cbiAgICAgICAgICAgICsraW5kZXg7XG5cbiAgICAgICAgICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjb2RlID09PSA0MCkge1xuICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIGNhc2UgMTIzOiAgLy8geyBvcGVuIGN1cmx5IGJyYWNlXG4gICAgICAgIGNhc2UgMTI1OiAgLy8gfSBjbG9zZSBjdXJseSBicmFjZVxuICAgICAgICAgICAgKytpbmRleDtcblxuICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplICYmIGNvZGUgPT09IDEyMykge1xuICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9va2FoZWFkMiBmdW5jdGlvbiBjYW4gY2F1c2UgdG9rZW5zIHRvIGJlIHNjYW5uZWQgdHdpY2UgYW5kIGluIGRvaW5nIHNvXG4gICAgICAgICAgICAvLyB3b3VsZCB3cmVjayB0aGUgY3VybHkgc3RhY2sgYnkgcHVzaGluZyB0aGUgc2FtZSB0b2tlbiBvbnRvIHRoZSBzdGFjayB0d2ljZS5cbiAgICAgICAgICAgIC8vIGN1cmx5TGFzdEluZGV4IGVuc3VyZXMgZWFjaCB0b2tlbiBpcyBwdXNoZWQgb3IgcG9wcGVkIGV4YWN0bHkgb25jZVxuICAgICAgICAgICAgaWYgKGluZGV4ID4gc3RhdGUuY3VybHlMYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5jdXJseUxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAxMjMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wdXNoKFwie1wiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb2RlMiA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG5cbiAgICAgICAgICAgIC8vIFwiPVwiIChjaGFyICM2MSkgbWFya3MgYW4gYXNzaWdubWVudCBvciBjb21wYXJpc29uIG9wZXJhdG9yLlxuICAgICAgICAgICAgaWYgKGNvZGUyID09PSA2MSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OiAgLy8gJVxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM4OiAgLy8gJlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQyOiAgLy8gKjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MzogIC8vICtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0NTogIC8vIC1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0NzogIC8vIC9cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2MDogIC8vIDxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2MjogIC8vID5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA5NDogIC8vIF5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjQ6IC8vIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDMzOiAvLyAhXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjE6IC8vID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICE9PSBhbmQgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSA2MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS5zbGljZShzdGFydCwgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gUGVlayBtb3JlIGNoYXJhY3RlcnMuXG5cbiAgICBjaDIgPSBzb3VyY2VbaW5kZXggKyAxXTtcbiAgICBjaDMgPSBzb3VyY2VbaW5kZXggKyAyXTtcbiAgICBjaDQgPSBzb3VyY2VbaW5kZXggKyAzXTtcblxuICAgIC8vIDQtY2hhcmFjdGVyIHB1bmN0dWF0b3I6ID4+Pj1cblxuICAgIGlmIChjaDEgPT09IFwiPlwiICYmIGNoMiA9PT0gXCI+XCIgJiYgY2gzID09PSBcIj5cIikge1xuICAgICAgICBpZiAoY2g0ID09PSBcIj1cIikge1xuICAgICAgICAgICAgaW5kZXggKz0gNDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCI+Pj49XCIsXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLWNoYXJhY3RlciBwdW5jdHVhdG9yczogPT09ICE9PSA+Pj4gPDw9ID4+PVxuXG4gICAgaWYgKGNoMSA9PT0gXCI+XCIgJiYgY2gyID09PSBcIj5cIiAmJiBjaDMgPT09IFwiPlwiKSB7XG4gICAgICAgIGluZGV4ICs9IDM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IFwiPj4+XCIsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2gxID09PSBcIjxcIiAmJiBjaDIgPT09IFwiPFwiICYmIGNoMyA9PT0gXCI9XCIpIHtcbiAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogXCI8PD1cIixcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjaDEgPT09IFwiPlwiICYmIGNoMiA9PT0gXCI+XCIgJiYgY2gzID09PSBcIj1cIikge1xuICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBcIj4+PVwiLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVGhlIC4uLiBvcGVyYXRvciAoc3ByZWFkLCByZXN0UGFyYW1zLCBKU1gsIGV0Yy4pXG4gICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy5zcHJlYWQgfHxcbiAgICAgICAgZXh0cmEuZWNtYUZlYXR1cmVzLnJlc3RQYXJhbXMgfHxcbiAgICAgICAgZXh0cmEuZWNtYUZlYXR1cmVzLmV4cGVyaW1lbnRhbE9iamVjdFJlc3RTcHJlYWQgfHxcbiAgICAgICAgKGV4dHJhLmVjbWFGZWF0dXJlcy5qc3ggJiYgc3RhdGUuaW5KU1hTcHJlYWRBdHRyaWJ1dGUpXG4gICAgKSB7XG4gICAgICAgIGlmIChjaDEgPT09IFwiLlwiICYmIGNoMiA9PT0gXCIuXCIgJiYgY2gzID09PSBcIi5cIikge1xuICAgICAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCIuLi5cIixcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE90aGVyIDItY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiArKyAtLSA8PCA+PiAmJiB8fFxuICAgIGlmIChjaDEgPT09IGNoMiAmJiAoXCIrLTw+JnxcIi5pbmRleE9mKGNoMSkgPj0gMCkpIHtcbiAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogY2gxICsgY2gyLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gdGhlID0+IGZvciBhcnJvdyBmdW5jdGlvbnNcbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLmFycm93RnVuY3Rpb25zKSB7XG4gICAgICAgIGlmIChjaDEgPT09IFwiPVwiICYmIGNoMiA9PT0gXCI+XCIpIHtcbiAgICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiPT5cIixcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcIjw+PSErLSolJnxeL1wiLmluZGV4T2YoY2gxKSA+PSAwKSB7XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IGNoMSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjaDEgPT09IFwiLlwiKSB7XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IGNoMSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xufVxuXG4vLyA3LjguMyBOdW1lcmljIExpdGVyYWxzXG5cbmZ1bmN0aW9uIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KSB7XG4gICAgdmFyIG51bWJlciA9IFwiXCI7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKCFzeW50YXguaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsXG4gICAgICAgIHZhbHVlOiBwYXJzZUludChcIjB4XCIgKyBudW1iZXIsIDE2KSxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5CaW5hcnlMaXRlcmFsKHN0YXJ0KSB7XG4gICAgdmFyIGNoLCBudW1iZXIgPSBcIlwiO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgaWYgKGNoICE9PSBcIjBcIiAmJiBjaCAhPT0gXCIxXCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuXG4gICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gb25seSAwYiBvciAwQlxuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cblxuICAgIGlmIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgc3ludGF4LmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCxcbiAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgMiksXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuT2N0YWxMaXRlcmFsKHByZWZpeCwgc3RhcnQpIHtcbiAgICB2YXIgbnVtYmVyLCBvY3RhbDtcblxuICAgIGlmIChzeW50YXguaXNPY3RhbERpZ2l0KHByZWZpeCkpIHtcbiAgICAgICAgb2N0YWwgPSB0cnVlO1xuICAgICAgICBudW1iZXIgPSBcIjBcIiArIHNvdXJjZVtpbmRleCsrXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvY3RhbCA9IGZhbHNlO1xuICAgICAgICArK2luZGV4O1xuICAgICAgICBudW1iZXIgPSBcIlwiO1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN5bnRheC5pc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuXG4gICAgaWYgKCFvY3RhbCAmJiBudW1iZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIG9ubHkgMG8gb3IgME9cbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8IHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCA4KSxcbiAgICAgICAgb2N0YWw6IG9jdGFsLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2Nhbk51bWVyaWNMaXRlcmFsKCkge1xuICAgIHZhciBudW1iZXIsIHN0YXJ0LCBjaDtcblxuICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICBhc3NlcnQoc3ludGF4LmlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpIHx8IChjaCA9PT0gXCIuXCIpLFxuICAgICAgICBcIk51bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludFwiKTtcblxuICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgbnVtYmVyID0gXCJcIjtcbiAgICBpZiAoY2ggIT09IFwiLlwiKSB7XG4gICAgICAgIG51bWJlciA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuXG4gICAgICAgIC8vIEhleCBudW1iZXIgc3RhcnRzIHdpdGggXCIweFwiLlxuICAgICAgICAvLyBPY3RhbCBudW1iZXIgc3RhcnRzIHdpdGggXCIwXCIuXG4gICAgICAgIGlmIChudW1iZXIgPT09IFwiMFwiKSB7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwieFwiIHx8IGNoID09PSBcIlhcIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluYXJ5IG51bWJlciBpbiBFUzYgc3RhcnRzIHdpdGggJzBiJ1xuICAgICAgICAgICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy5iaW5hcnlMaXRlcmFscykge1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gXCJiXCIgfHwgY2ggPT09IFwiQlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuQmluYXJ5TGl0ZXJhbChzdGFydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKGV4dHJhLmVjbWFGZWF0dXJlcy5vY3RhbExpdGVyYWxzICYmIChjaCA9PT0gXCJvXCIgfHwgY2ggPT09IFwiT1wiKSkgfHwgc3ludGF4LmlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk9jdGFsTGl0ZXJhbChjaCwgc3RhcnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZWNpbWFsIG51bWJlciBzdGFydHMgd2l0aCBcIjBcIiBzdWNoIGFzIFwiMDlcIiBpcyBpbGxlZ2FsLlxuICAgICAgICAgICAgaWYgKGNoICYmIHN5bnRheC5pc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB9XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IFwiLlwiKSB7XG4gICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIHdoaWxlIChzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgfVxuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSBcImVcIiB8fCBjaCA9PT0gXCJFXCIpIHtcbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcblxuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gXCIrXCIgfHwgY2ggPT09IFwiLVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgd2hpbGUgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdChudW1iZXIpLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuLyoqXG4gKiBTY2FuIGEgc3RyaW5nIGVzY2FwZSBzZXF1ZW5jZSBhbmQgcmV0dXJuIGl0cyBzcGVjaWFsIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaCBUaGUgc3RhcnRpbmcgY2hhcmFjdGVyIG9mIHRoZSBnaXZlbiBzZXF1ZW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXIgYW5kIGEgZmxhZ1xuICogaWYgdGhlIGVzY2FwZSBzZXF1ZW5jZSB3YXMgYW4gb2N0YWwuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzY2FuRXNjYXBlU2VxdWVuY2UoY2gpIHtcbiAgICB2YXIgY29kZSxcbiAgICAgICAgdW5lc2NhcGVkLFxuICAgICAgICByZXN0b3JlLFxuICAgICAgICBlc2NhcGVkQ2gsXG4gICAgICAgIG9jdGFsID0gZmFsc2U7XG5cbiAgICAvLyBBbiBlc2NhcGUgc2VxdWVuY2UgY2Fubm90IGJlIGVtcHR5XG4gICAgaWYgKCFjaCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICBpZiAoY2ggPT09IFwiXFxyXCIgJiYgc291cmNlW2luZGV4XSA9PT0gXCJcXG5cIikge1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgfVxuICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcInVcIiAmJiBzb3VyY2VbaW5kZXhdID09PSBcIntcIikge1xuICAgICAgICAvLyBIYW5kbGUgRVM2IGV4dGVuZGVkIHVuaWNvZGUgY29kZSBwb2ludCBlc2NhcGUgc2VxdWVuY2VzLlxuICAgICAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLnVuaWNvZGVDb2RlUG9pbnRFc2NhcGVzKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgZXNjYXBlZENoID0gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJ1XCIgfHwgY2ggPT09IFwieFwiKSB7XG4gICAgICAgIC8vIEhhbmRsZSBvdGhlciB1bmljb2RlIGFuZCBoZXggY29kZXMgbm9ybWFsbHlcbiAgICAgICAgcmVzdG9yZSA9IGluZGV4O1xuICAgICAgICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTtcbiAgICAgICAgaWYgKHVuZXNjYXBlZCkge1xuICAgICAgICAgICAgZXNjYXBlZENoID0gdW5lc2NhcGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlO1xuICAgICAgICAgICAgZXNjYXBlZENoID0gY2g7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09PSBcIm5cIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcblwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiclwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFxyXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJ0XCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXHRcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcImJcIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcYlwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiZlwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFxmXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJ2XCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXHZcIjtcbiAgICB9IGVsc2UgaWYgKHN5bnRheC5pc09jdGFsRGlnaXQoY2gpKSB7XG4gICAgICAgIGNvZGUgPSBcIjAxMjM0NTY3XCIuaW5kZXhPZihjaCk7XG5cbiAgICAgICAgLy8gXFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2VcbiAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBzeW50YXguaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICBvY3RhbCA9IHRydWU7XG4gICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyBcIjAxMjM0NTY3XCIuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pO1xuXG4gICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cyB3aXRoIDAsIDEsIDIsIDNcbiAgICAgICAgICAgIGlmIChcIjAxMjNcIi5pbmRleE9mKGNoKSA+PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGluZGV4IDwgbGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIHN5bnRheC5pc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyBcIjAxMjM0NTY3XCIuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWRDaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBlZENoID0gY2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2g6IGVzY2FwZWRDaCxcbiAgICAgICAgb2N0YWw6IG9jdGFsXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblN0cmluZ0xpdGVyYWwoKSB7XG4gICAgdmFyIHN0ciA9IFwiXCIsXG4gICAgICAgIGNoLFxuICAgICAgICBlc2NhcGVkU2VxdWVuY2UsXG4gICAgICAgIG9jdGFsID0gZmFsc2UsXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsXG4gICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1iZXIsXG4gICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0LFxuICAgICAgICBxdW90ZSA9IHNvdXJjZVtpbmRleF07XG5cbiAgICBhc3NlcnQoKHF1b3RlID09PSBcIidcIiB8fCBxdW90ZSA9PT0gXCJcXFwiXCIpLFxuICAgICAgICBcIlN0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZVwiKTtcblxuICAgICsraW5kZXg7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG5cbiAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgICAgICAgIHF1b3RlID0gXCJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICBlc2NhcGVkU2VxdWVuY2UgPSBzY2FuRXNjYXBlU2VxdWVuY2UoY2gpO1xuICAgICAgICAgICAgc3RyICs9IGVzY2FwZWRTZXF1ZW5jZS5jaDtcbiAgICAgICAgICAgIG9jdGFsID0gZXNjYXBlZFNlcXVlbmNlLm9jdGFsIHx8IG9jdGFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1b3RlICE9PSBcIlwiKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLlN0cmluZ0xpdGVyYWwsXG4gICAgICAgIHZhbHVlOiBzdHIsXG4gICAgICAgIG9jdGFsOiBvY3RhbCxcbiAgICAgICAgc3RhcnRMaW5lTnVtYmVyOiBzdGFydExpbmVOdW1iZXIsXG4gICAgICAgIHN0YXJ0TGluZVN0YXJ0OiBzdGFydExpbmVTdGFydCxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbi8qKlxuICogU2NhbiBhIHRlbXBsYXRlIHN0cmluZyBhbmQgcmV0dXJuIGEgdG9rZW4uIFRoaXMgc2NhbnMgYm90aCB0aGUgZmlyc3QgYW5kXG4gKiBzdWJzZXF1ZW50IHBpZWNlcyBvZiBhIHRlbXBsYXRlIHN0cmluZyBhbmQgYXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBiYWNrdGlja1xuICogb3IgdGhlIGNsb3NpbmcgfSBoYXZlIGFscmVhZHkgYmVlbiBzY2FubmVkLlxuICogQHJldHVybnMge1Rva2VufSBUaGUgdGVtcGxhdGUgc3RyaW5nIHRva2VuLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2NhblRlbXBsYXRlKCkge1xuICAgIHZhciBjb29rZWQgPSBcIlwiLFxuICAgICAgICBjaCxcbiAgICAgICAgZXNjYXBlZFNlcXVlbmNlLFxuICAgICAgICBzdGFydCA9IGluZGV4LFxuICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2UsXG4gICAgICAgIHRhaWwgPSBmYWxzZSxcbiAgICAgICAgaGVhZCA9IChzb3VyY2VbaW5kZXhdID09PSBcImBcIik7XG5cbiAgICArK2luZGV4O1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuXG4gICAgICAgIGlmIChjaCA9PT0gXCJgXCIpIHtcbiAgICAgICAgICAgIHRhaWwgPSB0cnVlO1xuICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCIkXCIpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSBcIntcIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb29rZWQgKz0gY2g7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIGVzY2FwZWRTZXF1ZW5jZSA9IHNjYW5Fc2NhcGVTZXF1ZW5jZShjaCk7XG5cbiAgICAgICAgICAgIGlmIChlc2NhcGVkU2VxdWVuY2Uub2N0YWwpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvb2tlZCArPSBlc2NhcGVkU2VxdWVuY2UuY2g7XG5cbiAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgaWYgKGNoID09PSBcIlxcclwiICYmIHNvdXJjZVtpbmRleF0gPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICBjb29rZWQgKz0gXCJcXG5cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvb2tlZCArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGVybWluYXRlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPiBzdGF0ZS5jdXJseUxhc3RJbmRleCkge1xuICAgICAgICBzdGF0ZS5jdXJseUxhc3RJbmRleCA9IGluZGV4O1xuXG4gICAgICAgIGlmICghdGFpbCkge1xuICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wdXNoKFwidGVtcGxhdGVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhlYWQpIHtcbiAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5UZW1wbGF0ZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGNvb2tlZDogY29va2VkLFxuICAgICAgICAgICAgcmF3OiBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAxLCBpbmRleCAtICgodGFpbCkgPyAxIDogMikpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWQ6IGhlYWQsXG4gICAgICAgIHRhaWw6IHRhaWwsXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiB0ZXN0UmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7XG4gICAgdmFyIHRtcCA9IHBhdHRlcm4sXG4gICAgICAgIHZhbGlkRmxhZ3MgPSBcImdtc2lcIjtcblxuICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMucmVnZXhZRmxhZykge1xuICAgICAgICB2YWxpZEZsYWdzICs9IFwieVwiO1xuICAgIH1cblxuICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMucmVnZXhVRmxhZykge1xuICAgICAgICB2YWxpZEZsYWdzICs9IFwidVwiO1xuICAgIH1cblxuICAgIGlmICghUmVnRXhwKFwiXltcIiArIHZhbGlkRmxhZ3MgKyBcIl0qJFwiKS50ZXN0KGZsYWdzKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwRmxhZyk7XG4gICAgfVxuXG5cbiAgICBpZiAoZmxhZ3MuaW5kZXhPZihcInVcIikgPj0gMCkge1xuICAgICAgICAvLyBSZXBsYWNlIGVhY2ggYXN0cmFsIHN5bWJvbCBhbmQgZXZlcnkgVW5pY29kZSBjb2RlIHBvaW50XG4gICAgICAgIC8vIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIGEgc2luZ2xlIEFTQ0lJIHN5bWJvbCB0byBhdm9pZCB0aHJvd2luZyBvblxuICAgICAgICAvLyByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgYXJlIG9ubHkgdmFsaWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGVcbiAgICAgICAgLy8gYC91YCBmbGFnLlxuICAgICAgICAvLyBOb3RlOiByZXBsYWNpbmcgd2l0aCB0aGUgQVNDSUkgc3ltYm9sIGB4YCBtaWdodCBjYXVzZSBmYWxzZVxuICAgICAgICAvLyBuZWdhdGl2ZXMgaW4gdW5saWtlbHkgc2NlbmFyaW9zLiBGb3IgZXhhbXBsZSwgYFtcXHV7NjF9LWJdYCBpcyBhXG4gICAgICAgIC8vIHBlcmZlY3RseSB2YWxpZCBwYXR0ZXJuIHRoYXQgaXMgZXF1aXZhbGVudCB0byBgW2EtYl1gLCBidXQgaXRcbiAgICAgICAgLy8gd291bGQgYmUgcmVwbGFjZWQgYnkgYFt4LWJdYCB3aGljaCB0aHJvd3MgYW4gZXJyb3IuXG4gICAgICAgIHRtcCA9IHRtcFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFx1XFx7KFswLTlhLWZBLUZdKylcXH0vZywgZnVuY3Rpb24gKCQwLCAkMSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZUludCgkMSwgMTYpIDw9IDB4MTBGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInhcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZywgXCJ4XCIpO1xuICAgIH1cblxuICAgIC8vIEZpcnN0LCBkZXRlY3QgaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb25zLlxuICAgIHRyeSB7XG4gICAgICAgIFJlZ0V4cCh0bXApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBmb3IgdGhpcyBwYXR0ZXJuLWZsYWcgcGFpciwgb3JcbiAgICAvLyBgbnVsbGAgaW4gY2FzZSB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBkb2Vzbid0IHN1cHBvcnQgdGhlIGZsYWdzIGl0XG4gICAgLy8gdXNlcy5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cEJvZHkoKSB7XG4gICAgdmFyIGNoLCBzdHIsIGNsYXNzTWFya2VyLCB0ZXJtaW5hdGVkLCBib2R5O1xuXG4gICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIGFzc2VydChjaCA9PT0gXCIvXCIsIFwiUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2hcIik7XG4gICAgc3RyID0gc291cmNlW2luZGV4KytdO1xuXG4gICAgY2xhc3NNYXJrZXIgPSBmYWxzZTtcbiAgICB0ZXJtaW5hdGVkID0gZmFsc2U7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIGlmIChjaCA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgLy8gRUNNQS0yNjIgNy44LjVcbiAgICAgICAgICAgIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2xhc3NNYXJrZXIpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gXCJdXCIpIHtcbiAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNoID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCJbXCIpIHtcbiAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRlcm1pbmF0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTtcbiAgICB9XG5cbiAgICAvLyBFeGNsdWRlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLlxuICAgIGJvZHkgPSBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogYm9keSxcbiAgICAgICAgbGl0ZXJhbDogc3RyXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cEZsYWdzKCkge1xuICAgIHZhciBjaCwgc3RyLCBmbGFncywgcmVzdG9yZTtcblxuICAgIHN0ciA9IFwiXCI7XG4gICAgZmxhZ3MgPSBcIlwiO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIGlmICghc3ludGF4LmlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgaWYgKGNoID09PSBcIlxcXFxcIiAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGNoID09PSBcInVcIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4O1xuICAgICAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZShcInVcIik7XG4gICAgICAgICAgICAgICAgaWYgKGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ciArPSBcIlxcXFx1XCI7IHJlc3RvcmUgPCBpbmRleDsgKytyZXN0b3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gc291cmNlW3Jlc3RvcmVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncyArPSBcInVcIjtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiXFxcXHVcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbGFncyArPSBjaDtcbiAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBmbGFncyxcbiAgICAgICAgbGl0ZXJhbDogc3RyXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cCgpIHtcbiAgICB2YXIgc3RhcnQsIGJvZHksIGZsYWdzLCB2YWx1ZTtcblxuICAgIGxvb2thaGVhZCA9IG51bGw7XG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBzdGFydCA9IGluZGV4O1xuXG4gICAgYm9keSA9IHNjYW5SZWdFeHBCb2R5KCk7XG4gICAgZmxhZ3MgPSBzY2FuUmVnRXhwRmxhZ3MoKTtcbiAgICB2YWx1ZSA9IHRlc3RSZWdFeHAoYm9keS52YWx1ZSwgZmxhZ3MudmFsdWUpO1xuXG4gICAgaWYgKGV4dHJhLnRva2VuaXplKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHJlZ2V4OiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjogYm9keS52YWx1ZSxcbiAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MudmFsdWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBsaXRlcmFsOiBib2R5LmxpdGVyYWwgKyBmbGFncy5saXRlcmFsLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHJlZ2V4OiB7XG4gICAgICAgICAgICBwYXR0ZXJuOiBib2R5LnZhbHVlLFxuICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RSZWdleCgpIHtcbiAgICB2YXIgcG9zLCBsb2MsIHJlZ2V4LCB0b2tlbjtcblxuICAgIHNraXBDb21tZW50KCk7XG5cbiAgICBwb3MgPSBpbmRleDtcbiAgICBsb2MgPSB7XG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJlZ2V4ID0gc2NhblJlZ0V4cCgpO1xuICAgIGxvYy5lbmQgPSB7XG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICB9O1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoIWV4dHJhLnRva2VuaXplKSB7XG4gICAgICAgIC8vIFBvcCB0aGUgcHJldmlvdXMgdG9rZW4sIHdoaWNoIGlzIGxpa2VseSBcIi9cIiBvciBcIi89XCJcbiAgICAgICAgaWYgKGV4dHJhLnRva2Vucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0b2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodG9rZW4ucmFuZ2VbMF0gPT09IHBvcyAmJiB0b2tlbi50eXBlID09PSBcIlB1bmN0dWF0b3JcIikge1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gXCIvXCIgfHwgdG9rZW4udmFsdWUgPT09IFwiLz1cIikge1xuICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnMucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogXCJSZWd1bGFyRXhwcmVzc2lvblwiLFxuICAgICAgICAgICAgdmFsdWU6IHJlZ2V4LmxpdGVyYWwsXG4gICAgICAgICAgICByZWdleDogcmVnZXgucmVnZXgsXG4gICAgICAgICAgICByYW5nZTogW3BvcywgaW5kZXhdLFxuICAgICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2V4O1xufVxuXG5mdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKHRva2VuKSB7XG4gICAgcmV0dXJuIHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgfHxcbiAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCB8fFxuICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCB8fFxuICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbDtcbn1cblxuZnVuY3Rpb24gYWR2YW5jZVNsYXNoKCkge1xuICAgIHZhciBwcmV2VG9rZW4sXG4gICAgICAgIGNoZWNrVG9rZW47XG4gICAgLy8gVXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc3dlZXQuanMvd2lraS9kZXNpZ25cbiAgICBwcmV2VG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGlmICghcHJldlRva2VuKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgYmVmb3JlIHRoYXQ6IGl0IGNhbm5vdCBiZSBhIGRpdmlzaW9uLlxuICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgfVxuICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0gXCJQdW5jdHVhdG9yXCIpIHtcbiAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gXCJdXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09IFwiKVwiKSB7XG4gICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5QYXJlblRva2VuIC0gMV07XG4gICAgICAgICAgICBpZiAoY2hlY2tUb2tlbiAmJlxuICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnR5cGUgPT09IFwiS2V5d29yZFwiICYmXG4gICAgICAgICAgICAgICAgICAgIChjaGVja1Rva2VuLnZhbHVlID09PSBcImlmXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09IFwid2hpbGVcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gXCJmb3JcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gXCJ3aXRoXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICAgIC8vIERpdmlkaW5nIGEgZnVuY3Rpb24gYnkgYW55dGhpbmcgbWFrZXMgbGl0dGxlIHNlbnNlLFxuICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgdG8gY2hlY2sgZm9yIHRoYXQuXG4gICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10gJiZcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10udHlwZSA9PT0gXCJLZXl3b3JkXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBBbm9ueW1vdXMgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdO1xuICAgICAgICAgICAgICAgIGlmICghY2hlY2tUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdLnR5cGUgPT09IFwiS2V5d29yZFwiKSB7XG4gICAgICAgICAgICAgICAgLy8gTmFtZWQgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDVdO1xuICAgICAgICAgICAgICAgIGlmICghY2hlY2tUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrVG9rZW4gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiBpc1xuICAgICAgICAgICAgLy8gYSBkZWNsYXJhdGlvbiBvciBhbiBleHByZXNzaW9uLlxuICAgICAgICAgICAgaWYgKEZuRXhwclRva2Vucy5pbmRleE9mKGNoZWNrVG9rZW4udmFsdWUpID49IDApIHtcbiAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBleHByZXNzaW9uLlxuICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSXQgaXMgYSBkZWNsYXJhdGlvbi5cbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgfVxuICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0gXCJLZXl3b3JkXCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpO1xuICAgIH1cbiAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbn1cblxuZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgICB2YXIgY2gsXG4gICAgICAgIGFsbG93SlNYID0gZXh0cmEuZWNtYUZlYXR1cmVzLmpzeCxcbiAgICAgICAgYWxsb3dUZW1wbGF0ZVN0cmluZ3MgPSBleHRyYS5lY21hRmVhdHVyZXMudGVtcGxhdGVTdHJpbmdzO1xuXG4gICAgLypcbiAgICAgKiBJZiBKU1ggaXNuJ3QgYWxsb3dlZCBvciBKU1ggaXMgYWxsb3dlZCBhbmQgd2UncmUgbm90IGluc2lkZSBhbiBKU1ggY2hpbGQsXG4gICAgICogdGhlbiBza2lwIGFueSBjb21tZW50cy5cbiAgICAgKi9cbiAgICBpZiAoIWFsbG93SlNYIHx8ICFzdGF0ZS5pbkpTWENoaWxkKSB7XG4gICAgICAgIHNraXBDb21tZW50KCk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uRU9GLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtpbmRleCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gaWYgaW5zaWRlIGFuIEpTWCBjaGlsZCwgdGhlbiBhYm9ydCByZWd1bGFyIHRva2VuaXphdGlvblxuICAgIGlmIChhbGxvd0pTWCAmJiBzdGF0ZS5pbkpTWENoaWxkKSB7XG4gICAgICAgIHJldHVybiBhZHZhbmNlSlNYQ2hpbGQoKTtcbiAgICB9XG5cbiAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAgIC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFuZCA7XG4gICAgaWYgKGNoID09PSAweDI4IHx8IGNoID09PSAweDI5IHx8IGNoID09PSAweDNCKSB7XG4gICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgIH1cblxuICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0cyB3aXRoIHNpbmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVvdGUgKFUrMDAyMikuXG4gICAgaWYgKGNoID09PSAweDI3IHx8IGNoID09PSAweDIyKSB7XG4gICAgICAgIGlmIChhbGxvd0pTWCAmJiBzdGF0ZS5pbkpTWFRhZykge1xuICAgICAgICAgICAgcmV0dXJuIHNjYW5KU1hTdHJpbmdMaXRlcmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NhblN0cmluZ0xpdGVyYWwoKTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dKU1ggJiYgc3RhdGUuaW5KU1hUYWcgJiYgc3ludGF4LmlzSlNYSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgICByZXR1cm4gc2NhbkpTWElkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICAvLyBUZW1wbGF0ZSBzdHJpbmdzIHN0YXJ0IHdpdGggYmFja3RpY2sgKFUrMDA5Nikgb3IgY2xvc2luZyBjdXJseSBicmFjZSAoMTI1KSBhbmQgYmFja3RpY2suXG4gICAgaWYgKGFsbG93VGVtcGxhdGVTdHJpbmdzKSB7XG5cbiAgICAgICAgLy8gdGVtcGxhdGUgc3RyaW5ncyBzdGFydCB3aXRoIGJhY2t0aWNrICg5Nikgb3Igb3BlbiBjdXJseSAoMTI1KSBidXQgb25seSBpZiB0aGUgb3BlblxuICAgICAgICAvLyBjdXJseSBjbG9zZXMgYSBwcmV2aW91c2x5IG9wZW5lZCBjdXJseSBmcm9tIGEgdGVtcGxhdGUuXG4gICAgICAgIGlmIChjaCA9PT0gOTYgfHwgKGNoID09PSAxMjUgJiYgc3RhdGUuY3VybHlTdGFja1tzdGF0ZS5jdXJseVN0YWNrLmxlbmd0aCAtIDFdID09PSBcInRlbXBsYXRlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhblRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgICByZXR1cm4gc2NhbklkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICAvLyBEb3QgKC4pIFUrMDAyRSBjYW4gYWxzbyBzdGFydCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaGVuY2UgdGhlIG5lZWRcbiAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuXG4gICAgaWYgKGNoID09PSAweDJFKSB7XG4gICAgICAgIGlmIChzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7XG4gICAgfVxuXG4gICAgLy8gU2xhc2ggKC8pIFUrMDAyRiBjYW4gYWxzbyBzdGFydCBhIHJlZ2V4LlxuICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjaCA9PT0gMHgyRikge1xuICAgICAgICByZXR1cm4gYWR2YW5jZVNsYXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RUb2tlbigpIHtcbiAgICB2YXIgbG9jLCB0b2tlbiwgcmFuZ2UsIHZhbHVlLCBlbnRyeSxcbiAgICAgICAgYWxsb3dKU1ggPSBleHRyYS5lY21hRmVhdHVyZXMuanN4O1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoIWFsbG93SlNYIHx8ICFzdGF0ZS5pbkpTWENoaWxkKSB7XG4gICAgICAgIHNraXBDb21tZW50KCk7XG4gICAgfVxuXG4gICAgbG9jID0ge1xuICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0b2tlbiA9IGFkdmFuY2UoKTtcbiAgICBsb2MuZW5kID0ge1xuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgfTtcblxuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgcmFuZ2UgPSBbdG9rZW4ucmFuZ2VbMF0sIHRva2VuLnJhbmdlWzFdXTtcbiAgICAgICAgdmFsdWUgPSBzb3VyY2Uuc2xpY2UodG9rZW4ucmFuZ2VbMF0sIHRva2VuLnJhbmdlWzFdKTtcbiAgICAgICAgZW50cnkgPSB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbk5hbWVbdG9rZW4udHlwZV0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICByYW5nZTogcmFuZ2UsXG4gICAgICAgICAgICBsb2M6IGxvY1xuICAgICAgICB9O1xuICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHtcbiAgICAgICAgICAgIGVudHJ5LnJlZ2V4ID0ge1xuICAgICAgICAgICAgICAgIHBhdHRlcm46IHRva2VuLnJlZ2V4LnBhdHRlcm4sXG4gICAgICAgICAgICAgICAgZmxhZ3M6IHRva2VuLnJlZ2V4LmZsYWdzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKGVudHJ5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG59XG5cbmZ1bmN0aW9uIGxleCgpIHtcbiAgICB2YXIgdG9rZW47XG5cbiAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICBpbmRleCA9IHRva2VuLnJhbmdlWzFdO1xuICAgIGxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyO1xuICAgIGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDtcblxuICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpO1xuXG4gICAgaW5kZXggPSB0b2tlbi5yYW5nZVsxXTtcbiAgICBsaW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICBsaW5lU3RhcnQgPSB0b2tlbi5saW5lU3RhcnQ7XG5cbiAgICByZXR1cm4gdG9rZW47XG59XG5cbmZ1bmN0aW9uIHBlZWsoKSB7XG4gICAgdmFyIHBvcyxcbiAgICAgICAgbGluZSxcbiAgICAgICAgc3RhcnQ7XG5cbiAgICBwb3MgPSBpbmRleDtcbiAgICBsaW5lID0gbGluZU51bWJlcjtcbiAgICBzdGFydCA9IGxpbmVTdGFydDtcblxuICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpO1xuXG4gICAgaW5kZXggPSBwb3M7XG4gICAgbGluZU51bWJlciA9IGxpbmU7XG4gICAgbGluZVN0YXJ0ID0gc3RhcnQ7XG59XG5cbmZ1bmN0aW9uIGxvb2thaGVhZDIoKSB7XG4gICAgdmFyIGFkdiwgcG9zLCBsaW5lLCBzdGFydCwgcmVzdWx0O1xuXG4gICAgLy8gSWYgd2UgYXJlIGNvbGxlY3RpbmcgdGhlIHRva2VucywgZG9uJ3QgZ3JhYiB0aGUgbmV4dCBvbmUgeWV0LlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgYWR2ID0gKHR5cGVvZiBleHRyYS5hZHZhbmNlID09PSBcImZ1bmN0aW9uXCIpID8gZXh0cmEuYWR2YW5jZSA6IGFkdmFuY2U7XG5cbiAgICBwb3MgPSBpbmRleDtcbiAgICBsaW5lID0gbGluZU51bWJlcjtcbiAgICBzdGFydCA9IGxpbmVTdGFydDtcblxuICAgIC8vIFNjYW4gZm9yIHRoZSBuZXh0IGltbWVkaWF0ZSB0b2tlbi5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAobG9va2FoZWFkID09PSBudWxsKSB7XG4gICAgICAgIGxvb2thaGVhZCA9IGFkdigpO1xuICAgIH1cbiAgICBpbmRleCA9IGxvb2thaGVhZC5yYW5nZVsxXTtcbiAgICBsaW5lTnVtYmVyID0gbG9va2FoZWFkLmxpbmVOdW1iZXI7XG4gICAgbGluZVN0YXJ0ID0gbG9va2FoZWFkLmxpbmVTdGFydDtcblxuICAgIC8vIEdyYWIgdGhlIHRva2VuIHJpZ2h0IGFmdGVyLlxuICAgIHJlc3VsdCA9IGFkdigpO1xuICAgIGluZGV4ID0gcG9zO1xuICAgIGxpbmVOdW1iZXIgPSBsaW5lO1xuICAgIGxpbmVTdGFydCA9IHN0YXJ0O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSlNYXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRRdWFsaWZpZWRKU1hOYW1lKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkpTWElkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdC5uYW1lO1xuICAgIH1cbiAgICBpZiAob2JqZWN0LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5KU1hOYW1lc3BhY2VkTmFtZSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0Lm5hbWVzcGFjZS5uYW1lICsgXCI6XCIgKyBvYmplY3QubmFtZS5uYW1lO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChvYmplY3QudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkpTWE1lbWJlckV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldFF1YWxpZmllZEpTWE5hbWUob2JqZWN0Lm9iamVjdCkgKyBcIi5cIiArXG4gICAgICAgICAgICBnZXRRdWFsaWZpZWRKU1hOYW1lKG9iamVjdC5wcm9wZXJ0eSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aHJvd1VuZXhwZWN0ZWQob2JqZWN0KTtcbn1cblxuZnVuY3Rpb24gc2NhbkpTWElkZW50aWZpZXIoKSB7XG4gICAgdmFyIGNoLCBzdGFydCwgdmFsdWUgPSBcIlwiO1xuXG4gICAgc3RhcnQgPSBpbmRleDtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIGlmICghc3ludGF4LmlzSlNYSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uSlNYSWRlbnRpZmllcixcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhbkpTWEVudGl0eSgpIHtcbiAgICB2YXIgY2gsIHN0ciA9IFwiXCIsIHN0YXJ0ID0gaW5kZXgsIGNvdW50ID0gMCwgY29kZTtcbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgYXNzZXJ0KGNoID09PSBcIiZcIiwgXCJFbnRpdHkgbXVzdCBzdGFydCB3aXRoIGFuIGFtcGVyc2FuZFwiKTtcbiAgICBpbmRleCsrO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBjb3VudCsrIDwgMTApIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIGlmIChjaCA9PT0gXCI7XCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBjaDtcbiAgICB9XG5cbiAgICAvLyBXZWxsLWZvcm1lZCBlbnRpdHkgKGVuZGluZyB3YXMgZm91bmQpLlxuICAgIGlmIChjaCA9PT0gXCI7XCIpIHtcbiAgICAgICAgLy8gTnVtZXJpYyBlbnRpdHkuXG4gICAgICAgIGlmIChzdHJbMF0gPT09IFwiI1wiKSB7XG4gICAgICAgICAgICBpZiAoc3RyWzFdID09PSBcInhcIikge1xuICAgICAgICAgICAgICAgIGNvZGUgPSArKFwiMFwiICsgc3RyLnN1YnN0cigxKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIGxlYWRpbmcgemVyb3MgaW4gb3JkZXIgdG8gYXZvaWQgdHJlYXRpbmcgYXMgb2N0YWwgaW4gb2xkIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgIGNvZGUgPSArc3RyLnN1YnN0cigxKS5yZXBsYWNlKFJlZ2V4LkxlYWRpbmdaZXJvcywgXCJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNOYU4oY29kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgfSBlbHNlIGlmIChYSFRNTEVudGl0aWVzW3N0cl0pIHtcbiAgICAgICAgICAgIHJldHVybiBYSFRNTEVudGl0aWVzW3N0cl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmVhdCBub24tZW50aXR5IHNlcXVlbmNlcyBhcyByZWd1bGFyIHRleHQuXG4gICAgaW5kZXggPSBzdGFydCArIDE7XG4gICAgcmV0dXJuIFwiJlwiO1xufVxuXG5mdW5jdGlvbiBzY2FuSlNYVGV4dChzdG9wQ2hhcnMpIHtcbiAgICB2YXIgY2gsIHN0ciA9IFwiXCIsIHN0YXJ0O1xuICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgaWYgKHN0b3BDaGFycy5pbmRleE9mKGNoKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaCA9PT0gXCImXCIpIHtcbiAgICAgICAgICAgIHN0ciArPSBzY2FuSlNYRW50aXR5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgaWYgKGNoID09PSBcIlxcclwiICYmIHNvdXJjZVtpbmRleF0gPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uSlNYVGV4dCxcbiAgICAgICAgdmFsdWU6IHN0cixcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5KU1hTdHJpbmdMaXRlcmFsKCkge1xuICAgIHZhciBpbm5lclRva2VuLCBxdW90ZSwgc3RhcnQ7XG5cbiAgICBxdW90ZSA9IHNvdXJjZVtpbmRleF07XG4gICAgYXNzZXJ0KChxdW90ZSA9PT0gXCJcXFwiXCIgfHwgcXVvdGUgPT09IFwiJ1wiKSxcbiAgICAgICAgXCJTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRoIGEgcXVvdGVcIik7XG5cbiAgICBzdGFydCA9IGluZGV4O1xuICAgICsraW5kZXg7XG5cbiAgICBpbm5lclRva2VuID0gc2NhbkpTWFRleHQoW3F1b3RlXSk7XG5cbiAgICBpZiAocXVvdGUgIT09IHNvdXJjZVtpbmRleF0pIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgKytpbmRleDtcblxuICAgIGlubmVyVG9rZW4ucmFuZ2UgPSBbc3RhcnQsIGluZGV4XTtcblxuICAgIHJldHVybiBpbm5lclRva2VuO1xufVxuXG4vKlxuICogQmV0d2VlbiBKU1ggb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIChlLmcuIDxmb28+SEVSRTwvZm9vPiksIGFueXRoaW5nIHRoYXRcbiAqIGlzIG5vdCBhbm90aGVyIEpTWCB0YWcgYW5kIGlzIG5vdCBhbiBleHByZXNzaW9uIHdyYXBwZWQgYnkge30gaXMgdGV4dC5cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUpTWENoaWxkKCkge1xuICAgIHZhciBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAgIC8vIHsgKDEyMykgYW5kIDwgKDYwKVxuICAgIGlmIChjaCAhPT0gMTIzICYmIGNoICE9PSA2MCkge1xuICAgICAgICByZXR1cm4gc2NhbkpTWFRleHQoW1wiPFwiLCBcIntcIl0pO1xuICAgIH1cblxuICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWElkZW50aWZpZXIoKSB7XG4gICAgdmFyIHRva2VuLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uSlNYSWRlbnRpZmllcikge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG5cbiAgICB0b2tlbiA9IGxleCgpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWElkZW50aWZpZXIodG9rZW4udmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hOYW1lc3BhY2VkTmFtZSgpIHtcbiAgICB2YXIgbmFtZXNwYWNlLCBuYW1lLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG5hbWVzcGFjZSA9IHBhcnNlSlNYSWRlbnRpZmllcigpO1xuICAgIGV4cGVjdChcIjpcIik7XG4gICAgbmFtZSA9IHBhcnNlSlNYSWRlbnRpZmllcigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYTmFtZXNwYWNlZE5hbWUobmFtZXNwYWNlLCBuYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYTWVtYmVyRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGV4cHIgPSBwYXJzZUpTWElkZW50aWZpZXIoKTtcblxuICAgIHdoaWxlIChtYXRjaChcIi5cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWE1lbWJlckV4cHJlc3Npb24oZXhwciwgcGFyc2VKU1hJZGVudGlmaWVyKCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hFbGVtZW50TmFtZSgpIHtcbiAgICBpZiAobG9va2FoZWFkMigpLnZhbHVlID09PSBcIjpcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VKU1hOYW1lc3BhY2VkTmFtZSgpO1xuICAgIH1cbiAgICBpZiAobG9va2FoZWFkMigpLnZhbHVlID09PSBcIi5cIikge1xuICAgICAgICByZXR1cm4gcGFyc2VKU1hNZW1iZXJFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlSlNYSWRlbnRpZmllcigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEF0dHJpYnV0ZU5hbWUoKSB7XG4gICAgaWYgKGxvb2thaGVhZDIoKS52YWx1ZSA9PT0gXCI6XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNYTmFtZXNwYWNlZE5hbWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VKU1hJZGVudGlmaWVyKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQXR0cmlidXRlVmFsdWUoKSB7XG4gICAgdmFyIHZhbHVlLCBtYXJrZXI7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpO1xuICAgICAgICBpZiAodmFsdWUuZXhwcmVzc2lvbi50eXBlID09PSBhc3ROb2RlVHlwZXMuSlNYRW1wdHlFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIFwiSlNYIGF0dHJpYnV0ZXMgbXVzdCBvbmx5IGJlIGFzc2lnbmVkIGEgbm9uLWVtcHR5IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJleHByZXNzaW9uXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwiPFwiKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSlNYRWxlbWVudCgpO1xuICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLkpTWFRleHQpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIHZhbHVlID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZShsZXgoKSwgc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZEpTWEF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEVtcHR5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlUHJlc2VydmVXaGl0ZXNwYWNlKCk7XG4gICAgd2hpbGUgKHNvdXJjZS5jaGFyQXQoaW5kZXgpICE9PSBcIn1cIikge1xuICAgICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hFbXB0eUV4cHJlc3Npb24oKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpIHtcbiAgICB2YXIgZXhwcmVzc2lvbiwgb3JpZ0luSlNYQ2hpbGQsIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYVGFnID0gZmFsc2U7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgaWYgKG1hdGNoKFwifVwiKSkge1xuICAgICAgICBleHByZXNzaW9uID0gcGFyc2VKU1hFbXB0eUV4cHJlc3Npb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgIHN0YXRlLmluSlNYVGFnID0gb3JpZ0luSlNYVGFnO1xuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEV4cHJlc3Npb25Db250YWluZXIoZXhwcmVzc2lvbikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWFNwcmVhZEF0dHJpYnV0ZSgpIHtcbiAgICB2YXIgZXhwcmVzc2lvbiwgb3JpZ0luSlNYQ2hpbGQsIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYVGFnID0gZmFsc2U7XG4gICAgc3RhdGUuaW5KU1hTcHJlYWRBdHRyaWJ1dGUgPSB0cnVlO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcbiAgICBleHBlY3QoXCIuLi5cIik7XG5cbiAgICBzdGF0ZS5pbkpTWFNwcmVhZEF0dHJpYnV0ZSA9IGZhbHNlO1xuXG4gICAgZXhwcmVzc2lvbiA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblxuICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBvcmlnSW5KU1hDaGlsZDtcbiAgICBzdGF0ZS5pbkpTWFRhZyA9IG9yaWdJbkpTWFRhZztcblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hTcHJlYWRBdHRyaWJ1dGUoZXhwcmVzc2lvbikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEF0dHJpYnV0ZSgpIHtcbiAgICB2YXIgbmFtZSwgbWFya2VyO1xuXG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUoKTtcbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG5hbWUgPSBwYXJzZUpTWEF0dHJpYnV0ZU5hbWUoKTtcblxuICAgIC8vIEhUTUwgZW1wdHkgYXR0cmlidXRlXG4gICAgaWYgKG1hdGNoKFwiPVwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYQXR0cmlidXRlKG5hbWUsIHBhcnNlSlNYQXR0cmlidXRlVmFsdWUoKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEF0dHJpYnV0ZShuYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQ2hpbGQoKSB7XG4gICAgdmFyIHRva2VuLCBtYXJrZXI7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICB0b2tlbiA9IHBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpO1xuICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLkpTWFRleHQpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlUHJlc2VydmVXaGl0ZXNwYWNlKCk7XG4gICAgICAgIHRva2VuID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZShsZXgoKSwgc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW4gPSBwYXJzZUpTWEVsZW1lbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWENsb3NpbmdFbGVtZW50KCkge1xuICAgIHZhciBuYW1lLCBvcmlnSW5KU1hDaGlsZCwgb3JpZ0luSlNYVGFnLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYVGFnID0gdHJ1ZTtcbiAgICBleHBlY3QoXCI8XCIpO1xuICAgIGV4cGVjdChcIi9cIik7XG4gICAgbmFtZSA9IHBhcnNlSlNYRWxlbWVudE5hbWUoKTtcbiAgICAvLyBCZWNhdXNlIGFkdmFuY2UoKSAoY2FsbGVkIGJ5IGxleCgpIGNhbGxlZCBieSBleHBlY3QoKSkgZXhwZWN0cyB0aGVyZVxuICAgIC8vIHRvIGJlIGEgdmFsaWQgdG9rZW4gYWZ0ZXIgPiwgaXQgbmVlZHMgdG8ga25vdyB3aGV0aGVyIHRvIGxvb2sgZm9yIGFcbiAgICAvLyBzdGFuZGFyZCBKUyB0b2tlbiBvciBhbiBKU1ggdGV4dCBub2RlXG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgIHN0YXRlLmluSlNYVGFnID0gb3JpZ0luSlNYVGFnO1xuICAgIGV4cGVjdChcIj5cIik7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYQ2xvc2luZ0VsZW1lbnQobmFtZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWE9wZW5pbmdFbGVtZW50KCkge1xuICAgIHZhciBuYW1lLCBhdHRyaWJ1dGVzID0gW10sIHNlbGZDbG9zaW5nID0gZmFsc2UsIG9yaWdJbkpTWENoaWxkLFxuICAgICAgICBvcmlnSW5KU1hUYWcsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgb3JpZ0luSlNYQ2hpbGQgPSBzdGF0ZS5pbkpTWENoaWxkO1xuICAgIG9yaWdJbkpTWFRhZyA9IHN0YXRlLmluSlNYVGFnO1xuICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBmYWxzZTtcbiAgICBzdGF0ZS5pbkpTWFRhZyA9IHRydWU7XG5cbiAgICBleHBlY3QoXCI8XCIpO1xuXG4gICAgbmFtZSA9IHBhcnNlSlNYRWxlbWVudE5hbWUoKTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJlxuICAgICAgICAgICAgbG9va2FoZWFkLnZhbHVlICE9PSBcIi9cIiAmJlxuICAgICAgICAgICAgbG9va2FoZWFkLnZhbHVlICE9PSBcIj5cIikge1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2gocGFyc2VKU1hBdHRyaWJ1dGUoKSk7XG4gICAgfVxuXG4gICAgc3RhdGUuaW5KU1hUYWcgPSBvcmlnSW5KU1hUYWc7XG5cbiAgICBpZiAobG9va2FoZWFkLnZhbHVlID09PSBcIi9cIikge1xuICAgICAgICBleHBlY3QoXCIvXCIpO1xuICAgICAgICAvLyBCZWNhdXNlIGFkdmFuY2UoKSAoY2FsbGVkIGJ5IGxleCgpIGNhbGxlZCBieSBleHBlY3QoKSkgZXhwZWN0c1xuICAgICAgICAvLyB0aGVyZSB0byBiZSBhIHZhbGlkIHRva2VuIGFmdGVyID4sIGl0IG5lZWRzIHRvIGtub3cgd2hldGhlciB0b1xuICAgICAgICAvLyBsb29rIGZvciBhIHN0YW5kYXJkIEpTIHRva2VuIG9yIGFuIEpTWCB0ZXh0IG5vZGVcbiAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgICAgICBleHBlY3QoXCI+XCIpO1xuICAgICAgICBzZWxmQ2xvc2luZyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IHRydWU7XG4gICAgICAgIGV4cGVjdChcIj5cIik7XG4gICAgfVxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWE9wZW5pbmdFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYRWxlbWVudCgpIHtcbiAgICB2YXIgb3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdFbGVtZW50ID0gbnVsbCwgY2hpbGRyZW4gPSBbXSwgb3JpZ0luSlNYQ2hpbGQsIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgb3BlbmluZ0VsZW1lbnQgPSBwYXJzZUpTWE9wZW5pbmdFbGVtZW50KCk7XG5cbiAgICBpZiAoIW9wZW5pbmdFbGVtZW50LnNlbGZDbG9zaW5nKSB7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlOyAvLyBDYWxsIGxvb2thaGVhZDIoKSB3aXRoIGluSlNYQ2hpbGQgPSBmYWxzZSBiZWNhdXNlIDwvIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBpbiB0aGUgY2hpbGRcbiAgICAgICAgICAgIGlmIChsb29rYWhlYWQudmFsdWUgPT09IFwiPFwiICYmIGxvb2thaGVhZDIoKS52YWx1ZSA9PT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRlLmluSlNYQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChwYXJzZUpTWENoaWxkKCkpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBvcmlnSW5KU1hDaGlsZDtcbiAgICAgICAgc3RhdGUuaW5KU1hUYWcgPSBvcmlnSW5KU1hUYWc7XG4gICAgICAgIGNsb3NpbmdFbGVtZW50ID0gcGFyc2VKU1hDbG9zaW5nRWxlbWVudCgpO1xuICAgICAgICBpZiAoZ2V0UXVhbGlmaWVkSlNYTmFtZShjbG9zaW5nRWxlbWVudC5uYW1lKSAhPT0gZ2V0UXVhbGlmaWVkSlNYTmFtZShvcGVuaW5nRWxlbWVudC5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuRXhwZWN0ZWRKU1hDbG9zaW5nVGFnLCBnZXRRdWFsaWZpZWRKU1hOYW1lKG9wZW5pbmdFbGVtZW50Lm5hbWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgICogV2hlbiAoZXJyb25lb3VzbHkpIHdyaXRpbmcgdHdvIGFkamFjZW50IHRhZ3MgbGlrZVxuICAgICAqXG4gICAgICogICAgIHZhciB4ID0gPGRpdj5vbmU8L2Rpdj48ZGl2PnR3bzwvZGl2PjtcbiAgICAgKlxuICAgICAqIHRoZSBkZWZhdWx0IGVycm9yIG1lc3NhZ2UgaXMgYSBiaXQgaW5jb21wcmVoZW5zaWJsZS4gU2luY2UgaXRcInNcbiAgICAgKiByYXJlbHkgKG5ldmVyPykgdXNlZnVsIHRvIHdyaXRlIGEgbGVzcy10aGFuIHNpZ24gYWZ0ZXIgYW4gSlNYXG4gICAgICogZWxlbWVudCwgd2UgZGlzYWxsb3cgaXQgaGVyZSBpbiB0aGUgcGFyc2VyIGluIG9yZGVyIHRvIHByb3ZpZGUgYVxuICAgICAqIGJldHRlciBlcnJvciBtZXNzYWdlLiAoSW4gdGhlIHJhcmUgY2FzZSB0aGF0IHRoZSBsZXNzLXRoYW4gb3BlcmF0b3JcbiAgICAgKiB3YXMgaW50ZW5kZWQsIHRoZSBsZWZ0IHRhZyBjYW4gYmUgd3JhcHBlZCBpbiBwYXJlbnRoZXNlcy4pXG4gICAgICovXG4gICAgaWYgKCFvcmlnSW5KU1hDaGlsZCAmJiBtYXRjaChcIjxcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLkFkamFjZW50SlNYRWxlbWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEVsZW1lbnQob3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdFbGVtZW50LCBjaGlsZHJlbikpO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9jYXRpb24gbWFya2Vyc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBcHBsaWVzIGxvY2F0aW9uIGluZm9ybWF0aW9uIHRvIHRoZSBnaXZlbiBub2RlIGJ5IHVzaW5nIHRoZSBnaXZlbiBtYXJrZXIuXG4gKiBUaGUgbWFya2VyIGluZGljYXRlcyB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIG5vZGUgaXMgc2FpZCB0byBoYXZlIHRvIGJlZ3VuXG4gKiBpbiB0aGUgc291cmNlIGNvZGUuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFya2VyIFRoZSBtYXJrZXIgdG8gdXNlIGZvciB0aGUgbm9kZS5cbiAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gYXBwbHkgbG9jYXRpb24gaW5mb3JtYXRpb24gdG8uXG4gKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIG5vZGUgdGhhdCB3YXMgcGFzc2VkIGluLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbWFya2VyQXBwbHkobWFya2VyLCBub2RlKSB7XG5cbiAgICAvLyBhZGQgcmFuZ2UgaW5mb3JtYXRpb24gdG8gdGhlIG5vZGUgaWYgcHJlc2VudFxuICAgIGlmIChleHRyYS5yYW5nZSkge1xuICAgICAgICBub2RlLnJhbmdlID0gW21hcmtlci5vZmZzZXQsIGluZGV4XTtcbiAgICB9XG5cbiAgICAvLyBhZGQgbG9jYXRpb24gaW5mb3JtYXRpb24gdGhlIG5vZGUgaWYgcHJlc2VudFxuICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgbm9kZS5sb2MgPSB7XG4gICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgIGxpbmU6IG1hcmtlci5saW5lLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogbWFya2VyLmNvbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBBdHRhY2ggZXh0cmEuc291cmNlIGluZm9ybWF0aW9uIHRvIHRoZSBsb2NhdGlvbiwgaWYgcHJlc2VudFxuICAgICAgICBpZiAoZXh0cmEuc291cmNlKSB7XG4gICAgICAgICAgICBub2RlLmxvYy5zb3VyY2UgPSBleHRyYS5zb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdHRhY2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgY29tbWVudHMgaWYgcmVxdWVzdGVkXG4gICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHtcbiAgICAgICAgY29tbWVudEF0dGFjaG1lbnQucHJvY2Vzc0NvbW1lbnQobm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxvY2F0aW9uIG1hcmtlciBpbiB0aGUgc291cmNlIGNvZGUuIExvY2F0aW9uIG1hcmtlcnMgYXJlIHVzZWQgZm9yXG4gKiB0cmFja2luZyB3aGVyZSB0b2tlbnMgYW5kIG5vZGVzIGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBIG1hcmtlciBvYmplY3Qgb3IgdW5kZWZpbmVkIGlmIHRoZSBwYXJzZXIgZG9lc24ndCBoYXZlXG4gKiAgICAgIGFueSBsb2NhdGlvbiBpbmZvcm1hdGlvbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1hcmtlckNyZWF0ZSgpIHtcblxuICAgIGlmICghZXh0cmEubG9jICYmICFleHRyYS5yYW5nZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHNraXBDb21tZW50KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBvZmZzZXQ6IGluZGV4LFxuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2w6IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbG9jYXRpb24gbWFya2VyIGluIHRoZSBzb3VyY2UgY29kZS4gTG9jYXRpb24gbWFya2VycyBhcmUgdXNlZCBmb3JcbiAqIHRyYWNraW5nIHdoZXJlIHRva2VucyBhbmQgbm9kZXMgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS4gVGhpcyBtZXRob2RcbiAqIGRvZXNuJ3Qgc2tpcCBjb21tZW50cyBvciBleHRyYSB3aGl0ZXNwYWNlIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgSlNYLlxuICogQHJldHVybnMge09iamVjdH0gQSBtYXJrZXIgb2JqZWN0IG9yIHVuZGVmaW5lZCBpZiB0aGUgcGFyc2VyIGRvZXNuJ3QgaGF2ZVxuICogICAgICBhbnkgbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYXJrZXJDcmVhdGVQcmVzZXJ2ZVdoaXRlc3BhY2UoKSB7XG5cbiAgICBpZiAoIWV4dHJhLmxvYyAmJiAhZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBvZmZzZXQ6IGluZGV4LFxuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2w6IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgfTtcbn1cblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ludGF4IFRyZWUgRGVsZWdhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgbGluZSB0ZXJtaW5hdG9yIGJlZm9yZSB0aGUgbmV4dCB0b2tlbi5cblxuZnVuY3Rpb24gcGVla0xpbmVUZXJtaW5hdG9yKCkge1xuICAgIHZhciBwb3MsIGxpbmUsIHN0YXJ0LCBmb3VuZDtcblxuICAgIHBvcyA9IGluZGV4O1xuICAgIGxpbmUgPSBsaW5lTnVtYmVyO1xuICAgIHN0YXJ0ID0gbGluZVN0YXJ0O1xuICAgIHNraXBDb21tZW50KCk7XG4gICAgZm91bmQgPSBsaW5lTnVtYmVyICE9PSBsaW5lO1xuICAgIGluZGV4ID0gcG9zO1xuICAgIGxpbmVOdW1iZXIgPSBsaW5lO1xuICAgIGxpbmVTdGFydCA9IHN0YXJ0O1xuXG4gICAgcmV0dXJuIGZvdW5kO1xufVxuXG4vLyBUaHJvdyBhbiBleGNlcHRpb25cblxuZnVuY3Rpb24gdGhyb3dFcnJvcih0b2tlbiwgbWVzc2FnZUZvcm1hdCkge1xuXG4gICAgdmFyIGVycm9yLFxuICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSxcbiAgICAgICAgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgLyUoXFxkKS9nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIGFzc2VydChpbmRleCA8IGFyZ3MubGVuZ3RoLCBcIk1lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgaWYgKHR5cGVvZiB0b2tlbi5saW5lTnVtYmVyID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiTGluZSBcIiArIHRva2VuLmxpbmVOdW1iZXIgKyBcIjogXCIgKyBtc2cpO1xuICAgICAgICBlcnJvci5pbmRleCA9IHRva2VuLnJhbmdlWzBdO1xuICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICAgICAgZXJyb3IuY29sdW1uID0gdG9rZW4ucmFuZ2VbMF0gLSB0b2tlbi5saW5lU3RhcnQgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiTGluZSBcIiArIGxpbmVOdW1iZXIgKyBcIjogXCIgKyBtc2cpO1xuICAgICAgICBlcnJvci5pbmRleCA9IGluZGV4O1xuICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gbGluZU51bWJlcjtcbiAgICAgICAgZXJyb3IuY29sdW1uID0gaW5kZXggLSBsaW5lU3RhcnQgKyAxO1xuICAgIH1cblxuICAgIGVycm9yLmRlc2NyaXB0aW9uID0gbXNnO1xuICAgIHRocm93IGVycm9yO1xufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yVG9sZXJhbnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhyb3dFcnJvci5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGV4dHJhLmVycm9ycykge1xuICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2goZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbi8vIFRocm93IGFuIGV4Y2VwdGlvbiBiZWNhdXNlIG9mIHRoZSB0b2tlbi5cblxuZnVuY3Rpb24gdGhyb3dVbmV4cGVjdGVkKHRva2VuKSB7XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1MpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkge1xuICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkTnVtYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5KU1hUZXh0KSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRTdHJpbmcpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVyKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBpZiAoc3ludGF4LmlzRnV0dXJlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFJlc2VydmVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgc3ludGF4LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSwgZXh0cmEuZWNtYUZlYXR1cmVzKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkge1xuICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVGVtcGxhdGUsIHRva2VuLnZhbHVlLnJhdyk7XG4gICAgfVxuXG4gICAgLy8gQm9vbGVhbkxpdGVyYWwsIE51bGxMaXRlcmFsLCBvciBQdW5jdHVhdG9yLlxuICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpO1xufVxuXG4vLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLlxuLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5cbmZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkge1xuICAgIHZhciB0b2tlbiA9IGxleCgpO1xuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgIH1cbn1cblxuLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQga2V5d29yZC5cbi8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLlxuXG5mdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtleXdvcmQpIHtcbiAgICB2YXIgdG9rZW4gPSBsZXgoKTtcbiAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29yZCkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgIH1cbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuXG5cbmZ1bmN0aW9uIG1hdGNoKHZhbHVlKSB7XG4gICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gdmFsdWU7XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXl3b3JkXG5cbmZ1bmN0aW9uIG1hdGNoS2V5d29yZChrZXl3b3JkKSB7XG4gICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDtcbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNvbnRleHR1YWwga2V5d29yZFxuLy8gKHdoZXJlIGFuIGlkZW50aWZpZXIgaXMgc29tZXRpbWVzIGEga2V5d29yZCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQpXG5cbmZ1bmN0aW9uIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoa2V5d29yZCkge1xuICAgIHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciAmJiBsb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3JcblxuZnVuY3Rpb24gbWF0Y2hBc3NpZ24oKSB7XG4gICAgdmFyIG9wO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb3AgPSBsb29rYWhlYWQudmFsdWU7XG4gICAgcmV0dXJuIG9wID09PSBcIj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCIqPVwiIHx8XG4gICAgICAgIG9wID09PSBcIi89XCIgfHxcbiAgICAgICAgb3AgPT09IFwiJT1cIiB8fFxuICAgICAgICBvcCA9PT0gXCIrPVwiIHx8XG4gICAgICAgIG9wID09PSBcIi09XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPDw9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPj49XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPj4+PVwiIHx8XG4gICAgICAgIG9wID09PSBcIiY9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiXj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCJ8PVwiO1xufVxuXG5mdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkge1xuICAgIHZhciBsaW5lO1xuXG4gICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLlxuICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IgfHwgbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGluZSA9IGxpbmVOdW1iZXI7XG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBpZiAobGluZU51bWJlciAhPT0gbGluZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YgJiYgIW1hdGNoKFwifVwiKSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRTaWRlRXhwcmVzc2lvblxuXG5mdW5jdGlvbiBpc0xlZnRIYW5kU2lkZShleHByKSB7XG4gICAgcmV0dXJuIGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIgfHwgZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbjtcbn1cblxuLy8gMTEuMS40IEFycmF5IEluaXRpYWxpc2VyXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHRtcDtcblxuICAgIGV4cGVjdChcIltcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwiXVwiKSkge1xuICAgICAgICBpZiAobWF0Y2goXCIsXCIpKSB7XG4gICAgICAgICAgICBsZXgoKTsgLy8gb25seSBnZXQgaGVyZSB3aGVuIHlvdSBoYXZlIFthLCxdIG9yIHNpbWlsYXJcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0bXAgPSBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2godG1wKTtcbiAgICAgICAgICAgIGlmICghKG1hdGNoKFwiXVwiKSkpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoXCIsXCIpOyAvLyBoYW5kbGVzIHRoZSBjb21tb24gY2FzZSBvZiBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCJdXCIpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSk7XG59XG5cbi8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXJcblxuZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHBhcmFtSW5mbywgb3B0aW9ucykge1xuICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHN0cmljdCxcbiAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQsXG4gICAgICAgIGdlbmVyYXRvciA9IG9wdGlvbnMgPyBvcHRpb25zLmdlbmVyYXRvciA6IGZhbHNlLFxuICAgICAgICBib2R5O1xuXG4gICAgc3RhdGUueWllbGRBbGxvd2VkID0gZ2VuZXJhdG9yO1xuXG4gICAgLypcbiAgICAgKiBFc3ByaW1hIHVzZXMgcGFyc2VDb25jaXNlQm9keSgpIGhlcmUsIHdoaWNoIGlzIGluY29ycmVjdC4gT2JqZWN0IGxpdGVyYWxcbiAgICAgKiBtZXRob2RzIG11c3QgaGF2ZSBicmFjZXMuXG4gICAgICovXG4gICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuXG4gICAgaWYgKHN0cmljdCAmJiBwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudChwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzdHJpY3QgJiYgcGFyYW1JbmZvLnN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudChwYXJhbUluZm8uc3RyaWN0ZWQsIHBhcmFtSW5mby5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcbiAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShvcHRpb25zLm1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKFxuICAgICAgICBudWxsLFxuICAgICAgICBwYXJhbUluZm8ucGFyYW1zLFxuICAgICAgICBib2R5LFxuICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgIGJvZHkudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkJsb2NrU3RhdGVtZW50XG4gICAgKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbihvcHRpb25zKSB7XG4gICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0LFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBtZXRob2Q7XG5cbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgcGFyYW1zID0gcGFyc2VQYXJhbXMoKTtcblxuICAgIGlmIChwYXJhbXMuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHBhcmFtcy5zdHJpY3RlZCwgcGFyYW1zLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihwYXJhbXMsIHtcbiAgICAgICAgZ2VuZXJhdG9yOiBvcHRpb25zID8gb3B0aW9ucy5nZW5lcmF0b3IgOiBmYWxzZSxcbiAgICAgICAgbWFya2VyOiBtYXJrZXJcbiAgICB9KTtcblxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1ldGhvZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHRva2VuID0gbGV4KCksXG4gICAgICAgIGFsbG93T2JqZWN0TGl0ZXJhbENvbXB1dGVkID0gZXh0cmEuZWNtYUZlYXR1cmVzLm9iamVjdExpdGVyYWxDb21wdXRlZFByb3BlcnRpZXMsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIHJlc3VsdDtcblxuICAgIC8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgZnJvbSBwYXJzZU9iamVjdFByb3BlcnR5KCksIHdoZXJlXG4gICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRva2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuXG5cbiAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUb2tlbi5TdHJpbmdMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKHRva2VuLCBzb3VyY2UpKTtcblxuICAgICAgICBjYXNlIFRva2VuLklkZW50aWZpZXI6XG4gICAgICAgIGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVsbExpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDpcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpKTtcblxuICAgICAgICBjYXNlIFRva2VuLlB1bmN0dWF0b3I6XG4gICAgICAgICAgICBpZiAoKCFzdGF0ZS5pbk9iamVjdExpdGVyYWwgfHwgYWxsb3dPYmplY3RMaXRlcmFsQ29tcHV0ZWQpICYmXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlID09PSBcIltcIikge1xuICAgICAgICAgICAgICAgIC8vIEZvciBjb21wdXRlZCBwcm9wZXJ0aWVzIHdlIHNob3VsZCBza2lwIHRoZSBbIGFuZCBdLCBhbmRcbiAgICAgICAgICAgICAgICAvLyBjYXB0dXJlIGluIG1hcmtlciBvbmx5IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gaXRzZWxmLlxuICAgICAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoXCJdXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgIH1cblxuICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpIHtcbiAgICBzd2l0Y2ggKGxvb2thaGVhZC50eXBlKSB7XG4gICAgICAgIGNhc2UgVG9rZW4uSWRlbnRpZmllcjpcbiAgICAgICAgY2FzZSBUb2tlbi5TdHJpbmdMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLkJvb2xlYW5MaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bGxMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLktleXdvcmQ6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSBUb2tlbi5QdW5jdHVhdG9yOlxuICAgICAgICAgICAgcmV0dXJuIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJbXCI7XG4gICAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHRvIHRyeSB0byBwYXJzZSBhIE1ldGhvZERlZmluaXRpb24gYXMgZGVmaW5lZCBpbiAxNC4zLiBCdXQgaW4gdGhlIGNhc2Ugb2Ygb2JqZWN0IGxpdGVyYWxzLFxuLy8gaXQgbWlnaHQgYmUgY2FsbGVkIGF0IGEgcG9zaXRpb24gd2hlcmUgdGhlcmUgaXMgaW4gZmFjdCBhIHNob3J0IGhhbmQgaWRlbnRpZmllciBwYXR0ZXJuIG9yIGEgZGF0YSBwcm9wZXJ0eS5cbi8vIFRoaXMgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBhZnRlciB3ZSBjb25zdW1lZCB1cCB0byB0aGUgbGVmdCBwYXJlbnRoZXNlcy5cbi8vIEluIG9yZGVyIHRvIGF2b2lkIGJhY2sgdHJhY2tpbmcsIGl0IHJldHVybnMgYG51bGxgIGlmIHRoZSBwb3NpdGlvbiBpcyBub3QgYSBNZXRob2REZWZpbml0aW9uIGFuZCB0aGUgY2FsbGVyXG4vLyBpcyByZXNwb25zaWJsZSB0byB2aXNpdCBvdGhlciBvcHRpb25zLlxuZnVuY3Rpb24gdHJ5UGFyc2VNZXRob2REZWZpbml0aW9uKHRva2VuLCBrZXksIGNvbXB1dGVkLCBtYXJrZXIpIHtcbiAgICB2YXIgdmFsdWUsIG9wdGlvbnMsIG1ldGhvZE1hcmtlcjtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIC8vIGNoZWNrIGZvciBgZ2V0YCBhbmQgYHNldGA7XG5cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcImdldFwiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG5cbiAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgbWV0aG9kTWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgICAgICBleHBlY3QoXCIoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKVwiKTtcblxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24oe1xuICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBudWxsLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGxcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1ldGhvZE1hcmtlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFwiZ2V0XCIsIGtleSwgdmFsdWUsIGZhbHNlLCBmYWxzZSwgY29tcHV0ZWQpKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSBcInNldFwiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IG1hdGNoKFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXRjaChcIilcIikpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnNlUGFyYW0ob3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihvcHRpb25zLCB7IG1hcmtlcjogbWV0aG9kTWFya2VyIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXCJzZXRcIiwga2V5LCB2YWx1ZSwgZmFsc2UsIGZhbHNlLCBjb21wdXRlZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiKFwiKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcImluaXRcIiwga2V5LCB2YWx1ZSwgdHJ1ZSwgZmFsc2UsIGNvbXB1dGVkKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGEgTWV0aG9kRGVmaW5pdGlvbi5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgR2VuZXJhdG9yIFByb3BlcnRpZXNcbiAqIEBwYXJhbSB7QVNUTm9kZX0ga2V5IFRoZSBwcm9wZXJ0eSBrZXkgKHVzdWFsbHkgYW4gaWRlbnRpZmllcikuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFya2VyIFRoZSBtYXJrZXIgdG8gdXNlIGZvciB0aGUgbm9kZS5cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgZ2VuZXJhdG9yIHByb3BlcnR5IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlR2VuZXJhdG9yUHJvcGVydHkoa2V5LCBtYXJrZXIpIHtcblxuICAgIHZhciBjb21wdXRlZCA9IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcblxuICAgIGlmICghbWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IHRydWUgfSksXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBjb21wdXRlZFxuICAgICAgICApXG4gICAgKTtcbn1cblxuLy8gVE9ETyhuemFrYXMpOiBVcGRhdGUgdG8gbWF0Y2ggRXNwcmltYVxuZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eSgpIHtcbiAgICB2YXIgdG9rZW4sIGtleSwgaWQsIGNvbXB1dGVkLCBtZXRob2RNYXJrZXIsIG9wdGlvbnM7XG4gICAgdmFyIGFsbG93Q29tcHV0ZWQgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllcyxcbiAgICAgICAgYWxsb3dNZXRob2QgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbFNob3J0aGFuZE1ldGhvZHMsXG4gICAgICAgIGFsbG93U2hvcnRoYW5kID0gZXh0cmEuZWNtYUZlYXR1cmVzLm9iamVjdExpdGVyYWxTaG9ydGhhbmRQcm9wZXJ0aWVzLFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycyxcbiAgICAgICAgYWxsb3dEZXN0cnVjdHVyaW5nID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlc3RydWN0dXJpbmcsXG4gICAgICAgIGFsbG93U3ByZWFkID0gZXh0cmEuZWNtYUZlYXR1cmVzLmV4cGVyaW1lbnRhbE9iamVjdFJlc3RTcHJlYWQsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgY29tcHV0ZWQgPSAodG9rZW4udmFsdWUgPT09IFwiW1wiICYmIHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgfHwgKGFsbG93Q29tcHV0ZWQgJiYgY29tcHV0ZWQpKSB7XG5cbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogQ2hlY2sgZm9yIGdldHRlcnMgYW5kIHNldHRlcnMuIEJlIGNhcmVmdWwhIFwiZ2V0XCIgYW5kIFwic2V0XCIgYXJlIGxlZ2FsXG4gICAgICAgICAqIG1ldGhvZCBuYW1lcy4gSXQncyBvbmx5IGEgZ2V0dGVyIG9yIHNldHRlciBpZiBmb2xsb3dlZCBieSBhIHNwYWNlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcImdldFwiICYmXG4gICAgICAgICAgICAgICAgIShtYXRjaChcIjpcIikgfHwgbWF0Y2goXCIoXCIpIHx8IG1hdGNoKFwiLFwiKSB8fCBtYXRjaChcIn1cIikpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChcIilcIik7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgIFwiZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtZXRob2RNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcInNldFwiICYmXG4gICAgICAgICAgICAgICAgIShtYXRjaChcIjpcIikgfHwgbWF0Y2goXCIoXCIpIHx8IG1hdGNoKFwiLFwiKSB8fCBtYXRjaChcIn1cIikpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VQYXJhbShvcHRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KFwiKVwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJzZXRcIixcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5RnVuY3Rpb24ob3B0aW9ucywge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtZXRob2RNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9ybWFsIHByb3BlcnR5IChrZXk6dmFsdWUpXG4gICAgICAgIGlmIChtYXRjaChcIjpcIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWV0aG9kIHNob3J0aGFuZCAoa2V5KCl7Li4ufSlcbiAgICAgICAgaWYgKGFsbG93TWV0aG9kICYmIG1hdGNoKFwiKFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVzdHJ1Y3R1cmluZyBkZWZhdWx0cyAoc2hvcnRoYW5kIHN5bnRheClcbiAgICAgICAgaWYgKGFsbG93RGVzdHJ1Y3R1cmluZyAmJiBtYXRjaChcIj1cIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgdmFyIHByb3AgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKFwiPVwiLCBpZCwgdmFsdWUpKTtcbiAgICAgICAgICAgIHByb3AudHlwZSA9IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybjtcbiAgICAgICAgICAgIHZhciBmdWxsUHJvcGVydHkgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHRydWUsIC8vIHNob3J0aGFuZFxuICAgICAgICAgICAgICAgIGNvbXB1dGVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZnVsbFByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAqIE9ubHkgb3RoZXIgcG9zc2liaWxpdHkgaXMgdGhhdCB0aGlzIGlzIGEgc2hvcnRoYW5kIHByb3BlcnR5LiBDb21wdXRlZFxuICAgICAgICAgKiBwcm9wZXJ0aWVzIGNhbm5vdCB1c2Ugc2hvcnRoYW5kIG5vdGF0aW9uLCBzbyB0aGF0J3MgYSBzeW50YXggZXJyb3IuXG4gICAgICAgICAqIElmIHNob3J0aGFuZCBwcm9wZXJ0aWVzIGFyZW4ndCBhbGxvdywgdGhlbiB0aGlzIGlzIGFuIGF1dG9tYXRpY1xuICAgICAgICAgKiBzeW50YXggZXJyb3IuIERlc3RydWN0dXJpbmcgaXMgYW5vdGhlciBjYXNlIHdpdGggYSBzaW1pbGFyIHNob3J0aGFuZCBzeW50YXguXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoY29tcHV0ZWQgfHwgKCFhbGxvd1Nob3J0aGFuZCAmJiAhYWxsb3dEZXN0cnVjdHVyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzaG9ydGhhbmQgcHJvcGVydHlcbiAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIG9iamVjdCBzcHJlYWQgcHJvcGVydHlcbiAgICBpZiAoYWxsb3dTcHJlYWQgJiYgbWF0Y2goXCIuLi5cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cGVyaW1lbnRhbFNwcmVhZFByb3BlcnR5KHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSkpO1xuICAgIH1cblxuICAgIC8vIG9ubHkgcG9zc2liaWxpdHkgaW4gdGhpcyBicmFuY2ggaXMgYSBzaG9ydGhhbmQgZ2VuZXJhdG9yXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIGlmICghYWxsb3dHZW5lcmF0b3JzIHx8ICFtYXRjaChcIipcIikgfHwgIWFsbG93TWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlR2VuZXJhdG9yUHJvcGVydHkoaWQsIG1hcmtlcik7XG5cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIElmIHdlJ3ZlIG1hZGUgaXQgaGVyZSwgdGhlbiB0aGF0IG1lYW5zIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIHJlcHJlc2VudGVkXG4gICAgICogYnkgYSBzdHJpbmcgKGkuZSwgeyBcImZvb1wiOiAyfSkuIFRoZSBvbmx5IG9wdGlvbnMgaGVyZSBhcmUgbm9ybWFsXG4gICAgICogcHJvcGVydHkgd2l0aCBhIGNvbG9uIG9yIGEgbWV0aG9kLlxuICAgICAqL1xuICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblxuICAgIC8vIGNoZWNrIGZvciBwcm9wZXJ0eSB2YWx1ZVxuICAgIGlmIChtYXRjaChcIjpcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFwiaW5pdFwiLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgbWV0aG9kXG4gICAgaWYgKGFsbG93TWV0aG9kICYmIG1hdGNoKFwiKFwiKSkge1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIG5vIG90aGVyIG9wdGlvbnMsIHRoaXMgaXMgYmFkXG4gICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmllbGROYW1lKGtleSkge1xuICAgIHZhciB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAoa2V5LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBrZXkubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHRvU3RyaW5nKGtleS52YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKSB7XG4gICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0R1cGxpY2F0ZXMgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbER1cGxpY2F0ZVByb3BlcnRpZXMsXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXSxcbiAgICAgICAgcHJvcGVydHksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHByb3BlcnR5Rm4sXG4gICAgICAgIGtpbmQsXG4gICAgICAgIHN0b3JlZEtpbmQsXG4gICAgICAgIHByZXZpb3VzSW5PYmplY3RMaXRlcmFsID0gc3RhdGUuaW5PYmplY3RMaXRlcmFsLFxuICAgICAgICBraW5kTWFwID0gbmV3IFN0cmluZ01hcCgpO1xuXG4gICAgc3RhdGUuaW5PYmplY3RMaXRlcmFsID0gdHJ1ZTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwifVwiKSkge1xuXG4gICAgICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgpO1xuXG4gICAgICAgIGlmICghcHJvcGVydHkuY29tcHV0ZWQgJiYgcHJvcGVydHkudHlwZS5pbmRleE9mKFwiRXhwZXJpbWVudGFsXCIpID09PSAtMSkge1xuXG4gICAgICAgICAgICBuYW1lID0gZ2V0RmllbGROYW1lKHByb3BlcnR5LmtleSk7XG4gICAgICAgICAgICBwcm9wZXJ0eUZuID0gKHByb3BlcnR5LmtpbmQgPT09IFwiZ2V0XCIpID8gUHJvcGVydHlLaW5kLkdldCA6IFByb3BlcnR5S2luZC5TZXQ7XG4gICAgICAgICAgICBraW5kID0gKHByb3BlcnR5LmtpbmQgPT09IFwiaW5pdFwiKSA/IFByb3BlcnR5S2luZC5EYXRhIDogcHJvcGVydHlGbjtcblxuICAgICAgICAgICAgaWYgKGtpbmRNYXAuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgc3RvcmVkS2luZCA9IGtpbmRNYXAuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdG9yZWRLaW5kID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEgJiYgbmFtZSA9PT0gXCJfX3Byb3RvX19cIiAmJiBhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIER1cGxpY2F0ZSAnX19wcm90b19fJyBsaXRlcmFsIHByb3BlcnRpZXMgYXJlIGZvcmJpZGRlbiBpbiBFUyA2XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkR1cGxpY2F0ZVByb3RvdHlwZVByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYga2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEgJiYgIWFsbG93RHVwbGljYXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRHVwbGljYXRlIGxpdGVyYWwgcHJvcGVydGllcyBhcmUgb25seSBmb3JiaWRkZW4gaW4gRVMgNSBzdHJpY3QgbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3REdXBsaWNhdGVQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCAhPT0gUHJvcGVydHlLaW5kLkRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9yZWRLaW5kICYga2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckdldFNldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAga2luZE1hcC5zZXQobmFtZSwgc3RvcmVkS2luZCB8IGtpbmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBraW5kTWFwLnNldChuYW1lLCBraW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGV4cGVjdChcIixcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgc3RhdGUuaW5PYmplY3RMaXRlcmFsID0gcHJldmlvdXNJbk9iamVjdExpdGVyYWw7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVPYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMpKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHRlbXBsYXRlIHN0cmluZyBlbGVtZW50IGFuZCByZXR1cm4gaXRzIEFTVE5vZGUgcmVwcmVzZW50YXRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb24gUGFyc2luZyAmIHNjYW5uaW5nIG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb24uaGVhZCBUcnVlIGlmIHRoaXMgZWxlbWVudCBpcyB0aGUgZmlyc3QgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgdGVtcGxhdGUgZWxlbWVudCBub2RlIHdpdGggbWFya2VyIGluZm8gYXBwbGllZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZUVsZW1lbnQob3B0aW9uKSB7XG4gICAgdmFyIG1hcmtlciwgdG9rZW47XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlRlbXBsYXRlIHx8IChvcHRpb24uaGVhZCAmJiAhbG9va2FoZWFkLmhlYWQpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIHRva2VuID0gbGV4KCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGVtcGxhdGVFbGVtZW50KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJhdzogdG9rZW4udmFsdWUucmF3LFxuICAgICAgICAgICAgICAgIGNvb2tlZDogdG9rZW4udmFsdWUuY29va2VkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG9rZW4udGFpbFxuICAgICAgICApXG4gICAgKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHRlbXBsYXRlIHN0cmluZyBsaXRlcmFsIGFuZCByZXR1cm4gaXRzIEFTVE5vZGUgcmVwcmVzZW50YXRpb25cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgdGVtcGxhdGUgbGl0ZXJhbCBub2RlIHdpdGggbWFya2VyIGluZm8gYXBwbGllZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSB7XG4gICAgdmFyIHF1YXNpLCBxdWFzaXMsIGV4cHJlc3Npb25zLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHF1YXNpID0gcGFyc2VUZW1wbGF0ZUVsZW1lbnQoeyBoZWFkOiB0cnVlIH0pO1xuICAgIHF1YXNpcyA9IFsgcXVhc2kgXTtcbiAgICBleHByZXNzaW9ucyA9IFtdO1xuXG4gICAgd2hpbGUgKCFxdWFzaS50YWlsKSB7XG4gICAgICAgIGV4cHJlc3Npb25zLnB1c2gocGFyc2VFeHByZXNzaW9uKCkpO1xuICAgICAgICBxdWFzaSA9IHBhcnNlVGVtcGxhdGVFbGVtZW50KHsgaGVhZDogZmFsc2UgfSk7XG4gICAgICAgIHF1YXNpcy5wdXNoKHF1YXNpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVUZW1wbGF0ZUxpdGVyYWwocXVhc2lzLCBleHByZXNzaW9ucykpO1xufVxuXG4vLyAxMS4xLjYgVGhlIEdyb3VwaW5nIE9wZXJhdG9yXG5cbmZ1bmN0aW9uIHBhcnNlR3JvdXBFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICsrc3RhdGUucGFyZW50aGVzaXNDb3VudDtcblxuICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuXG4vLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lvbnNcblxuZnVuY3Rpb24gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgdHlwZSwgdG9rZW4sIGV4cHIsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgYWxsb3dKU1ggPSBleHRyYS5lY21hRmVhdHVyZXMuanN4LFxuICAgICAgICBhbGxvd0NsYXNzZXMgPSBleHRyYS5lY21hRmVhdHVyZXMuY2xhc3NlcyxcbiAgICAgICAgYWxsb3dTdXBlciA9IGFsbG93Q2xhc3NlcyB8fCBleHRyYS5lY21hRmVhdHVyZXMuc3VwZXJJbkZ1bmN0aW9ucztcblxuICAgIGlmIChtYXRjaChcIihcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0pTWCAmJiBtYXRjaChcIjxcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNYRWxlbWVudCgpO1xuICAgIH1cblxuICAgIHR5cGUgPSBsb29rYWhlYWQudHlwZTtcbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKGxleCgpLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHtcbiAgICAgICAgaWYgKHN0cmljdCAmJiBsb29rYWhlYWQub2N0YWwpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKGxleCgpLCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsbG93U3VwZXIgJiYgbWF0Y2hLZXl3b3JkKFwic3VwZXJcIikgJiYgc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHtcbiAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTdXBlcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoXCJ0aGlzXCIpKSB7XG4gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGhpc0V4cHJlc3Npb24oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxsb3dDbGFzc2VzICYmIG1hdGNoS2V5d29yZChcImNsYXNzXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0V4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCkge1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICB0b2tlbi52YWx1ZSA9ICh0b2tlbi52YWx1ZSA9PT0gXCJ0cnVlXCIpO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UodG9rZW4sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbCkge1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICB0b2tlbi52YWx1ZSA9IG51bGw7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZSh0b2tlbiwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwiL1wiKSB8fCBtYXRjaChcIi89XCIpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UoY29sbGVjdFJlZ2V4KCksIHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2Uoc2NhblJlZ0V4cCgpLCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHBlZWsoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbn1cblxuLy8gMTEuMiBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9uc1xuXG5mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBhcmc7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgYXJnID0gcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QoXCIsXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIHJldHVybiBhcmdzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKSB7XG4gICAgaWYgKG1hdGNoKFwiLi4uXCIpKSB7XG4gICAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVNwcmVhZEVsZW1lbnQocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIHtcbiAgICB2YXIgdG9rZW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsZXgoKTtcblxuICAgIGlmICghaXNJZGVudGlmaWVyTmFtZSh0b2tlbikpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSB7XG4gICAgZXhwZWN0KFwiLlwiKTtcblxuICAgIHJldHVybiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb21wdXRlZE1lbWJlcigpIHtcbiAgICB2YXIgZXhwcjtcblxuICAgIGV4cGVjdChcIltcIik7XG5cbiAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCJdXCIpO1xuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmV3RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgY2FsbGVlLCBhcmdzLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJuZXdcIik7XG5cbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLm5ld1RhcmdldCAmJiBtYXRjaChcIi5cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciAmJiBsb29rYWhlYWQudmFsdWUgPT09IFwidGFyZ2V0XCIpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5pbkZ1bmN0aW9uQm9keSkge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZU1ldGFQcm9wZXJ0eShcIm5ld1wiLCBcInRhcmdldFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG5cbiAgICBjYWxsZWUgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKTtcbiAgICBhcmdzID0gbWF0Y2goXCIoXCIpID8gcGFyc2VBcmd1bWVudHMoKSA6IFtdO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTmV3RXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCkge1xuICAgIHZhciBleHByLCBhcmdzLFxuICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlO1xuICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoXCJuZXdcIikgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTtcbiAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXG4gICAgLy8gb25seSBzdGFydCBwYXJzaW5nIHRlbXBsYXRlIGxpdGVyYWwgaWYgdGhlIGxvb2thaGVhZCBpcyBhIGhlYWQgKGJlZ2lubmluZyB3aXRoIGApXG4gICAgd2hpbGUgKG1hdGNoKFwiLlwiKSB8fCBtYXRjaChcIltcIikgfHwgbWF0Y2goXCIoXCIpIHx8IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUgJiYgbG9va2FoZWFkLmhlYWQpKSB7XG4gICAgICAgIGlmIChtYXRjaChcIihcIikpIHtcbiAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50cygpO1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2FsbEV4cHJlc3Npb24oZXhwciwgYXJncykpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbihcIltcIiwgZXhwciwgcGFyc2VDb21wdXRlZE1lbWJlcigpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goXCIuXCIpKSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKFwiLlwiLCBleHByLCBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByLFxuICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoXCJuZXdcIikgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTtcbiAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXG4gICAgLy8gb25seSBzdGFydCBwYXJzaW5nIHRlbXBsYXRlIGxpdGVyYWwgaWYgdGhlIGxvb2thaGVhZCBpcyBhIGhlYWQgKGJlZ2lubmluZyB3aXRoIGApXG4gICAgd2hpbGUgKG1hdGNoKFwiLlwiKSB8fCBtYXRjaChcIltcIikgfHwgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSAmJiBsb29rYWhlYWQuaGVhZCkpIHtcbiAgICAgICAgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbihcIltcIiwgZXhwciwgcGFyc2VDb21wdXRlZE1lbWJlcigpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goXCIuXCIpKSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKFwiLlwiLCBleHByLCBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuXG4vLyAxMS4zIFBvc3RmaXggRXhwcmVzc2lvbnNcblxuZnVuY3Rpb24gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgZXhwciwgdG9rZW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwciA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIGlmICgobWF0Y2goXCIrK1wiKSB8fCBtYXRjaChcIi0tXCIpKSAmJiAhcGVla0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICAgICAgICAgIC8vIDExLjMuMSwgMTEuMy4yXG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIgJiYgc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TEhTUG9zdGZpeCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUG9zdGZpeEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG4vLyAxMS40IFVuYXJ5IE9wZXJhdG9yc1xuXG5mdW5jdGlvbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgdG9rZW4sIGV4cHIsXG4gICAgICAgIG1hcmtlcjtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCIrK1wiKSB8fCBtYXRjaChcIi0tXCIpKSB7XG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcbiAgICAgICAgLy8gMTEuNC40LCAxMS40LjVcbiAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyICYmIHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TEhTUHJlZml4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTtcbiAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIitcIikgfHwgbWF0Y2goXCItXCIpIHx8IG1hdGNoKFwiflwiKSB8fCBtYXRjaChcIiFcIikpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTtcbiAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgfSBlbHNlIGlmIChtYXRjaEtleXdvcmQoXCJkZWxldGVcIikgfHwgbWF0Y2hLZXl3b3JkKFwidm9pZFwiKSB8fCBtYXRjaEtleXdvcmQoXCJ0eXBlb2ZcIikpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTtcbiAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci5vcGVyYXRvciA9PT0gXCJkZWxldGVcIiAmJiBleHByLmFyZ3VtZW50LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdERlbGV0ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG5mdW5jdGlvbiBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBhbGxvd0luKSB7XG4gICAgdmFyIHByZWMgPSAwO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XG4gICAgY2FzZSBcInx8XCI6XG4gICAgICAgIHByZWMgPSAxO1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCImJlwiOlxuICAgICAgICBwcmVjID0gMjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwifFwiOlxuICAgICAgICBwcmVjID0gMztcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXlwiOlxuICAgICAgICBwcmVjID0gNDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiJlwiOlxuICAgICAgICBwcmVjID0gNTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiPT1cIjpcbiAgICBjYXNlIFwiIT1cIjpcbiAgICBjYXNlIFwiPT09XCI6XG4gICAgY2FzZSBcIiE9PVwiOlxuICAgICAgICBwcmVjID0gNjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiPFwiOlxuICAgIGNhc2UgXCI+XCI6XG4gICAgY2FzZSBcIjw9XCI6XG4gICAgY2FzZSBcIj49XCI6XG4gICAgY2FzZSBcImluc3RhbmNlb2ZcIjpcbiAgICAgICAgcHJlYyA9IDc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImluXCI6XG4gICAgICAgIHByZWMgPSBhbGxvd0luID8gNyA6IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIjw8XCI6XG4gICAgY2FzZSBcIj4+XCI6XG4gICAgY2FzZSBcIj4+PlwiOlxuICAgICAgICBwcmVjID0gODtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiK1wiOlxuICAgIGNhc2UgXCItXCI6XG4gICAgICAgIHByZWMgPSA5O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCIqXCI6XG4gICAgY2FzZSBcIi9cIjpcbiAgICBjYXNlIFwiJVwiOlxuICAgICAgICBwcmVjID0gMTE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZWM7XG59XG5cbi8vIDExLjUgTXVsdGlwbGljYXRpdmUgT3BlcmF0b3JzXG4vLyAxMS42IEFkZGl0aXZlIE9wZXJhdG9yc1xuLy8gMTEuNyBCaXR3aXNlIFNoaWZ0IE9wZXJhdG9yc1xuLy8gMTEuOCBSZWxhdGlvbmFsIE9wZXJhdG9yc1xuLy8gMTEuOSBFcXVhbGl0eSBPcGVyYXRvcnNcbi8vIDExLjEwIEJpbmFyeSBCaXR3aXNlIE9wZXJhdG9yc1xuLy8gMTEuMTEgQmluYXJ5IExvZ2ljYWwgT3BlcmF0b3JzXG5mdW5jdGlvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKSB7XG4gICAgdmFyIGV4cHIsIHRva2VuLCBwcmVjLCBwcmV2aW91c0FsbG93SW4sIHN0YWNrLCByaWdodCwgb3BlcmF0b3IsIGxlZnQsIGksXG4gICAgICAgIG1hcmtlciwgbWFya2VycztcblxuICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47XG4gICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICBsZWZ0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcblxuICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgIHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBwcmV2aW91c0FsbG93SW4pO1xuICAgIGlmIChwcmVjID09PSAwKSB7XG4gICAgICAgIHJldHVybiBsZWZ0O1xuICAgIH1cbiAgICB0b2tlbi5wcmVjID0gcHJlYztcbiAgICBsZXgoKTtcblxuICAgIG1hcmtlcnMgPSBbbWFya2VyLCBtYXJrZXJDcmVhdGUoKV07XG4gICAgcmlnaHQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuXG4gICAgc3RhY2sgPSBbbGVmdCwgdG9rZW4sIHJpZ2h0XTtcblxuICAgIHdoaWxlICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFkLCBwcmV2aW91c0FsbG93SW4pKSA+IDApIHtcblxuICAgICAgICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuXG4gICAgICAgIHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0ucHJlYykpIHtcbiAgICAgICAgICAgIHJpZ2h0ID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBvcGVyYXRvciA9IHN0YWNrLnBvcCgpLnZhbHVlO1xuICAgICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgICAgIG1hcmtlcnMucG9wKCk7XG4gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJzLnBvcCgpO1xuICAgICAgICAgICAgbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goZXhwcik7XG4gICAgICAgICAgICBtYXJrZXJzLnB1c2gobWFya2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNoaWZ0LlxuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICB0b2tlbi5wcmVjID0gcHJlYztcbiAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7XG4gICAgICAgIG1hcmtlcnMucHVzaChtYXJrZXJDcmVhdGUoKSk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuICAgICAgICBzdGFjay5wdXNoKGV4cHIpO1xuICAgIH1cblxuICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG5cbiAgICAvLyBGaW5hbCByZWR1Y2UgdG8gY2xlYW4tdXAgdGhlIHN0YWNrLlxuICAgIGkgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgIGV4cHIgPSBzdGFja1tpXTtcbiAgICBtYXJrZXJzLnBvcCgpO1xuICAgIHdoaWxlIChpID4gMSkge1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihzdGFja1tpIC0gMV0udmFsdWUsIHN0YWNrW2kgLSAyXSwgZXhwcik7XG4gICAgICAgIGkgLT0gMjtcbiAgICAgICAgbWFya2VyID0gbWFya2Vycy5wb3AoKTtcbiAgICAgICAgbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuMTIgQ29uZGl0aW9uYWwgT3BlcmF0b3JcblxuZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKSB7XG4gICAgdmFyIGV4cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwgYWx0ZXJuYXRlLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cHIgPSBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKTtcblxuICAgIGlmIChtYXRjaChcIj9cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47XG4gICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlO1xuICAgICAgICBjb25zZXF1ZW50ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuICAgICAgICBleHBlY3QoXCI6XCIpO1xuICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihleHByLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpO1xuICAgICAgICBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG4vLyBbRVM2XSAxNC4yIEFycm93IEZ1bmN0aW9uXG5cbmZ1bmN0aW9uIHBhcnNlQ29uY2lzZUJvZHkoKSB7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG59XG5cbmZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KGV4cHJlc3Npb25zKSB7XG4gICAgdmFyIGksIGxlbiwgcGFyYW0sIHBhcmFtcywgb3B0aW9ucyxcbiAgICAgICAgYWxsb3dSZXN0UGFyYW1zID0gZXh0cmEuZWNtYUZlYXR1cmVzLnJlc3RQYXJhbXM7XG5cbiAgICBwYXJhbXMgPSBbXTtcbiAgICBvcHRpb25zID0ge1xuICAgICAgICBwYXJhbVNldDogbmV3IFN0cmluZ01hcCgpXG4gICAgfTtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIHBhcmFtID0gZXhwcmVzc2lvbnNbaV07XG4gICAgICAgIGlmIChwYXJhbS50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbSwgcGFyYW0ubmFtZSk7XG4gICAgICAgIH0gIGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RFeHByZXNzaW9uIHx8IHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5BcnJheUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0pO1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50KSB7XG4gICAgICAgICAgICBhc3NlcnQoaSA9PT0gbGVuIC0gMSwgXCJJdCBpcyBndWFyYW50ZWVkIHRoYXQgU3ByZWFkRWxlbWVudCBpcyBsYXN0IGVsZW1lbnQgYnkgcGFyc2VFeHByZXNzaW9uXCIpO1xuICAgICAgICAgICAgaWYgKHBhcmFtLmFyZ3VtZW50LnR5cGUgIT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIltcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYWxsb3dSZXN0UGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FuJ3QgZ2V0IGNvcnJlY3QgbGluZS9jb2x1bW4gaGVyZSA6KFxuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCIuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50LCBwYXJhbS5hcmd1bWVudC5uYW1lKTtcbiAgICAgICAgICAgIHBhcmFtLnR5cGUgPSBhc3ROb2RlVHlwZXMuUmVzdEVsZW1lbnQ7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlJlc3RFbGVtZW50KSB7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50LCBwYXJhbS5hcmd1bWVudC5uYW1lKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb24pIHtcblxuICAgICAgICAgICAgLy8gVE9ETzogRmluZCBhIGxlc3MgaGFja3kgd2F5IG9mIGRvaW5nIHRoaXNcbiAgICAgICAgICAgIHBhcmFtLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm47XG4gICAgICAgICAgICBkZWxldGUgcGFyYW0ub3BlcmF0b3I7XG5cbiAgICAgICAgICAgIGlmIChwYXJhbS5yaWdodC50eXBlID09PSBhc3ROb2RlVHlwZXMuWWllbGRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLnJpZ2h0LmFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhcmFtLnJpZ2h0LnR5cGUgPSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcjtcbiAgICAgICAgICAgICAgICBwYXJhbS5yaWdodC5uYW1lID0gXCJ5aWVsZFwiO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5hcmd1bWVudDtcbiAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW0ucmlnaHQuZGVsZWdhdGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0ubGVmdCwgcGFyYW0ubGVmdC5uYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubWVzc2FnZSA9PT0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlKSB7XG4gICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICBzdHJpY3QgPyBvcHRpb25zLnN0cmljdGVkIDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgc3RyaWN0ZWQ6IG9wdGlvbnMuc3RyaWN0ZWQsXG4gICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ob3B0aW9ucywgbWFya2VyKSB7XG4gICAgdmFyIHByZXZpb3VzU3RyaWN0LCBib2R5O1xuICAgIHZhciBhcnJvd1N0YXJ0ID0gbGluZU51bWJlcjtcblxuICAgIGV4cGVjdChcIj0+XCIpO1xuICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgaWYgKGxpbmVOdW1iZXIgPiBhcnJvd1N0YXJ0KSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCI9PlwiKTtcbiAgICB9XG5cbiAgICBib2R5ID0gcGFyc2VDb25jaXNlQm9keSgpO1xuXG4gICAgaWYgKHN0cmljdCAmJiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLCBvcHRpb25zLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAoc3RyaWN0ICYmIG9wdGlvbnMuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KG9wdGlvbnMuc3RyaWN0ZWQsIG9wdGlvbnMubWVzc2FnZSk7XG4gICAgfVxuXG4gICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24oXG4gICAgICAgIG9wdGlvbnMucGFyYW1zLFxuICAgICAgICBib2R5LFxuICAgICAgICBib2R5LnR5cGUgIT09IGFzdE5vZGVUeXBlcy5CbG9ja1N0YXRlbWVudFxuICAgICkpO1xufVxuXG4vLyAxMS4xMyBBc3NpZ25tZW50IE9wZXJhdG9yc1xuXG4vLyAxMi4xNC41IEFzc2lnbm1lbnRQYXR0ZXJuXG5cbmZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZXhwcikge1xuICAgIHZhciBpLCBsZW4sIHByb3BlcnR5LCBlbGVtZW50LFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZyxcbiAgICAgICAgYWxsb3dSZXN0ID0gZXh0cmEuZWNtYUZlYXR1cmVzLmV4cGVyaW1lbnRhbE9iamVjdFJlc3RTcHJlYWQ7XG5cbiAgICBpZiAoIWFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgIH1cblxuICAgIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RFeHByZXNzaW9uKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5PYmplY3RQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gZXhwci5wcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgICAgICBpZiAoYWxsb3dSZXN0ICYmIHByb3BlcnR5LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5FeHBlcmltZW50YWxTcHJlYWRQcm9wZXJ0eSkge1xuXG4gICAgICAgICAgICAgICAgLy8gb25seSBhbGxvdyBpZGVudGlmaWVyc1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5hcmd1bWVudC50eXBlICE9PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIFwiSW52YWxpZCBvYmplY3QgcmVzdC5cIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcHJvcGVydHkudHlwZSA9IGFzdE5vZGVUeXBlcy5FeHBlcmltZW50YWxSZXN0UHJvcGVydHk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvcGVydHkua2luZCAhPT0gXCJpbml0XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihwcm9wZXJ0eS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXJyYXlQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZXhwci5lbGVtZW50c1tpXTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpIHtcbiAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNwcmVhZEVsZW1lbnQpIHtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihleHByLmFyZ3VtZW50KTtcbiAgICAgICAgaWYgKGV4cHIuYXJndW1lbnQudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdFBhdHRlcm4pIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuT2JqZWN0UGF0dGVybkFzU3ByZWFkKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIgJiYgZXhwci5vcGVyYXRvciA9PT0gXCI9XCIpIHtcbiAgICAgICAgZXhwci50eXBlID0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRQYXR0ZXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5NZW1iZXJFeHByZXNzaW9uICYmXG4gICAgICAgICAgICBleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5DYWxsRXhwcmVzc2lvbiAmJlxuICAgICAgICAgICAgZXhwci50eXBlICE9PSBhc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbiAmJlxuICAgICAgICAgICAgZXhwci50eXBlICE9PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm5cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyAxMy4yLjMgQmluZGluZ1BhdHRlcm5cblxuZnVuY3Rpb24gcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBleHByKSB7XG4gICAgdmFyIGksIGxlbiwgcHJvcGVydHksIGVsZW1lbnQsXG4gICAgICAgIGFsbG93RGVzdHJ1Y3R1cmluZyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5kZXN0cnVjdHVyaW5nO1xuXG4gICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICB9XG5cbiAgICBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuT2JqZWN0UGF0dGVybjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IGV4cHIucHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5raW5kICE9PSBcImluaXRcIikge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ybWFsc0xpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwcm9wZXJ0eS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXJyYXlQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZXhwci5lbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIGV4cHIsIGV4cHIubmFtZSk7XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50KSB7XG4gICAgICAgIC8vIEJpbmRpbmdSZXN0RWxlbWVudCBvbmx5IGFsbG93cyBCaW5kaW5nSWRlbnRpZmllclxuICAgICAgICBpZiAoZXhwci5hcmd1bWVudC50eXBlICE9PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBleHByLmFyZ3VtZW50LCBleHByLmFyZ3VtZW50Lm5hbWUpO1xuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb24gJiYgZXhwci5vcGVyYXRvciA9PT0gXCI9XCIpIHtcbiAgICAgICAgZXhwci50eXBlID0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRQYXR0ZXJuO1xuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlICE9PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm4pIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ybWFsc0xpc3QpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgdG9rZW4sIGxlZnQsIHJpZ2h0LCBub2RlLCBwYXJhbXMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgc3RhcnRzV2l0aFBhcmVuID0gZmFsc2UsXG4gICAgICAgIG9sZFBhcmVudGhlc2lzQ291bnQgPSBzdGF0ZS5wYXJlbnRoZXNpc0NvdW50LFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycztcblxuICAgIC8vIE5vdGUgdGhhdCAneWllbGQnIGlzIHRyZWF0ZWQgYXMgYSBrZXl3b3JkIGluIHN0cmljdCBtb2RlLCBidXQgYVxuICAgIC8vIGNvbnRleHR1YWwga2V5d29yZCAoaWRlbnRpZmllcikgaW4gbm9uLXN0cmljdCBtb2RlLCBzbyB3ZSBuZWVkXG4gICAgLy8gdG8gdXNlIG1hdGNoS2V5d29yZCBhbmQgbWF0Y2hDb250ZXh0dWFsS2V5d29yZCBhcHByb3ByaWF0ZWx5LlxuICAgIGlmIChhbGxvd0dlbmVyYXRvcnMgJiYgKChzdGF0ZS55aWVsZEFsbG93ZWQgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcInlpZWxkXCIpKSB8fCAoc3RyaWN0ICYmIG1hdGNoS2V5d29yZChcInlpZWxkXCIpKSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlWWllbGRFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAobWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkMigpO1xuICAgICAgICBpZiAoKHRva2VuLnZhbHVlID09PSBcIilcIiAmJiB0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB8fCB0b2tlbi52YWx1ZSA9PT0gXCIuLi5cIikge1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyc2VQYXJhbXMoKTtcbiAgICAgICAgICAgIGlmICghbWF0Y2goXCI9PlwiKSkge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRzV2l0aFBhcmVuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyByZXZlcnQgdG8gdGhlIHByZXZpb3VzIGxvb2thaGVhZCBzdHlsZSBvYmplY3RcbiAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICBub2RlID0gbGVmdCA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7XG5cbiAgICBpZiAobWF0Y2goXCI9PlwiKSAmJlxuICAgICAgICAgICAgKHN0YXRlLnBhcmVudGhlc2lzQ291bnQgPT09IG9sZFBhcmVudGhlc2lzQ291bnQgfHxcbiAgICAgICAgICAgIHN0YXRlLnBhcmVudGhlc2lzQ291bnQgPT09IChvbGRQYXJlbnRoZXNpc0NvdW50ICsgMSkpKSB7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSByZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChbIG5vZGUgXSk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb24gfHxcbiAgICAgICAgICAgIG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbiB8fFxuICAgICAgICAgICAgbm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgaWYgKCFzdGFydHNXaXRoUGFyZW4pIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoWyBub2RlIF0pO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNlcXVlbmNlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3Qobm9kZS5leHByZXNzaW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBzdGF0ZS5wYXJlbnRoZXNpc0NvdW50LS07XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2hBc3NpZ24oKSkge1xuXG4gICAgICAgIC8vIDExLjEzLjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBsZWZ0LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyICYmIHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGxlZnQubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFUy5uZXh0IGRyYWYgMTEuMTMgUnVudGltZSBTZW1hbnRpY3Mgc3RlcCAxXG4gICAgICAgIGlmIChtYXRjaChcIj1cIikgJiYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uKSkge1xuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihub2RlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNMZWZ0SGFuZFNpZGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICByaWdodCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblxuICAgICAgICBub2RlID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgbGVmdCwgcmlnaHQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbn1cblxuLy8gMTEuMTQgQ29tbWEgT3BlcmF0b3JcblxuZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkge1xuICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgZXhwciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSxcbiAgICAgICAgZXhwcmVzc2lvbnMgPSBbIGV4cHIgXSxcbiAgICAgICAgc2VxdWVuY2UsIHNwcmVhZEZvdW5kO1xuXG4gICAgaWYgKG1hdGNoKFwiLFwiKSkge1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghbWF0Y2goXCIsXCIpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGV4cHIgPSBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goZXhwcik7XG5cbiAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgc3ByZWFkRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkVsZW1lbnRBZnRlclNwcmVhZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNlcXVlbmNlID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb24oZXhwcmVzc2lvbnMpKTtcbiAgICB9XG5cbiAgICBpZiAoc3ByZWFkRm91bmQgJiYgbG9va2FoZWFkMigpLnZhbHVlICE9PSBcIj0+XCIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbFNwcmVhZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcXVlbmNlIHx8IGV4cHI7XG59XG5cbi8vIDEyLjEgQmxvY2tcblxuZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRMaXN0KCkge1xuICAgIHZhciBsaXN0ID0gW10sXG4gICAgICAgIHN0YXRlbWVudDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxpc3QucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0O1xufVxuXG5mdW5jdGlvbiBwYXJzZUJsb2NrKCkge1xuICAgIHZhciBibG9jayxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgYmxvY2sgPSBwYXJzZVN0YXRlbWVudExpc3QoKTtcblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCbG9ja1N0YXRlbWVudChibG9jaykpO1xufVxuXG4vLyAxMi4yIFZhcmlhYmxlIFN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIHtcbiAgICB2YXIgdG9rZW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsZXgoKTtcblxuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCAmJiBzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkge1xuICAgIHZhciBpZCxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGluaXQgPSBudWxsO1xuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGlkID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlkID0gc3RhdGUuYWxsb3dLZXl3b3JkID8gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgOiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICAvLyAxMi4yLjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFZlcmlmeSBhZ2FpbnN0IGZlYXR1cmUgZmxhZ3NcbiAgICBpZiAoa2luZCA9PT0gXCJjb25zdFwiKSB7XG4gICAgICAgIGlmICghbWF0Y2goXCI9XCIpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob1VuaW50aWFsaXplZENvbnN0KTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoXCI9XCIpO1xuICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCI9XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuXG4gICAgZG8ge1xuICAgICAgICBsaXN0LnB1c2gocGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKGtpbmQpKTtcbiAgICAgICAgaWYgKCFtYXRjaChcIixcIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxleCgpO1xuICAgIH0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkge1xuICAgIHZhciBkZWNsYXJhdGlvbnM7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwidmFyXCIpO1xuXG4gICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBcInZhclwiKTtcbn1cblxuLy8ga2luZCBtYXkgYmUgYGNvbnN0YCBvciBgbGV0YFxuLy8gQm90aCBhcmUgZXhwZXJpbWVudGFsIGFuZCBub3QgaW4gdGhlIHNwZWNpZmljYXRpb24geWV0LlxuLy8gc2VlIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6Y29uc3Rcbi8vIGFuZCBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmxldFxuZnVuY3Rpb24gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGtpbmQpIHtcbiAgICB2YXIgZGVjbGFyYXRpb25zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoa2luZCk7XG5cbiAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTtcbn1cblxuXG5mdW5jdGlvbiBwYXJzZVJlc3RFbGVtZW50KCkge1xuICAgIHZhciBwYXJhbSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBsZXgoKTtcblxuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLk9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0ZXIpO1xuICAgIH1cblxuICAgIHBhcmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgIGlmIChtYXRjaChcIj1cIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZCwgTWVzc2FnZXMuUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVSZXN0RWxlbWVudChwYXJhbSkpO1xufVxuXG4vLyAxMi4zIEVtcHR5IFN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkge1xuICAgIGV4cGVjdChcIjtcIik7XG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUVtcHR5U3RhdGVtZW50KCk7XG59XG5cbi8vIDEyLjQgRXhwcmVzc2lvbiBTdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCkge1xuICAgIHZhciBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpO1xufVxuXG4vLyAxMi41IElmIHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkge1xuICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGU7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiaWZcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIGNvbnNlcXVlbnQgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImVsc2VcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlU3RhdGVtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTtcbn1cblxuLy8gMTIuNiBJdGVyYXRpb24gU3RhdGVtZW50c1xuXG5mdW5jdGlvbiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImRvXCIpO1xuXG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247XG5cbiAgICBleHBlY3RLZXl3b3JkKFwid2hpbGVcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIGlmIChtYXRjaChcIjtcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9uO1xuXG4gICAgZXhwZWN0S2V5d29yZChcIndoaWxlXCIpO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTtcblxuICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVXaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCkge1xuICAgIHZhciB0b2tlbiwgZGVjbGFyYXRpb25zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHRva2VuID0gbGV4KCk7XG4gICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIHRva2VuLnZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRm9yU3RhdGVtZW50KG9wdHMpIHtcbiAgICB2YXIgaW5pdCwgdGVzdCwgdXBkYXRlLCBsZWZ0LCByaWdodCwgYm9keSwgb3BlcmF0b3IsIG9sZEluSXRlcmF0aW9uO1xuICAgIHZhciBhbGxvd0Zvck9mID0gZXh0cmEuZWNtYUZlYXR1cmVzLmZvck9mLFxuICAgICAgICBhbGxvd0Jsb2NrQmluZGluZ3MgPSBleHRyYS5lY21hRmVhdHVyZXMuYmxvY2tCaW5kaW5ncztcblxuICAgIGluaXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJmb3JcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgaWYgKG1hdGNoKFwiO1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoXCJ2YXJcIikgfHxcbiAgICAgICAgICAgIChhbGxvd0Jsb2NrQmluZGluZ3MgJiYgKG1hdGNoS2V5d29yZChcImxldFwiKSB8fCBtYXRjaEtleXdvcmQoXCJjb25zdFwiKSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlO1xuICAgICAgICAgICAgaW5pdCA9IHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpbml0LmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKFwiaW5cIikgfHwgKGFsbG93Rm9yT2YgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcIm9mXCIpKSkge1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGxvb2thaGVhZDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBpcyBcInZhclwiIGNoZWNrIGhlcmUgcmVhbGx5IG5lZWRlZD8gd2FzblwidCBpbiAxLjIuMlxuICAgICAgICAgICAgICAgICAgICBpZiAoISgob3BlcmF0b3IudmFsdWUgPT09IFwiaW5cIiB8fCBpbml0LmtpbmQgIT09IFwidmFyXCIpICYmIGluaXQuZGVjbGFyYXRpb25zWzBdLmluaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7XG4gICAgICAgICAgICBpbml0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGluaXQudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIGluaXQudHlwZSA9IGFzdE5vZGVUeXBlcy5BcnJheVBhdHRlcm47XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKGFsbG93Rm9yT2YgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcIm9mXCIpKSB7XG4gICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaEtleXdvcmQoXCJpblwiKSkge1xuICAgICAgICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGluaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgZXhwZWN0KFwiO1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuXG4gICAgICAgIGlmICghbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KFwiO1wiKTtcblxuICAgICAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgdXBkYXRlID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICBpZiAoIShvcHRzICE9PSB1bmRlZmluZWQgJiYgb3B0cy5pZ25vcmVCb2R5KSkge1xuICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uO1xuXG4gICAgaWYgKHR5cGVvZiBsZWZ0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KTtcbiAgICB9XG5cbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLmZvck9mICYmIG9wZXJhdG9yLnZhbHVlID09PSBcIm9mXCIpIHtcbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZvck9mU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRm9ySW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpO1xufVxuXG4vLyAxMi43IFRoZSBjb250aW51ZSBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0YXRlbWVudCgpIHtcbiAgICB2YXIgbGFiZWwgPSBudWxsO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNvbnRpbnVlXCIpO1xuXG4gICAgLy8gT3B0aW1pemUgdGhlIG1vc3QgY29tbW9uIGZvcm06IFwiY29udGludWU7XCIuXG4gICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzQikge1xuICAgICAgICBsZXgoKTtcblxuICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sYWJlbFNldC5oYXMobGFiZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxhYmVsKTtcbn1cblxuLy8gMTIuOCBUaGUgYnJlYWsgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGxhYmVsID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJicmVha1wiKTtcblxuICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAoVSswMDNCKS5cbiAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7XG4gICAgICAgIGxleCgpO1xuXG4gICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTtcbiAgICB9XG5cbiAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sYWJlbFNldC5oYXMobGFiZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobGFiZWwpO1xufVxuXG4vLyAxMi45IFRoZSByZXR1cm4gc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkge1xuICAgIHZhciBhcmd1bWVudCA9IG51bGw7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwicmV0dXJuXCIpO1xuXG4gICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9keSAmJiAhZXh0cmEuZWNtYUZlYXR1cmVzLmdsb2JhbFJldHVybikge1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pO1xuICAgIH1cblxuICAgIC8vIFwicmV0dXJuXCIgZm9sbG93ZWQgYnkgYSBzcGFjZSBhbmQgYW4gaWRlbnRpZmllciBpcyB2ZXJ5IGNvbW1vbi5cbiAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDIwKSB7XG4gICAgICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHtcbiAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgIGlmICghbWF0Y2goXCJ9XCIpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbn1cblxuLy8gMTIuMTAgVGhlIHdpdGggc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlV2l0aFN0YXRlbWVudCgpIHtcbiAgICB2YXIgb2JqZWN0LCBib2R5O1xuXG4gICAgaWYgKHN0cmljdCkge1xuICAgICAgICAvLyBUT0RPKGlrYXJpZW5hdG9yKTogU2hvdWxkIHdlIHVwZGF0ZSB0aGUgdGVzdCBjYXNlcyBpbnN0ZWFkP1xuICAgICAgICBza2lwQ29tbWVudCgpO1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdE1vZGVXaXRoKTtcbiAgICB9XG5cbiAgICBleHBlY3RLZXl3b3JkKFwid2l0aFwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICBvYmplY3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVXaXRoU3RhdGVtZW50KG9iamVjdCwgYm9keSk7XG59XG5cbi8vIDEyLjEwIFRoZSBzd2l0aCBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VTd2l0Y2hDYXNlKCkge1xuICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgdGVzdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwZWN0S2V5d29yZChcImNhc2VcIik7XG4gICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgZXhwZWN0KFwiOlwiKTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2goXCJ9XCIpIHx8IG1hdGNoS2V5d29yZChcImRlZmF1bHRcIikgfHwgbWF0Y2hLZXl3b3JkKFwiY2FzZVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zZXF1ZW50LnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTd2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGRpc2NyaW1pbmFudCwgY2FzZXMsIGNsYXVzZSwgb2xkSW5Td2l0Y2gsIGRlZmF1bHRGb3VuZDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJzd2l0Y2hcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgZGlzY3JpbWluYW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcblxuICAgIGNhc2VzID0gW107XG5cbiAgICBpZiAobWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpO1xuICAgIH1cblxuICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7XG4gICAgc3RhdGUuaW5Td2l0Y2ggPSB0cnVlO1xuICAgIGRlZmF1bHRGb3VuZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmIChtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNsYXVzZSA9IHBhcnNlU3dpdGNoQ2FzZSgpO1xuICAgICAgICBpZiAoY2xhdXNlLnRlc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlcy5wdXNoKGNsYXVzZSk7XG4gICAgfVxuXG4gICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDtcblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpO1xufVxuXG4vLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlVGhyb3dTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGFyZ3VtZW50O1xuXG4gICAgZXhwZWN0S2V5d29yZChcInRocm93XCIpO1xuXG4gICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5ld2xpbmVBZnRlclRocm93KTtcbiAgICB9XG5cbiAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRocm93U3RhdGVtZW50KGFyZ3VtZW50KTtcbn1cblxuLy8gMTIuMTQgVGhlIHRyeSBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVzZSgpIHtcbiAgICB2YXIgcGFyYW0sIGJvZHksXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZyxcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHBhcmFtU2V0OiBuZXcgU3RyaW5nTWFwKClcbiAgICAgICAgfTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJjYXRjaFwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG4gICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlQXJyYXlJbml0aWFsaXNlcigpO1xuICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwie1wiKSkge1xuXG4gICAgICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgIH1cblxuICAgIC8vIDEyLjE0LjFcbiAgICBpZiAoc3RyaWN0ICYmIHBhcmFtLm5hbWUgJiYgc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQocGFyYW0ubmFtZSkpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RDYXRjaFZhcmlhYmxlKTtcbiAgICB9XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2F0Y2hDbGF1c2UocGFyYW0sIGJvZHkpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUcnlTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGJsb2NrLCBoYW5kbGVyID0gbnVsbCwgZmluYWxpemVyID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJ0cnlcIik7XG5cbiAgICBibG9jayA9IHBhcnNlQmxvY2soKTtcblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJjYXRjaFwiKSkge1xuICAgICAgICBoYW5kbGVyID0gcGFyc2VDYXRjaENsYXVzZSgpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJmaW5hbGx5XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBmaW5hbGl6ZXIgPSBwYXJzZUJsb2NrKCk7XG4gICAgfVxuXG4gICAgaWYgKCFoYW5kbGVyICYmICFmaW5hbGl6ZXIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTm9DYXRjaE9yRmluYWxseSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRyeVN0YXRlbWVudChibG9jaywgaGFuZGxlciwgZmluYWxpemVyKTtcbn1cblxuLy8gMTIuMTUgVGhlIGRlYnVnZ2VyIHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3RhdGVtZW50KCkge1xuICAgIGV4cGVjdEtleXdvcmQoXCJkZWJ1Z2dlclwiKTtcblxuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVEZWJ1Z2dlclN0YXRlbWVudCgpO1xufVxuXG4vLyAxMiBTdGF0ZW1lbnRzXG5cbmZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KCkge1xuICAgIHZhciB0eXBlID0gbG9va2FoZWFkLnR5cGUsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIGxhYmVsZWRCb2R5LFxuICAgICAgICBtYXJrZXI7XG5cbiAgICBpZiAodHlwZSA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJ7XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlQmxvY2soKTtcbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwiO1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRW1wdHlTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwie1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgICBjYXNlIFwiKFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYnJlYWtcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUJyZWFrU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcImNvbnRpbnVlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VDb250aW51ZVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJkZWJ1Z2dlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZG9cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZm9yXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VGb3JTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSk7XG4gICAgICAgICAgICBjYXNlIFwiaWZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUlmU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInJldHVyblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInN3aXRjaFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlU3dpdGNoU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInRocm93XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VUaHJvd1N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ0cnlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVRyeVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcIndoaWxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VXaGlsZVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ3aXRoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VXaXRoU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIC8vIDEyLjEyIExhYmVsbGVkIFN0YXRlbWVudHNcbiAgICBpZiAoKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpICYmIG1hdGNoKFwiOlwiKSkge1xuICAgICAgICBsZXgoKTtcblxuICAgICAgICBpZiAoc3RhdGUubGFiZWxTZXQuaGFzKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlJlZGVjbGFyYXRpb24sIFwiTGFiZWxcIiwgZXhwci5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLmxhYmVsU2V0LnNldChleHByLm5hbWUsIHRydWUpO1xuICAgICAgICBsYWJlbGVkQm9keSA9IHBhcnNlU3RhdGVtZW50KCk7XG4gICAgICAgIHN0YXRlLmxhYmVsU2V0LmRlbGV0ZShleHByLm5hbWUpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGV4cHIsIGxhYmVsZWRCb2R5KSk7XG4gICAgfVxuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChleHByKSk7XG59XG5cbi8vIDEzIEZ1bmN0aW9uIERlZmluaXRpb25cblxuLy8gZnVuY3Rpb24gcGFyc2VDb25jaXNlQm9keSgpIHtcbi8vICAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4vLyAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcbi8vICAgICB9XG4vLyAgICAgcmV0dXJuIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbi8vIH1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCkge1xuICAgIHZhciBzb3VyY2VFbGVtZW50LCBzb3VyY2VFbGVtZW50cyA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgIG9sZExhYmVsU2V0LCBvbGRJbkl0ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rpb25Cb2R5LCBvbGRQYXJlbnRoZXNpc0NvdW50LFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcblxuICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7XG4gICAgICAgIGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkxpdGVyYWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdICsgMSwgdG9rZW4ucmFuZ2VbMV0gLSAxKTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gXCJ1c2Ugc3RyaWN0XCIpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9sZExhYmVsU2V0ID0gc3RhdGUubGFiZWxTZXQ7XG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoO1xuICAgIG9sZEluRnVuY3Rpb25Cb2R5ID0gc3RhdGUuaW5GdW5jdGlvbkJvZHk7XG4gICAgb2xkUGFyZW50aGVzaXNDb3VudCA9IHN0YXRlLnBhcmVudGhlc2lzQ291bnQ7XG5cbiAgICBzdGF0ZS5sYWJlbFNldCA9IG5ldyBTdHJpbmdNYXAoKTtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgIHN0YXRlLmluU3dpdGNoID0gZmFsc2U7XG4gICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSB0cnVlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG5cbiAgICAgICAgaWYgKG1hdGNoKFwifVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHN0YXRlLmxhYmVsU2V0ID0gb2xkTGFiZWxTZXQ7XG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNoO1xuICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gb2xkSW5GdW5jdGlvbkJvZHk7XG4gICAgc3RhdGUucGFyZW50aGVzaXNDb3VudCA9IG9sZFBhcmVudGhlc2lzQ291bnQ7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCbG9ja1N0YXRlbWVudChzb3VyY2VFbGVtZW50cykpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLCBuYW1lKSB7XG5cbiAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZChuYW1lKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1TZXQuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQobmFtZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChuYW1lLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyYW1TZXQuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9wdGlvbnMucGFyYW1TZXQuc2V0KG5hbWUsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhcmFtKG9wdGlvbnMpIHtcbiAgICB2YXIgdG9rZW4sIHBhcmFtLCBkZWYsXG4gICAgICAgIGFsbG93UmVzdFBhcmFtcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5yZXN0UGFyYW1zLFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZyxcbiAgICAgICAgYWxsb3dEZWZhdWx0UGFyYW1zID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlZmF1bHRQYXJhbXMsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgaWYgKHRva2VuLnZhbHVlID09PSBcIi4uLlwiKSB7XG4gICAgICAgIGlmICghYWxsb3dSZXN0UGFyYW1zKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlUmVzdEVsZW1lbnQoKTtcbiAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbS5hcmd1bWVudCwgcGFyYW0uYXJndW1lbnQubmFtZSk7XG4gICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICBpZiAoIWFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW0gPSBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbSk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtID0gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpO1xuICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgdG9rZW4sIHRva2VuLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2goXCI9XCIpKSB7XG4gICAgICAgIGlmIChhbGxvd0RlZmF1bHRQYXJhbXMgfHwgYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGRlZiA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICsrb3B0aW9ucy5kZWZhdWx0Q291bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWYpIHtcbiAgICAgICAgb3B0aW9ucy5wYXJhbXMucHVzaChtYXJrZXJBcHBseShcbiAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnRQYXR0ZXJuKFxuICAgICAgICAgICAgICAgIHBhcmFtLFxuICAgICAgICAgICAgICAgIGRlZlxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIW1hdGNoKFwiKVwiKTtcbn1cblxuXG5mdW5jdGlvbiBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICB2YXIgb3B0aW9ucztcblxuICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBmaXJzdFJlc3RyaWN0ZWRcbiAgICB9O1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgIG9wdGlvbnMucGFyYW1TZXQgPSBuZXcgU3RyaW5nTWFwKCk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFwYXJzZVBhcmFtKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHBlY3QoXCIsXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHBhcmFtczogb3B0aW9ucy5wYXJhbXMsXG4gICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0cmljdGVkLFxuICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLFxuICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2VcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oaWRlbnRpZmllcklzT3B0aW9uYWwpIHtcbiAgICAgICAgdmFyIGlkID0gbnVsbCwgYm9keSwgdG9rZW4sIHRtcCwgZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlLCBwcmV2aW91c1N0cmljdCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIGdlbmVyYXRvcixcbiAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICAgICAgYWxsb3dHZW5lcmF0b3JzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmdlbmVyYXRvcnM7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZChcImZ1bmN0aW9uXCIpO1xuXG4gICAgICAgIGdlbmVyYXRvciA9IGZhbHNlO1xuICAgICAgICBpZiAoYWxsb3dHZW5lcmF0b3JzICYmIG1hdGNoKFwiKlwiKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBnZW5lcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCAhbWF0Y2goXCIoXCIpKSB7XG5cbiAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuXG4gICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7XG4gICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7XG4gICAgICAgIGlmICh0bXAubWVzc2FnZSkge1xuICAgICAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7XG4gICAgICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkO1xuICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBnZW5lcmF0b3I7XG5cbiAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuXG4gICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmljdCAmJiB0bXAuc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0bXAuc3RyaWN0ZWQsIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDtcblxuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHRtcC5wYXJhbXMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbmZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkge1xuICAgIHZhciB0b2tlbiwgaWQgPSBudWxsLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHRtcCwgYm9keSwgcHJldmlvdXNTdHJpY3QsIHByZXZpb3VzWWllbGRBbGxvd2VkLCBnZW5lcmF0b3IsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycztcblxuICAgIGV4cGVjdEtleXdvcmQoXCJmdW5jdGlvblwiKTtcblxuICAgIGdlbmVyYXRvciA9IGZhbHNlO1xuXG4gICAgaWYgKGFsbG93R2VuZXJhdG9ycyAmJiBtYXRjaChcIipcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGdlbmVyYXRvciA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaChcIihcIikpIHtcbiAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7XG4gICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDtcbiAgICBpZiAodG1wLm1lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlO1xuICAgIH1cblxuICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkO1xuICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGdlbmVyYXRvcjtcblxuICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcblxuICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKHN0cmljdCAmJiB0bXAuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRtcC5zdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgfVxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgdG1wLnBhcmFtcyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICApXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VZaWVsZEV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHlpZWxkVG9rZW4sIGRlbGVnYXRlRmxhZywgZXhwciwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICB5aWVsZFRva2VuID0gbGV4KCk7XG4gICAgYXNzZXJ0KHlpZWxkVG9rZW4udmFsdWUgPT09IFwieWllbGRcIiwgXCJDYWxsZWQgcGFyc2VZaWVsZEV4cHJlc3Npb24gd2l0aCBub24teWllbGQgbG9va2FoZWFkLlwiKTtcblxuICAgIGlmICghc3RhdGUueWllbGRBbGxvd2VkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFlpZWxkKTtcbiAgICB9XG5cbiAgICBkZWxlZ2F0ZUZsYWcgPSBmYWxzZTtcbiAgICBpZiAobWF0Y2goXCIqXCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBkZWxlZ2F0ZUZsYWcgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVZaWVsZEV4cHJlc3Npb24obnVsbCwgZGVsZWdhdGVGbGFnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaChcIjtcIikgJiYgIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICBpZiAoIW1hdGNoKFwifVwiKSAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBleHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlWWllbGRFeHByZXNzaW9uKGV4cHIsIGRlbGVnYXRlRmxhZykpO1xufVxuXG4vLyBNb2R1bGVzIGdyYW1tYXIgZnJvbTpcbi8vIHBlb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbFxuXG5mdW5jdGlvbiBwYXJzZU1vZHVsZVNwZWNpZmllcigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHNwZWNpZmllcjtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTtcbiAgICB9XG4gICAgc3BlY2lmaWVyID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UobGV4KCksIHNvdXJjZSk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgc3BlY2lmaWVyKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnRTcGVjaWZpZXIoKSB7XG4gICAgdmFyIGV4cG9ydGVkLCBsb2NhbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgaWYgKG1hdGNoS2V5d29yZChcImRlZmF1bHRcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGxvY2FsID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKFwiZGVmYXVsdFwiKSk7XG4gICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH0gZnJvbSBcInNvbWV0aGluZ1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICB9XG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJhc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgZXhwb3J0ZWQgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0U3BlY2lmaWVyKGxvY2FsLCBleHBvcnRlZCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIGRlY2xhcmF0aW9uID0gbnVsbCxcbiAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllcixcbiAgICAgICAgc3JjID0gbnVsbCwgc3BlY2lmaWVycyA9IFtdLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJleHBvcnRcIik7XG5cbiAgICAvLyBub24tZGVmYXVsdCBleHBvcnRcbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBleHBvcnQgdmFyIGYgPSAxO1xuICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcImxldFwiOlxuICAgICAgICAgICAgY2FzZSBcImNvbnN0XCI6XG4gICAgICAgICAgICBjYXNlIFwidmFyXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgbnVsbCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChcIntcIik7XG4gICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgfHwgbWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKTtcbiAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUV4cG9ydFNwZWNpZmllcigpKTtcbiAgICAgICAgfSB3aGlsZSAobWF0Y2goXCIsXCIpICYmIGxleCgpICYmICFtYXRjaChcIn1cIikpO1xuICAgIH1cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJmcm9tXCIpKSB7XG4gICAgICAgIC8vIGNvdmVyaW5nOlxuICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9IGZyb20gXCJmb29cIjtcbiAgICAgICAgLy8gZXhwb3J0IHtmb299IGZyb20gXCJmb29cIjtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7XG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICB9IGVsc2UgaWYgKGlzRXhwb3J0RnJvbUlkZW50aWZpZXIpIHtcbiAgICAgICAgLy8gY292ZXJpbmc6XG4gICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH07IC8vIG1pc3NpbmcgZnJvbUNsYXVzZVxuICAgICAgICB0aHJvd0Vycm9yKHt9LCBsb29rYWhlYWQudmFsdWUgP1xuICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBsb29rYWhlYWQudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNvdmVyXG4gICAgICAgIC8vIGV4cG9ydCB7Zm9vfTtcbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgIH1cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzLCBzcmMpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIGRlY2xhcmF0aW9uID0gbnVsbCxcbiAgICAgICAgZXhwcmVzc2lvbiA9IG51bGwsXG4gICAgICAgIHBvc3NpYmxlSWRlbnRpZmllclRva2VuLFxuICAgICAgICBhbGxvd0NsYXNzZXMgPSBleHRyYS5lY21hRmVhdHVyZXMuY2xhc3NlcyxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICAvLyBjb3ZlcnM6XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgLi4uXG4gICAgZXhwZWN0S2V5d29yZChcImV4cG9ydFwiKTtcbiAgICBleHBlY3RLZXl3b3JkKFwiZGVmYXVsdFwiKTtcblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJmdW5jdGlvblwiKSB8fCBtYXRjaEtleXdvcmQoXCJjbGFzc1wiKSkge1xuICAgICAgICBwb3NzaWJsZUlkZW50aWZpZXJUb2tlbiA9IGxvb2thaGVhZDIoKTtcbiAgICAgICAgaWYgKHBvc3NpYmxlSWRlbnRpZmllclRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvbyAoKSB7fVxuICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgZm9vIHt9XG4gICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7fVxuICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyB7fVxuICAgICAgICBpZiAobG9va2FoZWFkLnZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWxsb3dDbGFzc2VzICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJjbGFzc1wiKSB7XG4gICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlQ2xhc3NEZWNsYXJhdGlvbih0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJmcm9tXCIpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBjb3ZlcnM6XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQge307XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgW107XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgKDEgKyAyKTtcbiAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlQXJyYXlJbml0aWFsaXNlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZXhwcmVzc2lvbikpO1xufVxuXG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0QWxsRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIHNyYyxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICAvLyBjb3ZlcnM6XG4gICAgLy8gZXhwb3J0ICogZnJvbSBcImZvb1wiO1xuICAgIGV4cGVjdEtleXdvcmQoXCJleHBvcnRcIik7XG4gICAgZXhwZWN0KFwiKlwiKTtcbiAgICBpZiAoIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJmcm9tXCIpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIGxvb2thaGVhZC52YWx1ZSA/XG4gICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgfVxuICAgIGxleCgpO1xuICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7XG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0QWxsRGVjbGFyYXRpb24oc3JjKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbik7XG4gICAgfVxuICAgIHZhciBkZWNsYXJhdGlvblR5cGUgPSBsb29rYWhlYWQyKCkudmFsdWU7XG4gICAgaWYgKGRlY2xhcmF0aW9uVHlwZSA9PT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKCk7XG4gICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvblR5cGUgPT09IFwiKlwiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUV4cG9ydEFsbERlY2xhcmF0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0TmFtZWREZWNsYXJhdGlvbigpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7XG4gICAgLy8gaW1wb3J0IHs8Zm9vIGFzIGJhcj59IC4uLjtcbiAgICB2YXIgbG9jYWwsIGltcG9ydGVkLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGltcG9ydGVkID0gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJhc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgbG9jYWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUltcG9ydFNwZWNpZmllcihsb2NhbCwgaW1wb3J0ZWQpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VOYW1lZEltcG9ydHMoKSB7XG4gICAgdmFyIHNwZWNpZmllcnMgPSBbXTtcbiAgICAvLyB7Zm9vLCBiYXIgYXMgYmFzfVxuICAgIGV4cGVjdChcIntcIik7XG4gICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0U3BlY2lmaWVyKCkpO1xuICAgICAgICB9IHdoaWxlIChtYXRjaChcIixcIikgJiYgbGV4KCkgJiYgIW1hdGNoKFwifVwiKSk7XG4gICAgfVxuICAgIGV4cGVjdChcIn1cIik7XG4gICAgcmV0dXJuIHNwZWNpZmllcnM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpIHtcbiAgICAvLyBpbXBvcnQgPGZvbz4gLi4uO1xuICAgIHZhciBsb2NhbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSW1wb3J0RGVmYXVsdFNwZWNpZmllcihsb2NhbCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpIHtcbiAgICAvLyBpbXBvcnQgPCogYXMgZm9vPiAuLi47XG4gICAgdmFyIGxvY2FsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdChcIipcIik7XG4gICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiYXNcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlKTtcbiAgICB9XG4gICAgbGV4KCk7XG4gICAgbG9jYWwgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihsb2NhbCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCkge1xuICAgIHZhciBzcGVjaWZpZXJzLCBzcmMsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7XG4gICAgfVxuXG4gICAgZXhwZWN0S2V5d29yZChcImltcG9ydFwiKTtcbiAgICBzcGVjaWZpZXJzID0gW107XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBpbXBvcnQgXCJmb29cIjtcbiAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnREZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBzcmMpKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoS2V5d29yZChcImRlZmF1bHRcIikgJiYgaXNJZGVudGlmaWVyTmFtZShsb29rYWhlYWQpKSB7XG4gICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgLy8gaW1wb3J0IGZvb1xuICAgICAgICAvLyBpbXBvcnQgZm9vLCAuLi5cbiAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpKTtcbiAgICAgICAgaWYgKG1hdGNoKFwiLFwiKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hdGNoKFwiKlwiKSkge1xuICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgIC8vIGltcG9ydCBmb28sICogYXMgZm9vXG4gICAgICAgIC8vIGltcG9ydCAqIGFzIGZvb1xuICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBpbXBvcnQgZm9vLCB7YmFyfVxuICAgICAgICAvLyBpbXBvcnQge2Jhcn1cbiAgICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHBhcnNlTmFtZWRJbXBvcnRzKCkpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcImZyb21cIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgbG9va2FoZWFkLnZhbHVlID9cbiAgICAgICAgICAgICAgICBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICB9XG4gICAgbGV4KCk7XG4gICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnREZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBzcmMpKTtcbn1cblxuLy8gMTQgRnVuY3Rpb25zIGFuZCBjbGFzc2VzXG5cbi8vIDE0LjEgRnVuY3Rpb25zIGlzIGRlZmluZWQgYWJvdmUgKDEzIGluIEVTNSlcbi8vIDE0LjIgQXJyb3cgRnVuY3Rpb25zIERlZmluaXRpb25zIGlzIGRlZmluZWQgaW4gKDcuMyBhc3NpZ25tZW50cylcblxuLy8gMTQuMyBNZXRob2QgRGVmaW5pdGlvbnNcbi8vIDE0LjMuN1xuXG4vLyAxNC41IENsYXNzIERlZmluaXRpb25zXG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NCb2R5KCkge1xuICAgIHZhciBoYXNDb25zdHJ1Y3RvciA9IGZhbHNlLCBnZW5lcmF0b3IgPSBmYWxzZSxcbiAgICAgICAgYWxsb3dHZW5lcmF0b3JzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmdlbmVyYXRvcnMsXG4gICAgICAgIHRva2VuLCBpc1N0YXRpYywgYm9keSA9IFtdLCBtZXRob2QsIGNvbXB1dGVkLCBrZXk7XG5cbiAgICB2YXIgZXhpc3RpbmdQcm9wcyA9IHt9LFxuICAgICAgICB0b3BNYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgbWFya2VyO1xuXG4gICAgZXhpc3RpbmdQcm9wcy5zdGF0aWMgPSBuZXcgU3RyaW5nTWFwKCk7XG4gICAgZXhpc3RpbmdQcm9wcy5wcm90b3R5cGUgPSBuZXcgU3RyaW5nTWFwKCk7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgd2hpbGUgKCFtYXRjaChcIn1cIikpIHtcblxuICAgICAgICAvLyBleHRyYSBzZW1pY29sb25zIGFyZSBmaW5lXG4gICAgICAgIGlmIChtYXRjaChcIjtcIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgZ2VuZXJhdG9yID0gbWF0Y2goXCIqXCIpO1xuICAgICAgICBjb21wdXRlZCA9IG1hdGNoKFwiW1wiKTtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICAgICAgaWYgKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgaWYgKCFhbGxvd0dlbmVyYXRvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuXG4gICAgICAgIC8vIHN0YXRpYyBnZW5lcmF0b3IgbWV0aG9kc1xuICAgICAgICBpZiAoa2V5Lm5hbWUgPT09IFwic3RhdGljXCIgJiYgbWF0Y2goXCIqXCIpKSB7XG4gICAgICAgICAgICBpZiAoIWFsbG93R2VuZXJhdG9ycykge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleS5uYW1lID09PSBcInN0YXRpY1wiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgICAgIGlzU3RhdGljID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgbWV0aG9kID0gcGFyc2VHZW5lcmF0b3JQcm9wZXJ0eShrZXksIG1hcmtlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXRob2QgPSB0cnlQYXJzZU1ldGhvZERlZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQsIG1hcmtlciwgZ2VuZXJhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgICAgIG1ldGhvZC5zdGF0aWMgPSBpc1N0YXRpYztcbiAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCA9PT0gXCJpbml0XCIpIHtcbiAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9IFwibWV0aG9kXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNTdGF0aWMpIHtcblxuICAgICAgICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVkICYmIChtZXRob2Qua2V5Lm5hbWUgfHwgKG1ldGhvZC5rZXkudmFsdWUgJiYgbWV0aG9kLmtleS52YWx1ZS50b1N0cmluZygpKSkgPT09IFwiY29uc3RydWN0b3JcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmtpbmQgIT09IFwibWV0aG9kXCIgfHwgIW1ldGhvZC5tZXRob2QgfHwgbWV0aG9kLnZhbHVlLmdlbmVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5Db25zdHJ1Y3RvclNwZWNpYWxNZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5EdXBsaWNhdGVDb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNDb25zdHJ1Y3RvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmtpbmQgPSBcImNvbnN0cnVjdG9yXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZC5jb21wdXRlZCAmJiAobWV0aG9kLmtleS5uYW1lIHx8IG1ldGhvZC5rZXkudmFsdWUudG9TdHJpbmcoKSkgPT09IFwicHJvdG90eXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5TdGF0aWNQcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1ldGhvZC50eXBlID0gYXN0Tm9kZVR5cGVzLk1ldGhvZERlZmluaXRpb247XG4gICAgICAgICAgICBkZWxldGUgbWV0aG9kLm1ldGhvZDtcbiAgICAgICAgICAgIGRlbGV0ZSBtZXRob2Quc2hvcnRoYW5kO1xuICAgICAgICAgICAgYm9keS5wdXNoKG1ldGhvZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxleCgpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseSh0b3BNYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNsYXNzQm9keShib2R5KSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NFeHByZXNzaW9uKCkge1xuICAgIHZhciBpZCA9IG51bGwsIHN1cGVyQ2xhc3MgPSBudWxsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3QsIGNsYXNzQm9keTtcblxuICAgIC8vIGNsYXNzZXMgcnVuIGluIHN0cmljdCBtb2RlXG4gICAgc3RyaWN0ID0gdHJ1ZTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJjbGFzc1wiKTtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImV4dGVuZHNcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKTtcbiAgICB9XG5cbiAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpO1xuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2xhc3NFeHByZXNzaW9uKGlkLCBzdXBlckNsYXNzLCBjbGFzc0JvZHkpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7XG4gICAgdmFyIGlkID0gbnVsbCwgc3VwZXJDbGFzcyA9IG51bGwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdCwgY2xhc3NCb2R5O1xuXG4gICAgLy8gY2xhc3NlcyBydW4gaW4gc3RyaWN0IG1vZGVcbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNsYXNzXCIpO1xuXG4gICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImV4dGVuZHNcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKTtcbiAgICB9XG5cbiAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpO1xuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2xhc3NEZWNsYXJhdGlvbihpZCwgc3VwZXJDbGFzcywgY2xhc3NCb2R5KSk7XG59XG5cbi8vIDE1IFByb2dyYW1cblxuZnVuY3Rpb24gcGFyc2VTb3VyY2VFbGVtZW50KCkge1xuXG4gICAgdmFyIGFsbG93Q2xhc3NlcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5jbGFzc2VzLFxuICAgICAgICBhbGxvd01vZHVsZXMgPSBleHRyYS5lY21hRmVhdHVyZXMubW9kdWxlcyxcbiAgICAgICAgYWxsb3dCbG9ja0JpbmRpbmdzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmJsb2NrQmluZGluZ3M7XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJleHBvcnRcIjpcbiAgICAgICAgICAgICAgICBpZiAoIWFsbG93TW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICBjYXNlIFwiaW1wb3J0XCI6XG4gICAgICAgICAgICAgICAgaWYgKCFhbGxvd01vZHVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbXBvcnREZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93Q2xhc3Nlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNvbnN0XCI6XG4gICAgICAgICAgICBjYXNlIFwibGV0XCI6XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93QmxvY2tCaW5kaW5ncykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RhdGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikge1xuICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU291cmNlRWxlbWVudHMoKSB7XG4gICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpO1xuICAgICAgICBpZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5MaXRlcmFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmVcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSArIDEsIHRva2VuLnJhbmdlWzFdIC0gMSk7XG4gICAgICAgIGlmIChkaXJlY3RpdmUgPT09IFwidXNlIHN0cmljdFwiKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVByb2dyYW0oKSB7XG4gICAgdmFyIGJvZHksXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgaXNNb2R1bGUgPSAhIWV4dHJhLmVjbWFGZWF0dXJlcy5tb2R1bGVzO1xuXG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBwZWVrKCk7XG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgc3RyaWN0ID0gaXNNb2R1bGU7XG5cbiAgICBib2R5ID0gcGFyc2VTb3VyY2VFbGVtZW50cygpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb2dyYW0oYm9keSwgaXNNb2R1bGUgPyBcIm1vZHVsZVwiIDogXCJzY3JpcHRcIikpO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJUb2tlbkxvY2F0aW9uKCkge1xuICAgIHZhciBpLCBlbnRyeSwgdG9rZW4sIHRva2VucyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGV4dHJhLnRva2Vucy5sZW5ndGg7ICsraSkge1xuICAgICAgICBlbnRyeSA9IGV4dHJhLnRva2Vuc1tpXTtcbiAgICAgICAgdG9rZW4gPSB7XG4gICAgICAgICAgICB0eXBlOiBlbnRyeS50eXBlLFxuICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlbnRyeS5yZWdleCkge1xuICAgICAgICAgICAgdG9rZW4ucmVnZXggPSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjogZW50cnkucmVnZXgucGF0dGVybixcbiAgICAgICAgICAgICAgICBmbGFnczogZW50cnkucmVnZXguZmxhZ3NcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7XG4gICAgICAgICAgICB0b2tlbi5yYW5nZSA9IGVudHJ5LnJhbmdlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgICAgIHRva2VuLmxvYyA9IGVudHJ5LmxvYztcbiAgICAgICAgfVxuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgfVxuXG4gICAgZXh0cmEudG9rZW5zID0gdG9rZW5zO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVG9rZW5pemVyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiB0b2tlbml6ZShjb2RlLCBvcHRpb25zKSB7XG4gICAgdmFyIHRvU3RyaW5nLFxuICAgICAgICB0b2tlbnM7XG5cbiAgICB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAodHlwZW9mIGNvZGUgIT09IFwic3RyaW5nXCIgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7XG4gICAgfVxuXG4gICAgc291cmNlID0gY29kZTtcbiAgICBpbmRleCA9IDA7XG4gICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDtcbiAgICBsaW5lU3RhcnQgPSAwO1xuICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgYWxsb3dJbjogdHJ1ZSxcbiAgICAgICAgbGFiZWxTZXQ6IHt9LFxuICAgICAgICBwYXJlbnRoZXNpc0NvdW50OiAwLFxuICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsXG4gICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLFxuICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMSxcbiAgICAgICAgeWllbGRBbGxvd2VkOiBmYWxzZSxcbiAgICAgICAgY3VybHlTdGFjazogW10sXG4gICAgICAgIGN1cmx5TGFzdEluZGV4OiAwLFxuICAgICAgICBpbkpTWFNwcmVhZEF0dHJpYnV0ZTogZmFsc2UsXG4gICAgICAgIGluSlNYQ2hpbGQ6IGZhbHNlLFxuICAgICAgICBpbkpTWFRhZzogZmFsc2VcbiAgICB9O1xuXG4gICAgZXh0cmEgPSB7XG4gICAgICAgIGVjbWFGZWF0dXJlczogZGVmYXVsdEZlYXR1cmVzXG4gICAgfTtcblxuICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBPZiBjb3Vyc2Ugd2UgY29sbGVjdCB0b2tlbnMgaGVyZS5cbiAgICBvcHRpb25zLnRva2VucyA9IHRydWU7XG4gICAgZXh0cmEudG9rZW5zID0gW107XG4gICAgZXh0cmEudG9rZW5pemUgPSB0cnVlO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyB0d28gZmllbGRzIGFyZSBuZWNlc3NhcnkgdG8gY29tcHV0ZSB0aGUgUmVnZXggdG9rZW5zLlxuICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gLTE7XG4gICAgZXh0cmEub3BlbkN1cmx5VG9rZW4gPSAtMTtcblxuICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5yYW5nZTtcbiAgICBleHRyYS5sb2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5sb2M7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy5jb21tZW50KSB7XG4gICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy50b2xlcmFudCkge1xuICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSBwYXJzaW5nIGZsYWdzXG4gICAgaWYgKG9wdGlvbnMuZWNtYUZlYXR1cmVzICYmIHR5cGVvZiBvcHRpb25zLmVjbWFGZWF0dXJlcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBleHRyYS5lY21hRmVhdHVyZXMgPSBvcHRpb25zLmVjbWFGZWF0dXJlcztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBwZWVrKCk7XG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmEudG9rZW5zO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHdoaWxlIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAobGV4RXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGxleEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayBvbiB0aGUgZmlyc3QgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGxleEVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTtcbiAgICAgICAgdG9rZW5zID0gZXh0cmEudG9rZW5zO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRva2Vucy5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEuZXJyb3JzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0b2tlbnMuZXJyb3JzID0gZXh0cmEuZXJyb3JzO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4dHJhID0ge307XG4gICAgfVxuICAgIHJldHVybiB0b2tlbnM7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXJzZXJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvZ3JhbSwgdG9TdHJpbmc7XG5cbiAgICB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAodHlwZW9mIGNvZGUgIT09IFwic3RyaW5nXCIgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7XG4gICAgfVxuXG4gICAgc291cmNlID0gY29kZTtcbiAgICBpbmRleCA9IDA7XG4gICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDtcbiAgICBsaW5lU3RhcnQgPSAwO1xuICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgYWxsb3dJbjogdHJ1ZSxcbiAgICAgICAgbGFiZWxTZXQ6IG5ldyBTdHJpbmdNYXAoKSxcbiAgICAgICAgcGFyZW50aGVzaXNDb3VudDogMCxcbiAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLFxuICAgICAgICBpbkl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICAgIGluU3dpdGNoOiBmYWxzZSxcbiAgICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEsXG4gICAgICAgIHlpZWxkQWxsb3dlZDogZmFsc2UsXG4gICAgICAgIGN1cmx5U3RhY2s6IFtdLFxuICAgICAgICBjdXJseUxhc3RJbmRleDogMCxcbiAgICAgICAgaW5KU1hTcHJlYWRBdHRyaWJ1dGU6IGZhbHNlLFxuICAgICAgICBpbkpTWENoaWxkOiBmYWxzZSxcbiAgICAgICAgaW5KU1hUYWc6IGZhbHNlXG4gICAgfTtcblxuICAgIGV4dHJhID0ge1xuICAgICAgICBlY21hRmVhdHVyZXM6IE9iamVjdC5jcmVhdGUoZGVmYXVsdEZlYXR1cmVzKVxuICAgIH07XG5cbiAgICAvLyBmb3IgdGVtcGxhdGUgc3RyaW5nc1xuICAgIHN0YXRlLmN1cmx5U3RhY2sgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gXCJib29sZWFuXCIpICYmIG9wdGlvbnMucmFuZ2U7XG4gICAgICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09IFwiYm9vbGVhblwiKSAmJiBvcHRpb25zLmxvYztcbiAgICAgICAgZXh0cmEuYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Ygb3B0aW9ucy5hdHRhY2hDb21tZW50ID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50O1xuXG4gICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9ucy5zb3VyY2UgIT09IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXh0cmEuc291cmNlID0gdG9TdHJpbmcob3B0aW9ucy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy50b2tlbnMpIHtcbiAgICAgICAgICAgIGV4dHJhLnRva2VucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLnRvbGVyYW50KSB7XG4gICAgICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkge1xuICAgICAgICAgICAgZXh0cmEucmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgIGNvbW1lbnRBdHRhY2htZW50LnJlc2V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zb3VyY2VUeXBlID09PSBcIm1vZHVsZVwiKSB7XG4gICAgICAgICAgICBleHRyYS5lY21hRmVhdHVyZXMgPSB7XG4gICAgICAgICAgICAgICAgYXJyb3dGdW5jdGlvbnM6IHRydWUsXG4gICAgICAgICAgICAgICAgYmxvY2tCaW5kaW5nczogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWdleFVGbGFnOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlZ2V4WUZsYWc6IHRydWUsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVTdHJpbmdzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGJpbmFyeUxpdGVyYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9jdGFsTGl0ZXJhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdW5pY29kZUNvZGVQb2ludEVzY2FwZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgc3VwZXJJbkZ1bmN0aW9uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0UGFyYW1zOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlc3RQYXJhbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgZm9yT2Y6IHRydWUsXG4gICAgICAgICAgICAgICAgb2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kTWV0aG9kczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsRHVwbGljYXRlUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3JzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRlc3RydWN0dXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgY2xhc3NlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtb2R1bGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5ld1RhcmdldDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFwcGx5IHBhcnNpbmcgZmxhZ3MgYWZ0ZXIgc291cmNlVHlwZSB0byBhbGxvdyBvdmVycmlkaW5nXG4gICAgICAgIGlmIChvcHRpb25zLmVjbWFGZWF0dXJlcyAmJiB0eXBlb2Ygb3B0aW9ucy5lY21hRmVhdHVyZXMgPT09IFwib2JqZWN0XCIpIHtcblxuICAgICAgICAgICAgLy8gaWYgaXQncyBhIG1vZHVsZSwgYXVnbWVudCB0aGUgZWNtYUZlYXR1cmVzXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zb3VyY2VUeXBlID09PSBcIm1vZHVsZVwiKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5lY21hRmVhdHVyZXMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmVjbWFGZWF0dXJlc1trZXldID0gb3B0aW9ucy5lY21hRmVhdHVyZXNba2V5XTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXh0cmEuZWNtYUZlYXR1cmVzID0gb3B0aW9ucy5lY21hRmVhdHVyZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHByb2dyYW0gPSBwYXJzZVByb2dyYW0oKTtcbiAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcHJvZ3JhbS5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7XG4gICAgICAgICAgICBwcm9ncmFtLnRva2VucyA9IGV4dHJhLnRva2VucztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcHJvZ3JhbS5lcnJvcnMgPSBleHRyYS5lcnJvcnM7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZXh0cmEgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvZ3JhbTtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0cy52ZXJzaW9uID0gcmVxdWlyZShcIi4vcGFja2FnZS5qc29uXCIpLnZlcnNpb247XG5cbmV4cG9ydHMudG9rZW5pemUgPSB0b2tlbml6ZTtcblxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuXG4vLyBEZWVwIGNvcHkuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0cy5TeW50YXggPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuYW1lLCB0eXBlcyA9IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH1cblxuICAgIGZvciAobmFtZSBpbiBhc3ROb2RlVHlwZXMpIHtcbiAgICAgICAgaWYgKGFzdE5vZGVUeXBlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgdHlwZXNbbmFtZV0gPSBhc3ROb2RlVHlwZXNbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5mcmVlemUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBPYmplY3QuZnJlZXplKHR5cGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG59KCkpO1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEEgZmFjdG9yeSBmb3IgY3JlYXRpbmcgQVNUIG5vZGVzXG4gKiBAYXV0aG9yIEZyZWQgSy4gU2Nob3R0XG4gKiBAY29weXJpZ2h0IDIwMTQgRnJlZCBLLiBTY2hvdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYXN0Tm9kZVR5cGVzID0gcmVxdWlyZShcIi4vYXN0LW5vZGUtdHlwZXNcIik7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFycmF5IEV4cHJlc3Npb24gQVNUTm9kZSBvdXQgb2YgYW4gYXJyYXkgb2YgZWxlbWVudHNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZWxlbWVudHMgQW4gYXJyYXkgb2YgQVNUTm9kZSBlbGVtZW50c1xuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGFycmF5IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uLFxuICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBcnJvdyBGdW5jdGlvbiBFeHByZXNzaW9uIEFTVE5vZGVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmFtcyBUaGUgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBmdW5jdGlvbiBib2R5XG4gICAgICogQHBhcmFtIHtib29sZWFufSBleHByZXNzaW9uIFRydWUgaWYgdGhlIGFycm93IGZ1bmN0aW9uIGlzIGNyZWF0ZWQgdmlhIGFuIGV4cHJlc3Npb24uXG4gICAgICogICAgICBBbHdheXMgZmFsc2UgZm9yIGRlY2xhcmF0aW9ucywgYnV0IGtlcHQgaGVyZSB0byBiZSBpbiBzeW5jIHdpdGhcbiAgICAgKiAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKHBhcmFtcywgYm9keSwgZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkFycm93RnVuY3Rpb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBnZW5lcmF0b3I6IGZhbHNlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG9wZXJhdG9yIFRoZSBhc3NpZ25tZW50IG9wZXJhdG9yXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgYXNzaWdubWVudCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQXNzaWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRFeHByZXNzaW9uLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBhc3NpZ25tZW50IHBhdHRlcm4gKGRlZmF1bHQgcGFyYW1ldGVycylcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBhc3NpZ25tZW50IHBhdHRlcm5cbiAgICAgKi9cbiAgICBjcmVhdGVBc3NpZ25tZW50UGF0dGVybjogZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybixcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBiaW5hcnkgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gb3BlcmF0b3IgVGhlIGFzc2lnbm1lbnQgb3BlcmF0b3JcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBiaW5hcnkgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICAgICAgICB2YXIgdHlwZSA9IChvcGVyYXRvciA9PT0gXCJ8fFwiIHx8IG9wZXJhdG9yID09PSBcIiYmXCIpID8gYXN0Tm9kZVR5cGVzLkxvZ2ljYWxFeHByZXNzaW9uIDpcbiAgICAgICAgICAgICAgICAgICAgYXN0Tm9kZVR5cGVzLkJpbmFyeUV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGJsb2NrIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgYmxvY2sgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBibG9jayBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24oYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkJsb2NrU3RhdGVtZW50LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGJyZWFrIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGFiZWwgVGhlIGJyZWFrIHN0YXRlbWVudCBsYWJlbFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgYnJlYWsgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlQnJlYWtTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQnJlYWtTdGF0ZW1lbnQsXG4gICAgICAgICAgICBsYWJlbDogbGFiZWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBjYWxsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNhbGxlZSBUaGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IGFyZ3MgQW4gYXJyYXkgb2YgQVNUTm9kZXMgcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50c1xuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGNhbGwgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbihjYWxsZWUsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5DYWxsRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLFxuICAgICAgICAgICAgXCJhcmd1bWVudHNcIjogYXJnc1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGNhdGNoIGNsYXVzZS9ibG9ja1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyYW0gQW55IGNhdGNoIGNsYXVzZSBleGVwdGlvbi9jb25kaXRpb25hbCBwYXJhbWV0ZXIgaW5mb3JtYXRpb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGNhdGNoIGJsb2NrIGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBjYXRjaCBjbGF1c2VcbiAgICAgKi9cbiAgICBjcmVhdGVDYXRjaENsYXVzZTogZnVuY3Rpb24ocGFyYW0sIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5DYXRjaENsYXVzZSxcbiAgICAgICAgICAgIHBhcmFtOiBwYXJhbSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgY2xhc3MgYm9keS5cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBib2R5IG9mIHRoZSBjbGFzcy5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGNsYXNzIGJvZHkuXG4gICAgICovXG4gICAgY3JlYXRlQ2xhc3NCb2R5OiBmdW5jdGlvbihib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2xhc3NCb2R5LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVDbGFzc0V4cHJlc3Npb246IGZ1bmN0aW9uKGlkLCBzdXBlckNsYXNzLCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2xhc3NFeHByZXNzaW9uLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgc3VwZXJDbGFzczogc3VwZXJDbGFzcyxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlQ2xhc3NEZWNsYXJhdGlvbjogZnVuY3Rpb24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5DbGFzc0RlY2xhcmF0aW9uLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgc3VwZXJDbGFzczogc3VwZXJDbGFzcyxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlTWV0aG9kRGVmaW5pdGlvbjogZnVuY3Rpb24ocHJvcGVydHlUeXBlLCBraW5kLCBrZXksIHZhbHVlLCBjb21wdXRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLk1ldGhvZERlZmluaXRpb24sXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgICAgICBcInN0YXRpY1wiOiBwcm9wZXJ0eVR5cGUgPT09IFwic3RhdGljXCIsXG4gICAgICAgICAgICBjb21wdXRlZDogY29tcHV0ZWRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlTWV0YVByb3BlcnR5OiBmdW5jdGlvbihtZXRhLCBwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLk1ldGFQcm9wZXJ0eSxcbiAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBjb25kaXRpb25hbCB0byBldmFsdWF0ZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gY29uc2VxdWVudCBUaGUgY29kZSB0byBiZSBydW4gaWYgdGhlIHRlc3QgcmV0dXJucyB0cnVlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhbHRlcm5hdGUgVGhlIGNvZGUgdG8gYmUgcnVuIGlmIHRoZSB0ZXN0IHJldHVybnMgZmFsc2VcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBmdW5jdGlvbih0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Db25kaXRpb25hbEV4cHJlc3Npb24sXG4gICAgICAgICAgICB0ZXN0OiB0ZXN0LFxuICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCxcbiAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJuYXRlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgY29udGludWUgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHs/QVNUTm9kZX0gbGFiZWwgVGhlIG9wdGlvbmFsIGNvbnRpbnVlIGxhYmVsIChudWxsIGlmIG5vdCBzZXQpXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBjb250aW51ZSBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVDb250aW51ZVN0YXRlbWVudDogZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Db250aW51ZVN0YXRlbWVudCxcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGRlYnVnZ2VyIHN0YXRlbWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZGVidWdnZXIgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkRlYnVnZ2VyU3RhdGVtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGVtcHR5IHN0YXRlbWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhbiBlbXB0eSBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVFbXB0eVN0YXRlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRW1wdHlTdGF0ZW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb25cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwcmVzc2lvblN0YXRlbWVudCxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB3aGlsZSBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIHdoaWxlIGNvbmRpdGlvbmFsXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSB3aGlsZSBsb29wIGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB3aGlsZSBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24odGVzdCwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLldoaWxlU3RhdGVtZW50LFxuICAgICAgICAgICAgdGVzdDogdGVzdCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBkby4ud2hpbGUgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBkby4ud2hpbGUgY29uZGl0aW9uYWxcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGRvLi53aGlsZSBsb29wIGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBkby4ud2hpbGUgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rpb24odGVzdCwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkRvV2hpbGVTdGF0ZW1lbnQsXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgdGVzdDogdGVzdFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGZvciBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGluaXQgVGhlIGluaXRpYWxpemF0aW9uIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIGNvbmRpdGlvbmFsIHRlc3QgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdXBkYXRlIFRoZSB1cGRhdGUgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBmb3Igc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRm9yU3RhdGVtZW50OiBmdW5jdGlvbihpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Gb3JTdGF0ZW1lbnQsXG4gICAgICAgICAgICBpbml0OiBpbml0LFxuICAgICAgICAgICAgdGVzdDogdGVzdCxcbiAgICAgICAgICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGZvci4uaW4gc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSBsZWZ0LXNpZGUgdmFyaWFibGUgZm9yIHRoZSBwcm9wZXJ0eSBuYW1lXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSByaWdodCBUaGUgcmlnaHQtc2lkZSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZm9yLi5pbiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVGb3JJblN0YXRlbWVudDogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Gb3JJblN0YXRlbWVudCxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHQsXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgZWFjaDogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmb3IuLm9mIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGVmdCBUaGUgbGVmdC1zaWRlIHZhcmlhYmxlIGZvciB0aGUgcHJvcGVydHkgdmFsdWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSByaWdodC1zaWRlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBmb3IuLm9mIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUZvck9mU3RhdGVtZW50OiBmdW5jdGlvbihsZWZ0LCByaWdodCwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkZvck9mU3RhdGVtZW50LFxuICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmdW5jdGlvbiBkZWNsYXJhdGlvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaWQgVGhlIGZ1bmN0aW9uIG5hbWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmFtcyBUaGUgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBmdW5jdGlvbiBib2R5XG4gICAgICogQHBhcmFtIHtib29sZWFufSBnZW5lcmF0b3IgVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgYSBnZW5lcmF0b3IsIGZhbHNlIGlmIG5vdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4cHJlc3Npb24gVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgY3JlYXRlZCB2aWEgYW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgIEFsd2F5cyBmYWxzZSBmb3IgZGVjbGFyYXRpb25zLCBidXQga2VwdCBoZXJlIHRvIGJlIGluIHN5bmMgd2l0aFxuICAgICAqICAgICAgRnVuY3Rpb25FeHByZXNzaW9uIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZnVuY3Rpb24gZGVjbGFyYXRpb25cbiAgICAgKi9cbiAgICBjcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJhdG9yLCBleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIGdlbmVyYXRvcjogISFnZW5lcmF0b3IsXG4gICAgICAgICAgICBleHByZXNzaW9uOiAhIWV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmdW5jdGlvbiBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpZCBUaGUgZnVuY3Rpb24gbmFtZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyYW1zIFRoZSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGZ1bmN0aW9uIGJvZHlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdlbmVyYXRvciBUcnVlIGlmIHRoZSBmdW5jdGlvbiBpcyBhIGdlbmVyYXRvciwgZmFsc2UgaWYgbm90LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwcmVzc2lvbiBUcnVlIGlmIHRoZSBmdW5jdGlvbiBpcyBjcmVhdGVkIHZpYSBhbiBleHByZXNzaW9uLlxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uXG4gICAgICovXG4gICAgY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJhdG9yLCBleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgZ2VuZXJhdG9yOiAhIWdlbmVyYXRvcixcbiAgICAgICAgICAgIGV4cHJlc3Npb246ICEhZXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpZGVudGlmaWVyXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBuYW1lIFRoZSBpZGVudGlmaWVyIG5hbWVcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gaWRlbnRpZmllclxuICAgICAqL1xuICAgIGNyZWF0ZUlkZW50aWZpZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpZiBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIGlmIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNvbnNlcXVlbnQgVGhlIGNvbnNlcXVlbnQgaWYgc3RhdGVtZW50IHRvIHJ1blxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYWx0ZXJuYXRlIHRoZSBcImVsc2VcIiBhbHRlcm5hdGUgc3RhdGVtZW50XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGFuIGlmIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUlmU3RhdGVtZW50OiBmdW5jdGlvbih0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JZlN0YXRlbWVudCxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50LFxuICAgICAgICAgICAgYWx0ZXJuYXRlOiBhbHRlcm5hdGVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBsYWJlbGVkIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGFiZWwgVGhlIHN0YXRlbWVudCBsYWJlbFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgbGFiZWxlZCBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGxhYmVsZWQgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlTGFiZWxlZFN0YXRlbWVudDogZnVuY3Rpb24obGFiZWwsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5MYWJlbGVkU3RhdGVtZW50LFxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSBsaXRlcmFsIGZyb20gdGhlIHNvdXJjZSBjb2RlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0b2tlbiBUaGUgQVNUTm9kZSB0b2tlblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSBjb2RlIHRvIGdldCB0aGUgbGl0ZXJhbCBmcm9tXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBuZXcgbGl0ZXJhbFxuICAgICAqL1xuICAgIGNyZWF0ZUxpdGVyYWxGcm9tU291cmNlOiBmdW5jdGlvbih0b2tlbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBub2RlID0ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkxpdGVyYWwsXG4gICAgICAgICAgICB2YWx1ZTogdG9rZW4udmFsdWUsXG4gICAgICAgICAgICByYXc6IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSwgdG9rZW4ucmFuZ2VbMV0pXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcmVndWxhciBleHByZXNzaW9ucyBoYXZlIHJlZ2V4IHByb3BlcnRpZXNcbiAgICAgICAgaWYgKHRva2VuLnJlZ2V4KSB7XG4gICAgICAgICAgICBub2RlLnJlZ2V4ID0gdG9rZW4ucmVnZXg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgdGVtcGxhdGUgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZSBEYXRhIG9uIHRoZSBlbGVtZW50IHZhbHVlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlLnJhdyBUaGUgcmF3IHRlbXBsYXRlIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZS5jb29rZWQgVGhlIHByb2Nlc3NlZCB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRhaWwgVHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaW5hbCBlbGVtZW50IGluIGEgdGVtcGxhdGUgc3RyaW5nXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZWxlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVRlbXBsYXRlRWxlbWVudDogZnVuY3Rpb24odmFsdWUsIHRhaWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UZW1wbGF0ZUVsZW1lbnQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0YWlsOiB0YWlsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHRlbXBsYXRlIGxpdGVyYWxcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gcXVhc2lzIEFuIGFycmF5IG9mIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZWxlbWVudHNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZXhwcmVzc2lvbnMgQW4gYXJyYXkgb2YgdGhlIHRlbXBsYXRlIHN0cmluZyBleHByZXNzaW9uc1xuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgdGVtcGxhdGUgc3RyaW5nXG4gICAgICovXG4gICAgY3JlYXRlVGVtcGxhdGVMaXRlcmFsOiBmdW5jdGlvbihxdWFzaXMsIGV4cHJlc3Npb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVGVtcGxhdGVMaXRlcmFsLFxuICAgICAgICAgICAgcXVhc2lzOiBxdWFzaXMsXG4gICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVzc2lvbnNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBzcHJlYWQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIGFycmF5IGJlaW5nIHNwcmVhZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHNwcmVhZCBlbGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlU3ByZWFkRWxlbWVudDogZnVuY3Rpb24oYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50LFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGV4cGVyaW1lbnRhbCByZXN0IHByb3BlcnR5XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgaWRlbnRpZmllciBiZWluZyByZXN0ZWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSByZXN0IGVsZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVFeHBlcmltZW50YWxSZXN0UHJvcGVydHk6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwZXJpbWVudGFsUmVzdFByb3BlcnR5LFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGV4cGVyaW1lbnRhbCBzcHJlYWQgcHJvcGVydHlcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3VtZW50IFRoZSBpZGVudGlmaWVyIGJlaW5nIHNwcmVhZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHNwcmVhZCBlbGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRXhwZXJpbWVudGFsU3ByZWFkUHJvcGVydHk6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwZXJpbWVudGFsU3ByZWFkUHJvcGVydHksXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgdGFnZ2VkIHRlbXBsYXRlIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRhZyBUaGUgdGFnIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHF1YXNpIEEgVGVtcGxhdGVMaXRlcmFsIEFTVE5vZGUgcmVwcmVzZW50aW5nXG4gICAgICogdGhlIHRlbXBsYXRlIHN0cmluZyBpdHNlbGYuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSB0YWdnZWQgdGVtcGxhdGVcbiAgICAgKi9cbiAgICBjcmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uKHRhZywgcXVhc2kpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24sXG4gICAgICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgICAgIHF1YXNpOiBxdWFzaVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG1lbWJlciBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGFjY2Vzc29yIFRoZSBtZW1iZXIgYWNjZXNzIG1ldGhvZCAoYnJhY2tldCBvciBwZXJpb2QpXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBvYmplY3QgVGhlIG9iamVjdCBiZWluZyByZWZlcmVuY2VkXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBwcm9wZXJ0eSBUaGUgb2JqZWN0LXByb3BlcnR5IGJlaW5nIHJlZmVyZW5jZWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBtZW1iZXIgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZU1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uKGFjY2Vzc29yLCBvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNvbXB1dGVkOiBhY2Nlc3NvciA9PT0gXCJbXCIsXG4gICAgICAgICAgICBvYmplY3Q6IG9iamVjdCxcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldyBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjYWxsZWUgVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgbmV3IG9iamVjdCB0eXBlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmdzIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvclxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIG5ldyBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlTmV3RXhwcmVzc2lvbjogZnVuY3Rpb24oY2FsbGVlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLFxuICAgICAgICAgICAgXCJhcmd1bWVudHNcIjogYXJnc1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldyBvYmplY3QgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBwcm9wZXJ0aWVzIEFuIGFycmF5IG9mIEFTVE5vZGVzIHRoYXQgcmVwcmVzZW50IGFsbCBvYmplY3RcbiAgICAgKiAgICAgIHByb3BlcnRpZXMgYW5kIGFzc29jaWF0ZWQgdmFsdWVzXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgbmV3IG9iamVjdCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlT2JqZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24ocHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgcG9zdGZpeCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yIFRoZSBwb3N0Zml4IG9wZXJhdG9yIChcIisrXCIsIFwiLS1cIiwgZXRjLilcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3VtZW50IFRoZSBvcGVyYXRvciBhcmd1bWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHBvc3RmaXggZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uOiBmdW5jdGlvbihvcGVyYXRvciwgYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5VcGRhdGVFeHByZXNzaW9uLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LFxuICAgICAgICAgICAgcHJlZml4OiBmYWxzZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBlbnRpcmUgcHJvZ3JhbVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgcHJvZ3JhbSBib2R5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVR5cGUgRWl0aGVyIFwibW9kdWxlXCIgb3IgXCJzY3JpcHRcIi5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gZW50aXJlIHByb2dyYW1cbiAgICAgKi9cbiAgICBjcmVhdGVQcm9ncmFtOiBmdW5jdGlvbihib2R5LCBzb3VyY2VUeXBlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUHJvZ3JhbSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiBzb3VyY2VUeXBlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdCBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIFRoZSB0eXBlIG9mIHByb3BlcnR5IHJlcHJlc2VudGVkIChcImdldFwiLCBcInNldFwiLCBldGMuKVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0ga2V5IFRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHZhbHVlIFRoZSBuZXcgcHJvcGVydHkgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG1ldGhvZCBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyBhbHNvIGEgbWV0aG9kICh2YWx1ZSBpcyBhIGZ1bmN0aW9uKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvcnRoYW5kIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHNob3J0aGFuZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29tcHV0ZWQgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgdmFsdWUgaGFzIGJlZW4gY29tcHV0ZWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAgICovXG4gICAgY3JlYXRlUHJvcGVydHk6IGZ1bmN0aW9uKGtpbmQsIGtleSwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kLCBjb21wdXRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlByb3BlcnR5LFxuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBzaG9ydGhhbmQ6IHNob3J0aGFuZCxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBjb21wdXRlZFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHJlc3QgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIHJlc3QgYXJndW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSByZXN0IGVsZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVSZXN0RWxlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUmVzdEVsZW1lbnQsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSByZXR1cm4gc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHs/QVNUTm9kZX0gYXJndW1lbnQgVGhlIHJldHVybiBhcmd1bWVudCwgbnVsbCBpZiBubyBhcmd1bWVudCBpcyBwcm92aWRlZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHJldHVybiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUmV0dXJuU3RhdGVtZW50LFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZXhwcmVzc2lvbnMgQW4gYXJyYXkgY29udGFpbmluZyBlYWNoIGV4cHJlc3Npb24sIGluIG9yZGVyXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnNcbiAgICAgKi9cbiAgICBjcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb246IGZ1bmN0aW9uKGV4cHJlc3Npb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU2VxdWVuY2VFeHByZXNzaW9uLFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIHN1cGVyXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHN1cGVyXG4gICAgICovXG4gICAgY3JlYXRlU3VwZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlN1cGVyXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3dpdGNoIGNhc2Ugc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBjYXNlIHZhbHVlIHRvIHRlc3QgYWdhaW5zdCB0aGUgc3dpdGNoIHZhbHVlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjb25zZXF1ZW50IFRoZSBjb25zZXF1ZW50IGNhc2Ugc3RhdGVtZW50XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc3dpdGNoIGNhc2VcbiAgICAgKi9cbiAgICBjcmVhdGVTd2l0Y2hDYXNlOiBmdW5jdGlvbih0ZXN0LCBjb25zZXF1ZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU3dpdGNoQ2FzZSxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3dpdGNoIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gZGlzY3JpbWluYW50IEFuIGV4cHJlc3Npb24gdG8gdGVzdCBhZ2FpbnN0IGVhY2ggY2FzZSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBjYXNlcyBBbiBhcnJheSBvZiBzd2l0Y2ggY2FzZSBzdGF0ZW1lbnRzXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc3dpdGNoIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVN3aXRjaFN0YXRlbWVudDogZnVuY3Rpb24oZGlzY3JpbWluYW50LCBjYXNlcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlN3aXRjaFN0YXRlbWVudCxcbiAgICAgICAgICAgIGRpc2NyaW1pbmFudDogZGlzY3JpbWluYW50LFxuICAgICAgICAgICAgY2FzZXM6IGNhc2VzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhpcyBzdGF0ZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB0aGlzIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVRoaXNFeHByZXNzaW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UaGlzRXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHRocm93IHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIGFyZ3VtZW50IHRvIHRocm93XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdGhyb3cgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlVGhyb3dTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVGhyb3dTdGF0ZW1lbnQsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB0cnkgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBibG9jayBUaGUgdHJ5IGJsb2NrXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBoYW5kbGVyIEEgY2F0Y2ggaGFuZGxlclxuICAgICAqIEBwYXJhbSB7P0FTVE5vZGV9IGZpbmFsaXplciBUaGUgZmluYWwgY29kZSBibG9jayB0byBydW4gYWZ0ZXIgdGhlIHRyeS9jYXRjaCBoYXMgcnVuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdHJ5IHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVRyeVN0YXRlbWVudDogZnVuY3Rpb24oYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlRyeVN0YXRlbWVudCxcbiAgICAgICAgICAgIGJsb2NrOiBibG9jayxcbiAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgICAgICBmaW5hbGl6ZXI6IGZpbmFsaXplclxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHVuYXJ5IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgVGhlIHVuYXJ5IG9wZXJhdG9yXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgdW5hcnkgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHVuYXJ5IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVVbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBhcmd1bWVudCkge1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09IFwiKytcIiB8fCBvcGVyYXRvciA9PT0gXCItLVwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5VcGRhdGVFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsXG4gICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVW5hcnlFeHByZXNzaW9uLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LFxuICAgICAgICAgICAgcHJlZml4OiB0cnVlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFyaWFibGUgZGVjbGFyYXRpb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZGVjbGFyYXRpb25zIEFuIGFycmF5IG9mIHZhcmlhYmxlIGRlY2xhcmF0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIFRoZSBraW5kIG9mIHZhcmlhYmxlIGNyZWF0ZWQgKFwidmFyXCIsIFwibGV0XCIsIGV0Yy4pXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdmFyaWFibGUgZGVjbGFyYXRpb25cbiAgICAgKi9cbiAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5WYXJpYWJsZURlY2xhcmF0aW9uLFxuICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBkZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICBraW5kOiBraW5kXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFyaWFibGUgZGVjbGFyYXRvclxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaWQgVGhlIHZhcmlhYmxlIElEXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpbml0IFRoZSB2YXJpYWJsZSdzIGluaXRpYWwgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB2YXJpYWJsZSBkZWNsYXJhdG9yXG4gICAgICovXG4gICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbihpZCwgaW5pdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlZhcmlhYmxlRGVjbGFyYXRvcixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIGluaXQ6IGluaXRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB3aXRoIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gb2JqZWN0IFRoZSB3aXRoIHN0YXRlbWVudCBvYmplY3QgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgd2l0aCBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHdpdGggc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlV2l0aFN0YXRlbWVudDogZnVuY3Rpb24ob2JqZWN0LCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuV2l0aFN0YXRlbWVudCxcbiAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVZaWVsZEV4cHJlc3Npb246IGZ1bmN0aW9uKGFyZ3VtZW50LCBkZWxlZ2F0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLllpZWxkRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCB8fCBudWxsLFxuICAgICAgICAgICAgZGVsZWdhdGU6IGRlbGVnYXRlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWEF0dHJpYnV0ZTogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hBdHRyaWJ1dGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlIHx8IG51bGxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYU3ByZWFkQXR0cmlidXRlOiBmdW5jdGlvbihhcmd1bWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWFNwcmVhZEF0dHJpYnV0ZSxcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hJZGVudGlmaWVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYSWRlbnRpZmllcixcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYTmFtZXNwYWNlZE5hbWU6IGZ1bmN0aW9uKG5hbWVzcGFjZSwgbmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWE5hbWVzcGFjZWROYW1lLFxuICAgICAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWE1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hNZW1iZXJFeHByZXNzaW9uLFxuICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRWxlbWVudDogZnVuY3Rpb24ob3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdFbGVtZW50LCBjaGlsZHJlbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEVsZW1lbnQsXG4gICAgICAgICAgICBvcGVuaW5nRWxlbWVudDogb3BlbmluZ0VsZW1lbnQsXG4gICAgICAgICAgICBjbG9zaW5nRWxlbWVudDogY2xvc2luZ0VsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRW1wdHlFeHByZXNzaW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hFbXB0eUV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjogZnVuY3Rpb24oZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEV4cHJlc3Npb25Db250YWluZXIsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWE9wZW5pbmdFbGVtZW50OiBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWE9wZW5pbmdFbGVtZW50LFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHNlbGZDbG9zaW5nOiBzZWxmQ2xvc2luZyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYQ2xvc2luZ0VsZW1lbnQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hDbG9zaW5nRWxlbWVudCxcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0U3BlY2lmaWVyOiBmdW5jdGlvbihsb2NhbCwgZXhwb3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5FeHBvcnRTcGVjaWZpZXIsXG4gICAgICAgICAgICBleHBvcnRlZDogZXhwb3J0ZWQgfHwgbG9jYWwsXG4gICAgICAgICAgICBsb2NhbDogbG9jYWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogZnVuY3Rpb24obG9jYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JbXBvcnREZWZhdWx0U3BlY2lmaWVyLFxuICAgICAgICAgICAgbG9jYWw6IGxvY2FsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogZnVuY3Rpb24obG9jYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIsXG4gICAgICAgICAgICBsb2NhbDogbG9jYWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogZnVuY3Rpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBkZWNsYXJhdGlvbjogZGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzcGVjaWZpZXJzOiBzcGVjaWZpZXJzLFxuICAgICAgICAgICAgc291cmNlOiBzb3VyY2VcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBmdW5jdGlvbihkZWNsYXJhdGlvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbixcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uOiBkZWNsYXJhdGlvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVFeHBvcnRBbGxEZWNsYXJhdGlvbjogZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwb3J0QWxsRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVJbXBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uKGxvY2FsLCBpbXBvcnRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkltcG9ydFNwZWNpZmllcixcbiAgICAgICAgICAgIGxvY2FsOiBsb2NhbCB8fCBpbXBvcnRlZCxcbiAgICAgICAgICAgIGltcG9ydGVkOiBpbXBvcnRlZFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24oc3BlY2lmaWVycywgc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSW1wb3J0RGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzcGVjaWZpZXJzOiBzcGVjaWZpZXJzLFxuICAgICAgICAgICAgc291cmNlOiBzb3VyY2VcbiAgICAgICAgfTtcbiAgICB9XG5cbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhlIEFTVCBub2RlIHR5cGVzIHByb2R1Y2VkIGJ5IHRoZSBwYXJzZXIuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb25lIVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuICAgIEFzc2lnbm1lbnRQYXR0ZXJuOiBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIsXG4gICAgQXJyYXlFeHByZXNzaW9uOiBcIkFycmF5RXhwcmVzc2lvblwiLFxuICAgIEFycmF5UGF0dGVybjogXCJBcnJheVBhdHRlcm5cIixcbiAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiLFxuICAgIEJsb2NrU3RhdGVtZW50OiBcIkJsb2NrU3RhdGVtZW50XCIsXG4gICAgQmluYXJ5RXhwcmVzc2lvbjogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgQnJlYWtTdGF0ZW1lbnQ6IFwiQnJlYWtTdGF0ZW1lbnRcIixcbiAgICBDYWxsRXhwcmVzc2lvbjogXCJDYWxsRXhwcmVzc2lvblwiLFxuICAgIENhdGNoQ2xhdXNlOiBcIkNhdGNoQ2xhdXNlXCIsXG4gICAgQ2xhc3NCb2R5OiBcIkNsYXNzQm9keVwiLFxuICAgIENsYXNzRGVjbGFyYXRpb246IFwiQ2xhc3NEZWNsYXJhdGlvblwiLFxuICAgIENsYXNzRXhwcmVzc2lvbjogXCJDbGFzc0V4cHJlc3Npb25cIixcbiAgICBDb25kaXRpb25hbEV4cHJlc3Npb246IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsXG4gICAgQ29udGludWVTdGF0ZW1lbnQ6IFwiQ29udGludWVTdGF0ZW1lbnRcIixcbiAgICBEb1doaWxlU3RhdGVtZW50OiBcIkRvV2hpbGVTdGF0ZW1lbnRcIixcbiAgICBEZWJ1Z2dlclN0YXRlbWVudDogXCJEZWJ1Z2dlclN0YXRlbWVudFwiLFxuICAgIEVtcHR5U3RhdGVtZW50OiBcIkVtcHR5U3RhdGVtZW50XCIsXG4gICAgRXhwZXJpbWVudGFsUmVzdFByb3BlcnR5OiBcIkV4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eVwiLFxuICAgIEV4cGVyaW1lbnRhbFNwcmVhZFByb3BlcnR5OiBcIkV4cGVyaW1lbnRhbFNwcmVhZFByb3BlcnR5XCIsXG4gICAgRXhwcmVzc2lvblN0YXRlbWVudDogXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsXG4gICAgRm9yU3RhdGVtZW50OiBcIkZvclN0YXRlbWVudFwiLFxuICAgIEZvckluU3RhdGVtZW50OiBcIkZvckluU3RhdGVtZW50XCIsXG4gICAgRm9yT2ZTdGF0ZW1lbnQ6IFwiRm9yT2ZTdGF0ZW1lbnRcIixcbiAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBGdW5jdGlvbkV4cHJlc3Npb246IFwiRnVuY3Rpb25FeHByZXNzaW9uXCIsXG4gICAgSWRlbnRpZmllcjogXCJJZGVudGlmaWVyXCIsXG4gICAgSWZTdGF0ZW1lbnQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBMaXRlcmFsOiBcIkxpdGVyYWxcIixcbiAgICBMYWJlbGVkU3RhdGVtZW50OiBcIkxhYmVsZWRTdGF0ZW1lbnRcIixcbiAgICBMb2dpY2FsRXhwcmVzc2lvbjogXCJMb2dpY2FsRXhwcmVzc2lvblwiLFxuICAgIE1lbWJlckV4cHJlc3Npb246IFwiTWVtYmVyRXhwcmVzc2lvblwiLFxuICAgIE1ldGFQcm9wZXJ0eTogXCJNZXRhUHJvcGVydHlcIixcbiAgICBNZXRob2REZWZpbml0aW9uOiBcIk1ldGhvZERlZmluaXRpb25cIixcbiAgICBOZXdFeHByZXNzaW9uOiBcIk5ld0V4cHJlc3Npb25cIixcbiAgICBPYmplY3RFeHByZXNzaW9uOiBcIk9iamVjdEV4cHJlc3Npb25cIixcbiAgICBPYmplY3RQYXR0ZXJuOiBcIk9iamVjdFBhdHRlcm5cIixcbiAgICBQcm9ncmFtOiBcIlByb2dyYW1cIixcbiAgICBQcm9wZXJ0eTogXCJQcm9wZXJ0eVwiLFxuICAgIFJlc3RFbGVtZW50OiBcIlJlc3RFbGVtZW50XCIsXG4gICAgUmV0dXJuU3RhdGVtZW50OiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogXCJTZXF1ZW5jZUV4cHJlc3Npb25cIixcbiAgICBTcHJlYWRFbGVtZW50OiBcIlNwcmVhZEVsZW1lbnRcIixcbiAgICBTdXBlcjogXCJTdXBlclwiLFxuICAgIFN3aXRjaENhc2U6IFwiU3dpdGNoQ2FzZVwiLFxuICAgIFN3aXRjaFN0YXRlbWVudDogXCJTd2l0Y2hTdGF0ZW1lbnRcIixcbiAgICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IFwiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uXCIsXG4gICAgVGVtcGxhdGVFbGVtZW50OiBcIlRlbXBsYXRlRWxlbWVudFwiLFxuICAgIFRlbXBsYXRlTGl0ZXJhbDogXCJUZW1wbGF0ZUxpdGVyYWxcIixcbiAgICBUaGlzRXhwcmVzc2lvbjogXCJUaGlzRXhwcmVzc2lvblwiLFxuICAgIFRocm93U3RhdGVtZW50OiBcIlRocm93U3RhdGVtZW50XCIsXG4gICAgVHJ5U3RhdGVtZW50OiBcIlRyeVN0YXRlbWVudFwiLFxuICAgIFVuYXJ5RXhwcmVzc2lvbjogXCJVbmFyeUV4cHJlc3Npb25cIixcbiAgICBVcGRhdGVFeHByZXNzaW9uOiBcIlVwZGF0ZUV4cHJlc3Npb25cIixcbiAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIixcbiAgICBWYXJpYWJsZURlY2xhcmF0b3I6IFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsXG4gICAgV2hpbGVTdGF0ZW1lbnQ6IFwiV2hpbGVTdGF0ZW1lbnRcIixcbiAgICBXaXRoU3RhdGVtZW50OiBcIldpdGhTdGF0ZW1lbnRcIixcbiAgICBZaWVsZEV4cHJlc3Npb246IFwiWWllbGRFeHByZXNzaW9uXCIsXG4gICAgSlNYSWRlbnRpZmllcjogXCJKU1hJZGVudGlmaWVyXCIsXG4gICAgSlNYTmFtZXNwYWNlZE5hbWU6IFwiSlNYTmFtZXNwYWNlZE5hbWVcIixcbiAgICBKU1hNZW1iZXJFeHByZXNzaW9uOiBcIkpTWE1lbWJlckV4cHJlc3Npb25cIixcbiAgICBKU1hFbXB0eUV4cHJlc3Npb246IFwiSlNYRW1wdHlFeHByZXNzaW9uXCIsXG4gICAgSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjogXCJKU1hFeHByZXNzaW9uQ29udGFpbmVyXCIsXG4gICAgSlNYRWxlbWVudDogXCJKU1hFbGVtZW50XCIsXG4gICAgSlNYQ2xvc2luZ0VsZW1lbnQ6IFwiSlNYQ2xvc2luZ0VsZW1lbnRcIixcbiAgICBKU1hPcGVuaW5nRWxlbWVudDogXCJKU1hPcGVuaW5nRWxlbWVudFwiLFxuICAgIEpTWEF0dHJpYnV0ZTogXCJKU1hBdHRyaWJ1dGVcIixcbiAgICBKU1hTcHJlYWRBdHRyaWJ1dGU6IFwiSlNYU3ByZWFkQXR0cmlidXRlXCIsXG4gICAgSlNYVGV4dDogXCJKU1hUZXh0XCIsXG4gICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBcIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvblwiLFxuICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IFwiRXhwb3J0TmFtZWREZWNsYXJhdGlvblwiLFxuICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIsXG4gICAgRXhwb3J0U3BlY2lmaWVyOiBcIkV4cG9ydFNwZWNpZmllclwiLFxuICAgIEltcG9ydERlY2xhcmF0aW9uOiBcIkltcG9ydERlY2xhcmF0aW9uXCIsXG4gICAgSW1wb3J0U3BlY2lmaWVyOiBcIkltcG9ydFNwZWNpZmllclwiLFxuICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6IFwiSW1wb3J0RGVmYXVsdFNwZWNpZmllclwiLFxuICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogXCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXJcIlxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBBdHRhY2hlcyBjb21tZW50cyB0byB0aGUgQVNULlxuICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthc1xuICogQGNvcHlyaWdodCAyMDE1IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGFzdE5vZGVUeXBlcyA9IHJlcXVpcmUoXCIuL2FzdC1ub2RlLXR5cGVzXCIpO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJpdmF0ZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGV4dHJhID0ge1xuICAgICAgICB0cmFpbGluZ0NvbW1lbnRzOiBbXSxcbiAgICAgICAgbGVhZGluZ0NvbW1lbnRzOiBbXSxcbiAgICAgICAgYm90dG9tUmlnaHRTdGFjazogW11cbiAgICB9O1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFjayA9IFtdO1xuICAgIH0sXG5cbiAgICBhZGRDb21tZW50OiBmdW5jdGlvbihjb21tZW50KSB7XG4gICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgfSxcblxuICAgIHByb2Nlc3NDb21tZW50OiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIHZhciBsYXN0Q2hpbGQsXG4gICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzLFxuICAgICAgICAgICAgaTtcblxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuUHJvZ3JhbSkge1xuICAgICAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogSWYgdGhlIGZpcnN0IGNvbW1lbnQgaW4gdHJhaWxpbmdDb21tZW50cyBjb21lcyBhZnRlciB0aGVcbiAgICAgICAgICAgICAqIGN1cnJlbnQgbm9kZSwgdGhlbiB3ZSdyZSBnb29kIC0gYWxsIGNvbW1lbnRzIGluIHRoZSBhcnJheSB3aWxsXG4gICAgICAgICAgICAgKiBjb21lIGFmdGVyIHRoZSBub2RlIGFuZCBzbyBpdCdzIHNhZmUgdG8gYWRkIHRoZW4gYXMgb2ZmaWNpYWxcbiAgICAgICAgICAgICAqIHRyYWlsaW5nQ29tbWVudHMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEudHJhaWxpbmdDb21tZW50cztcbiAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgKiBPdGhlcndpc2UsIGlmIHRoZSBmaXJzdCBjb21tZW50IGRvZXNuJ3QgY29tZSBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgKiBjdXJyZW50IG5vZGUsIHRoYXQgbWVhbnMgd2UgaGF2ZSBhIG1peCBvZiBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgICAgICAgICAgICAgICAqIGNvbW1lbnRzIGluIHRoZSBhcnJheSBhbmQgdGhhdCBsZWFkaW5nQ29tbWVudHMgY29udGFpbnMgdGhlXG4gICAgICAgICAgICAgICAgICogc2FtZSBpdGVtcyBhcyB0cmFpbGluZ0NvbW1lbnRzLiBSZXNldCB0cmFpbGluZ0NvbW1lbnRzIHRvXG4gICAgICAgICAgICAgICAgICogemVybyBpdGVtcyBhbmQgd2UnbGwgaGFuZGxlIHRoaXMgYnkgZXZhbHVhdGluZyBsZWFkaW5nQ29tbWVudHNcbiAgICAgICAgICAgICAgICAgKiBsYXRlci5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRWF0aW5nIHRoZSBzdGFjay5cbiAgICAgICAgd2hpbGUgKGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoID4gMCAmJiBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgbGFzdENoaWxkID0gZXh0cmEuYm90dG9tUmlnaHRTdGFjay5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0Q2hpbGQpIHtcbiAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNbbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cztcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBsZWFkaW5nIGNvbW1lbnQgZm9yIGFuIGFub255bW91cyBjbGFzcyBoYWQgYmVlbiBzdG9sZW4gYnkgaXRzIGZpcnN0IE1ldGhvZERlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoaXMgdGFrZXMgYmFjayB0aGUgbGVhZGluZyBjb21tZW50LlxuICAgICAgICAgICAgICAgICAgICAvLyBTZWUgQWxzbzogaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc3ByZWUvaXNzdWVzLzE1OFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCAtIDI7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENoaWxkLmxlYWRpbmdDb21tZW50c1tpXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLnNwbGljZSgwLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgaWYgKGV4dHJhLmxlYWRpbmdDb21tZW50c1tleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlL2lzc3Vlcy8yXG5cbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAqIEluIHNwZWNpYWwgY2FzZXMsIHN1Y2ggYXMgcmV0dXJuICh3aXRob3V0IGEgdmFsdWUpIGFuZFxuICAgICAgICAgICAgICAgICAqIGRlYnVnZ2VyLCBhbGwgY29tbWVudHMgd2lsbCBlbmQgdXAgYXMgbGVhZGluZ0NvbW1lbnRzIGFuZFxuICAgICAgICAgICAgICAgICAqIHdpbGwgb3RoZXJ3aXNlIGJlIGVsaW1pbmF0ZWQuIFRoaXMgZXh0cmEgc3RlcCBydW5zIHdoZW4gdGhlXG4gICAgICAgICAgICAgICAgICogYm90dG9tUmlnaHRTdGFjayBpcyBlbXB0eSBhbmQgdGhlcmUgYXJlIGNvbW1lbnRzIGxlZnRcbiAgICAgICAgICAgICAgICAgKiBpbiBsZWFkaW5nQ29tbWVudHMuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBUaGlzIGxvb3AgZmlndXJlcyBvdXQgdGhlIHN0b3BwaW5nIHBvaW50IGJldHdlZW4gdGhlIGFjdHVhbFxuICAgICAgICAgICAgICAgICAqIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNvbW1lbnRzIGJ5IGZpbmRpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZVxuICAgICAgICAgICAgICAgICAqIGZpcnN0IGNvbW1lbnQgdGhhdCBjb21lcyBhZnRlciB0aGUgZ2l2ZW4gbm9kZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHRyYS5sZWFkaW5nQ29tbWVudHNbaV0ucmFuZ2VbMV0gPiBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogU3BsaXQgdGhlIGFycmF5IGJhc2VkIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgY29tbWVudFxuICAgICAgICAgICAgICAgICAqIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIG5vZGUuIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgY291bGRcbiAgICAgICAgICAgICAgICAgKiByZXN1bHQgaW4gYW4gZW1wdHkgYXJyYXksIGFuZCBpZiBzbywgdGhlIGFycmF5IG11c3QgYmVcbiAgICAgICAgICAgICAgICAgKiBkZWxldGVkLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmxlYWRpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5vZGUubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogU2ltaWxhcmx5LCB0cmFpbGluZyBjb21tZW50cyBhcmUgYXR0YWNoZWQgbGF0ZXIuIFRoZSB2YXJpYWJsZVxuICAgICAgICAgICAgICAgICAqIG11c3QgYmUgcmVzZXQgdG8gbnVsbCBpZiB0aGVyZSBhcmUgbm8gdHJhaWxpbmcgY29tbWVudHMuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGV4dHJhLmxlYWRpbmdDb21tZW50cy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrLnB1c2gobm9kZSk7XG4gICAgfVxuXG59O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFRoZSBsaXN0IG9mIGZlYXR1cmUgZmxhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBwYXJzZXIgYW5kIHRoZWlyIGRlZmF1bHRcbiAqICAgICAgc2V0dGluZ3MuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTUgRnJlZCBLLiBTY2hvdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBhcnJvdyBmdW5jdGlvbnNcbiAgICBhcnJvd0Z1bmN0aW9uczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBsZXQgYW5kIGNvbnN0XG4gICAgYmxvY2tCaW5kaW5nczogdHJ1ZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGRlc3RydWN0dXJlZCBhcnJheXMgYW5kIG9iamVjdHNcbiAgICBkZXN0cnVjdHVyaW5nOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIHJlZ2V4IHUgZmxhZ1xuICAgIHJlZ2V4VUZsYWc6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgcmVnZXggeSBmbGFnXG4gICAgcmVnZXhZRmxhZzogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiB0ZW1wbGF0ZSBzdHJpbmdzXG4gICAgdGVtcGxhdGVTdHJpbmdzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIGJpbmFyeSBsaXRlcmFsc1xuICAgIGJpbmFyeUxpdGVyYWxzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIEVTNiBvY3RhbCBsaXRlcmFsc1xuICAgIG9jdGFsTGl0ZXJhbHM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgdW5pY29kZSBjb2RlIHBvaW50IGVzY2FwZSBzZXF1ZW5jZXNcbiAgICB1bmljb2RlQ29kZVBvaW50RXNjYXBlczogdHJ1ZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGRlZmF1bHQgcGFyYW1ldGVyc1xuICAgIGRlZmF1bHRQYXJhbXM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgcmVzdCBwYXJhbWV0ZXJzXG4gICAgcmVzdFBhcmFtczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBmb3Itb2Ygc3RhdGVtZW50c1xuICAgIGZvck9mOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIGNvbXB1dGVkIG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXNcbiAgICBvYmplY3RMaXRlcmFsQ29tcHV0ZWRQcm9wZXJ0aWVzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIHNob3J0aGFuZCBvYmplY3QgbGl0ZXJhbCBtZXRob2RzXG4gICAgb2JqZWN0TGl0ZXJhbFNob3J0aGFuZE1ldGhvZHM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2Ygc2hvcnRoYW5kIG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXNcbiAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kUHJvcGVydGllczogZmFsc2UsXG5cbiAgICAvLyBBbGxvdyBkdXBsaWNhdGUgb2JqZWN0IGxpdGVyYWwgcHJvcGVydGllcyAoZXhjZXB0ICdfX3Byb3RvX18nKVxuICAgIG9iamVjdExpdGVyYWxEdXBsaWNhdGVQcm9wZXJ0aWVzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGdlbmVyYXRvcnMveWllbGRcbiAgICBnZW5lcmF0b3JzOiBmYWxzZSxcblxuICAgIC8vIHN1cHBvcnQgdGhlIHNwcmVhZCBvcGVyYXRvclxuICAgIHNwcmVhZDogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgc3VwZXIgaW4gZnVuY3Rpb25zXG4gICAgc3VwZXJJbkZ1bmN0aW9uczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBjbGFzc2VzXG4gICAgY2xhc3NlczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBuZXcudGFyZ2V0XG4gICAgbmV3VGFyZ2V0OiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIG1vZHVsZXNcbiAgICBtb2R1bGVzOiBmYWxzZSxcblxuICAgIC8vIFJlYWN0IEpTWCBwYXJzaW5nXG4gICAganN4OiBmYWxzZSxcblxuICAgIC8vIGFsbG93IHJldHVybiBzdGF0ZW1lbnQgaW4gZ2xvYmFsIHNjb3BlXG4gICAgZ2xvYmFsUmV0dXJuOiBmYWxzZSxcblxuICAgIC8vIGFsbG93IGV4cGVyaW1lbnRhbCBvYmplY3QgcmVzdC9zcHJlYWRcbiAgICBleHBlcmltZW50YWxPYmplY3RSZXN0U3ByZWFkOiBmYWxzZVxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBFcnJvciBtZXNzYWdlcyByZXR1cm5lZCBieSB0aGUgcGFyc2VyLlxuICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthc1xuICogQGNvcHlyaWdodCAyMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gZXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBWOCB3aGVyZSBwb3NzaWJsZVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVW5leHBlY3RlZFRva2VuOiBcIlVuZXhwZWN0ZWQgdG9rZW4gJTBcIixcbiAgICBVbmV4cGVjdGVkTnVtYmVyOiBcIlVuZXhwZWN0ZWQgbnVtYmVyXCIsXG4gICAgVW5leHBlY3RlZFN0cmluZzogXCJVbmV4cGVjdGVkIHN0cmluZ1wiLFxuICAgIFVuZXhwZWN0ZWRJZGVudGlmaWVyOiBcIlVuZXhwZWN0ZWQgaWRlbnRpZmllclwiLFxuICAgIFVuZXhwZWN0ZWRSZXNlcnZlZDogXCJVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmRcIixcbiAgICBVbmV4cGVjdGVkVGVtcGxhdGU6IFwiVW5leHBlY3RlZCBxdWFzaSAlMFwiLFxuICAgIFVuZXhwZWN0ZWRFT1M6IFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIixcbiAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogXCJJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3dcIixcbiAgICBJbnZhbGlkUmVnRXhwOiBcIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uXCIsXG4gICAgSW52YWxpZFJlZ0V4cEZsYWc6IFwiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ1wiLFxuICAgIFVudGVybWluYXRlZFJlZ0V4cDogXCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvXCIsXG4gICAgSW52YWxpZExIU0luQXNzaWdubWVudDogXCJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnRcIixcbiAgICBJbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdDogXCJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvcm1hbHMgbGlzdFwiLFxuICAgIEludmFsaWRMSFNJbkZvckluOiBcIkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluXCIsXG4gICAgTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiBcIk1vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudFwiLFxuICAgIE5vQ2F0Y2hPckZpbmFsbHk6IFwiTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGFmdGVyIHRyeVwiLFxuICAgIE5vVW5pbnRpYWxpemVkQ29uc3Q6IFwiQ29uc3QgbXVzdCBiZSBpbml0aWFsaXplZFwiLFxuICAgIFVua25vd25MYWJlbDogXCJVbmRlZmluZWQgbGFiZWwgJyUwJ1wiLFxuICAgIFJlZGVjbGFyYXRpb246IFwiJTAgJyUxJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkXCIsXG4gICAgSWxsZWdhbENvbnRpbnVlOiBcIklsbGVnYWwgY29udGludWUgc3RhdGVtZW50XCIsXG4gICAgSWxsZWdhbEJyZWFrOiBcIklsbGVnYWwgYnJlYWsgc3RhdGVtZW50XCIsXG4gICAgSWxsZWdhbFJldHVybjogXCJJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnRcIixcbiAgICBJbGxlZ2FsWWllbGQ6IFwiSWxsZWdhbCB5aWVsZCBleHByZXNzaW9uXCIsXG4gICAgSWxsZWdhbFNwcmVhZDogXCJJbGxlZ2FsIHNwcmVhZCBlbGVtZW50XCIsXG4gICAgU3RyaWN0TW9kZVdpdGg6IFwiU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudFwiLFxuICAgIFN0cmljdENhdGNoVmFyaWFibGU6IFwiQ2F0Y2ggdmFyaWFibGUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFZhck5hbWU6IFwiVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlXCIsXG4gICAgU3RyaWN0UGFyYW1OYW1lOiBcIlBhcmFtZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgU3RyaWN0UGFyYW1EdXBlOiBcIlN0cmljdCBtb2RlIGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzXCIsXG4gICAgVGVtcGxhdGVPY3RhbExpdGVyYWw6IFwiT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHRlbXBsYXRlIHN0cmluZ3MuXCIsXG4gICAgUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyOiBcIlJlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyXCIsXG4gICAgRGVmYXVsdFJlc3RQYXJhbWV0ZXI6IFwiUmVzdCBwYXJhbWV0ZXIgY2FuIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZVwiLFxuICAgIEVsZW1lbnRBZnRlclNwcmVhZEVsZW1lbnQ6IFwiU3ByZWFkIG11c3QgYmUgdGhlIGZpbmFsIGVsZW1lbnQgb2YgYW4gZWxlbWVudCBsaXN0XCIsXG4gICAgT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcjogXCJJbnZhbGlkIHJlc3QgcGFyYW1ldGVyXCIsXG4gICAgT2JqZWN0UGF0dGVybkFzU3ByZWFkOiBcIkludmFsaWQgc3ByZWFkIGFyZ3VtZW50XCIsXG4gICAgU3RyaWN0RnVuY3Rpb25OYW1lOiBcIkZ1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdE9jdGFsTGl0ZXJhbDogXCJPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuXCIsXG4gICAgU3RyaWN0RGVsZXRlOiBcIkRlbGV0ZSBvZiBhbiB1bnF1YWxpZmllZCBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlLlwiLFxuICAgIFN0cmljdER1cGxpY2F0ZVByb3BlcnR5OiBcIkR1cGxpY2F0ZSBkYXRhIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgRHVwbGljYXRlUHJvdG90eXBlUHJvcGVydHk6IFwiRHVwbGljYXRlICdfX3Byb3RvX18nIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIGFyZSBub3QgYWxsb3dlZFwiLFxuICAgIENvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZDogXCJDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yXCIsXG4gICAgRHVwbGljYXRlQ29uc3RydWN0b3I6IFwiQSBjbGFzcyBtYXkgb25seSBoYXZlIG9uZSBjb25zdHJ1Y3RvclwiLFxuICAgIFN0YXRpY1Byb3RvdHlwZTogXCJDbGFzc2VzIG1heSBub3QgaGF2ZSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJvdG90eXBlXCIsXG4gICAgQWNjZXNzb3JEYXRhUHJvcGVydHk6IFwiT2JqZWN0IGxpdGVyYWwgbWF5IG5vdCBoYXZlIGRhdGEgYW5kIGFjY2Vzc29yIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZVwiLFxuICAgIEFjY2Vzc29yR2V0U2V0OiBcIk9iamVjdCBsaXRlcmFsIG1heSBub3QgaGF2ZSBtdWx0aXBsZSBnZXQvc2V0IGFjY2Vzc29ycyB3aXRoIHRoZSBzYW1lIG5hbWVcIixcbiAgICBTdHJpY3RMSFNBc3NpZ25tZW50OiBcIkFzc2lnbm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBTdHJpY3RMSFNQb3N0Zml4OiBcIlBvc3RmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdExIU1ByZWZpeDogXCJQcmVmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFJlc2VydmVkV29yZDogXCJVc2Ugb2YgZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBJbnZhbGlkSlNYQXR0cmlidXRlVmFsdWU6IFwiSlNYIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgYW4gZXhwcmVzc2lvbiBvciBhIHF1b3RlZCBKU1ggdGV4dFwiLFxuICAgIEV4cGVjdGVkSlNYQ2xvc2luZ1RhZzogXCJFeHBlY3RlZCBjb3JyZXNwb25kaW5nIEpTWCBjbG9zaW5nIHRhZyBmb3IgJTBcIixcbiAgICBBZGphY2VudEpTWEVsZW1lbnRzOiBcIkFkamFjZW50IEpTWCBlbGVtZW50cyBtdXN0IGJlIHdyYXBwZWQgaW4gYW4gZW5jbG9zaW5nIHRhZ1wiLFxuICAgIE1pc3NpbmdGcm9tQ2xhdXNlOiBcIk1pc3NpbmcgZnJvbSBjbGF1c2VcIixcbiAgICBOb0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2U6IFwiTWlzc2luZyBhcyBhZnRlciBpbXBvcnQgKlwiLFxuICAgIEludmFsaWRNb2R1bGVTcGVjaWZpZXI6IFwiSW52YWxpZCBtb2R1bGUgc3BlY2lmaWVyXCIsXG4gICAgSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uOiBcIklsbGVnYWwgaW1wb3J0IGRlY2xhcmF0aW9uXCIsXG4gICAgSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uOiBcIklsbGVnYWwgZXhwb3J0IGRlY2xhcmF0aW9uXCJcbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQSBzaW1wbGUgbWFwIHRoYXQgaGVscHMgYXZvaWQgY29sbGlzaW9ucyBvbiB0aGUgT2JqZWN0IHByb3RvdHlwZS5cbiAqIEBhdXRob3IgSmFtdW5kIEZlcmd1c29uXG4gKiBAY29weXJpZ2h0IDIwMTUgSmFtdW5kIEZlcmd1c29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gU3RyaW5nTWFwKCkge1xuICAgIHRoaXMuJGRhdGEgPSB7fTtcbn1cblxuU3RyaW5nTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5ID0gXCIkXCIgKyBrZXk7XG4gICAgcmV0dXJuIHRoaXMuJGRhdGFba2V5XTtcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBrZXkgPSBcIiRcIiArIGtleTtcbiAgICB0aGlzLiRkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSA9IFwiJFwiICsga2V5O1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy4kZGF0YSwga2V5KTtcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSA9IFwiJFwiICsga2V5O1xuICAgIHJldHVybiBkZWxldGUgdGhpcy4kZGF0YVtrZXldO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmdNYXA7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVmFyaW91cyBzeW50YXgvcGF0dGVybiBjaGVja3MgZm9yIHBhcnNpbmcuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqIEBjb3B5cmlnaHQgMjAxMi0yMDEzIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByaXZhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXguanMuXG52YXIgUmVnZXggPSB7XG4gICAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6IG5ldyBSZWdFeHAoXCJbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk3N1xcdTA5NzktXFx1MDk3RlxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGMFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjk3XFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE4MC1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQkMwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdXCIpLFxuICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5ldyBSZWdFeHAoXCJbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDgzLVxcdTA0ODdcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzVcXHUwNUM3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYxMC1cXHUwNjFBXFx1MDYyMC1cXHUwNjY5XFx1MDY2RS1cXHUwNkQzXFx1MDZENS1cXHUwNkRDXFx1MDZERi1cXHUwNkU4XFx1MDZFQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTAtXFx1MDc0QVxcdTA3NEQtXFx1MDdCMVxcdTA3QzAtXFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MkRcXHUwODQwLVxcdTA4NUJcXHUwOEEwXFx1MDhBMi1cXHUwOEFDXFx1MDhFNC1cXHUwOEZFXFx1MDkwMC1cXHUwOTYzXFx1MDk2Ni1cXHUwOTZGXFx1MDk3MS1cXHUwOTc3XFx1MDk3OS1cXHUwOTdGXFx1MDk4MS1cXHUwOTgzXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCQy1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0VcXHUwOUQ3XFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTNcXHUwOUU2LVxcdTA5RjFcXHUwQTAxLVxcdTBBMDNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE2Ni1cXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJDLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQUQwXFx1MEFFMC1cXHUwQUUzXFx1MEFFNi1cXHUwQUVGXFx1MEIwMS1cXHUwQjAzXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0MtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2M1xcdTBCNjYtXFx1MEI2RlxcdTBCNzFcXHUwQjgyXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQwXFx1MEJEN1xcdTBCRTYtXFx1MEJFRlxcdTBDMDEtXFx1MEMwM1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDM0QtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM1OFxcdTBDNTlcXHUwQzYwLVxcdTBDNjNcXHUwQzY2LVxcdTBDNkZcXHUwQzgyXFx1MEM4M1xcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkMtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDRTAtXFx1MENFM1xcdTBDRTYtXFx1MENFRlxcdTBDRjFcXHUwQ0YyXFx1MEQwMlxcdTBEMDNcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNELVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENEVcXHUwRDU3XFx1MEQ2MC1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDZGXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MlxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUI5XFx1MEVCQi1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYyOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkYwXFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUNcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5RDlcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0Y2XFx1MUQwMC1cXHUxREU2XFx1MURGQy1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwMENcXHUyMDBEXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMEQwLVxcdTIwRENcXHUyMEUxXFx1MjBFNS1cXHUyMEYwXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEN0YtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJERTAtXFx1MkRGRlxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMkZcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDk5XFx1MzA5QVxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYyQlxcdUE2NDAtXFx1QTY2RlxcdUE2NzQtXFx1QTY3RFxcdUE2N0YtXFx1QTY5N1xcdUE2OUYtXFx1QTZGMVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTc5M1xcdUE3QTAtXFx1QTdBQVxcdUE3RjgtXFx1QTgyN1xcdUE4NDAtXFx1QTg3M1xcdUE4ODAtXFx1QThDNFxcdUE4RDAtXFx1QThEOVxcdUE4RTAtXFx1QThGN1xcdUE4RkJcXHVBOTAwLVxcdUE5MkRcXHVBOTMwLVxcdUE5NTNcXHVBOTYwLVxcdUE5N0NcXHVBOTgwLVxcdUE5QzBcXHVBOUNGLVxcdUE5RDlcXHVBQTAwLVxcdUFBMzZcXHVBQTQwLVxcdUFBNERcXHVBQTUwLVxcdUFBNTlcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3QlxcdUFBODAtXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFRlxcdUFBRjItXFx1QUFGNlxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCQzAtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1QUJGMC1cXHVBQkY5XFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMjZcXHVGRTMzXFx1RkUzNFxcdUZFNEQtXFx1RkU0RlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMTAtXFx1RkYxOVxcdUZGMjEtXFx1RkYzQVxcdUZGM0ZcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdXCIpLFxuICAgIExlYWRpbmdaZXJvczogbmV3IFJlZ0V4cChcIl4wKyg/ISQpXCIpXG59O1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIFJlZ2V4OiBSZWdleCxcblxuICAgIGlzRGVjaW1hbERpZ2l0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45XG4gICAgfSxcblxuICAgIGlzSGV4RGlnaXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiBcIjAxMjM0NTY3ODlhYmNkZWZBQkNERUZcIi5pbmRleE9mKGNoKSA+PSAwO1xuICAgIH0sXG5cbiAgICBpc09jdGFsRGlnaXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiBcIjAxMjM0NTY3XCIuaW5kZXhPZihjaCkgPj0gMDtcbiAgICB9LFxuXG4gICAgLy8gNy4yIFdoaXRlIFNwYWNlXG5cbiAgICBpc1doaXRlU3BhY2U6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MjApIHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9PT0gMHhBMCkgfHxcbiAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgxODBFLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwgMHhGRUZGXS5pbmRleE9mKGNoKSA+PSAwKTtcbiAgICB9LFxuXG4gICAgLy8gNy4zIExpbmUgVGVybWluYXRvcnNcblxuICAgIGlzTGluZVRlcm1pbmF0b3I6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MEEpIHx8IChjaCA9PT0gMHgwRCkgfHwgKGNoID09PSAweDIwMjgpIHx8IChjaCA9PT0gMHgyMDI5KTtcbiAgICB9LFxuXG4gICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzXG5cbiAgICBpc0lkZW50aWZpZXJTdGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFxcIChiYWNrc2xhc2gpXG4gICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTtcbiAgICB9LFxuXG4gICAgaXNJZGVudGlmaWVyUGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB8fCAgICAgICAgIC8vIDAuLjlcbiAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfSxcblxuICAgIC8vIDcuNi4xLjIgRnV0dXJlIFJlc2VydmVkIFdvcmRzXG5cbiAgICBpc0Z1dHVyZVJlc2VydmVkV29yZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgY2FzZSBcImV4cG9ydFwiOlxuICAgICAgICAgICAgY2FzZSBcImV4dGVuZHNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbXBvcnRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzdXBlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkOiBmdW5jdGlvbihpZCwgZWNtYUZlYXR1cmVzKSB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbXBsZW1lbnRzXCI6XG4gICAgICAgICAgICBjYXNlIFwiaW50ZXJmYWNlXCI6XG4gICAgICAgICAgICBjYXNlIFwicGFja2FnZVwiOlxuICAgICAgICAgICAgY2FzZSBcInByaXZhdGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwcm90ZWN0ZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwdWJsaWNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzdGF0aWNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ5aWVsZFwiOlxuICAgICAgICAgICAgY2FzZSBcImxldFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgY2FzZSBcImF3YWl0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVjbWFGZWF0dXJlcy5tb2R1bGVzO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNSZXN0cmljdGVkV29yZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkID09PSBcImV2YWxcIiB8fCBpZCA9PT0gXCJhcmd1bWVudHNcIjtcbiAgICB9LFxuXG4gICAgLy8gNy42LjEuMSBLZXl3b3Jkc1xuXG4gICAgaXNLZXl3b3JkOiBmdW5jdGlvbihpZCwgc3RyaWN0LCBlY21hRmVhdHVyZXMpIHtcblxuICAgICAgICBpZiAoc3RyaWN0ICYmIHRoaXMuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkLCBlY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFwiY29uc3RcIiBpcyBzcGVjaWFsaXplZCBhcyBLZXl3b3JkIGluIFY4LlxuICAgICAgICAvLyBcInlpZWxkXCIgYW5kIFwibGV0XCIgYXJlIGZvciBjb21wYXRpYmxpdHkgd2l0aCBTcGlkZXJNb25rZXkgYW5kIEVTLm5leHQuXG4gICAgICAgIC8vIFNvbWUgb3RoZXJzIGFyZSBmcm9tIGZ1dHVyZSByZXNlcnZlZCB3b3Jkcy5cblxuICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiaWZcIikgfHwgKGlkID09PSBcImluXCIpIHx8IChpZCA9PT0gXCJkb1wiKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcInZhclwiKSB8fCAoaWQgPT09IFwiZm9yXCIpIHx8IChpZCA9PT0gXCJuZXdcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcInRyeVwiKSB8fCAoaWQgPT09IFwibGV0XCIpO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwidGhpc1wiKSB8fCAoaWQgPT09IFwiZWxzZVwiKSB8fCAoaWQgPT09IFwiY2FzZVwiKSB8fFxuICAgICAgICAgICAgICAgICAgICAoaWQgPT09IFwidm9pZFwiKSB8fCAoaWQgPT09IFwid2l0aFwiKSB8fCAoaWQgPT09IFwiZW51bVwiKTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcIndoaWxlXCIpIHx8IChpZCA9PT0gXCJicmVha1wiKSB8fCAoaWQgPT09IFwiY2F0Y2hcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcInRocm93XCIpIHx8IChpZCA9PT0gXCJjb25zdFwiKSB8fCAoIWVjbWFGZWF0dXJlcy5nZW5lcmF0b3JzICYmIGlkID09PSBcInlpZWxkXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpZCA9PT0gXCJjbGFzc1wiKSB8fCAoaWQgPT09IFwic3VwZXJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJyZXR1cm5cIikgfHwgKGlkID09PSBcInR5cGVvZlwiKSB8fCAoaWQgPT09IFwiZGVsZXRlXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpZCA9PT0gXCJzd2l0Y2hcIikgfHwgKGlkID09PSBcImV4cG9ydFwiKSB8fCAoaWQgPT09IFwiaW1wb3J0XCIpO1xuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiZGVmYXVsdFwiKSB8fCAoaWQgPT09IFwiZmluYWxseVwiKSB8fCAoaWQgPT09IFwiZXh0ZW5kc1wiKTtcbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcImZ1bmN0aW9uXCIpIHx8IChpZCA9PT0gXCJjb250aW51ZVwiKSB8fCAoaWQgPT09IFwiZGVidWdnZXJcIik7XG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiaW5zdGFuY2VvZlwiKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGlzSlNYSWRlbnRpZmllclN0YXJ0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICAvLyBleGNsdWRlIGJhY2tzbGFzaCAoXFwpXG4gICAgICAgIHJldHVybiAoY2ggIT09IDkyKSAmJiB0aGlzLmlzSWRlbnRpZmllclN0YXJ0KGNoKTtcbiAgICB9LFxuXG4gICAgaXNKU1hJZGVudGlmaWVyUGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgLy8gZXhjbHVkZSBiYWNrc2xhc2ggKFxcKSBhbmQgYWRkIGh5cGhlbiAoLSlcbiAgICAgICAgcmV0dXJuIChjaCAhPT0gOTIpICYmIChjaCA9PT0gNDUgfHwgdGhpcy5pc0lkZW50aWZpZXJQYXJ0KGNoKSk7XG4gICAgfVxuXG5cbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQ29udGFpbnMgdG9rZW4gaW5mb3JtYXRpb24uXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTMgVGhhZGRlZSBUeWwgPHRoYWRkZWUudHlsQGdtYWlsLmNvbT5cbiAqIEBjb3B5cmlnaHQgMjAxMS0yMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vbmUhXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcml2YXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgVG9rZW4gPSB7XG4gICAgQm9vbGVhbkxpdGVyYWw6IDEsXG4gICAgRU9GOiAyLFxuICAgIElkZW50aWZpZXI6IDMsXG4gICAgS2V5d29yZDogNCxcbiAgICBOdWxsTGl0ZXJhbDogNSxcbiAgICBOdW1lcmljTGl0ZXJhbDogNixcbiAgICBQdW5jdHVhdG9yOiA3LFxuICAgIFN0cmluZ0xpdGVyYWw6IDgsXG4gICAgUmVndWxhckV4cHJlc3Npb246IDksXG4gICAgVGVtcGxhdGU6IDEwLFxuICAgIEpTWElkZW50aWZpZXI6IDExLFxuICAgIEpTWFRleHQ6IDEyXG59O1xuXG52YXIgVG9rZW5OYW1lID0ge307XG5Ub2tlbk5hbWVbVG9rZW4uQm9vbGVhbkxpdGVyYWxdID0gXCJCb29sZWFuXCI7XG5Ub2tlbk5hbWVbVG9rZW4uRU9GXSA9IFwiPGVuZD5cIjtcblRva2VuTmFtZVtUb2tlbi5JZGVudGlmaWVyXSA9IFwiSWRlbnRpZmllclwiO1xuVG9rZW5OYW1lW1Rva2VuLktleXdvcmRdID0gXCJLZXl3b3JkXCI7XG5Ub2tlbk5hbWVbVG9rZW4uTnVsbExpdGVyYWxdID0gXCJOdWxsXCI7XG5Ub2tlbk5hbWVbVG9rZW4uTnVtZXJpY0xpdGVyYWxdID0gXCJOdW1lcmljXCI7XG5Ub2tlbk5hbWVbVG9rZW4uUHVuY3R1YXRvcl0gPSBcIlB1bmN0dWF0b3JcIjtcblRva2VuTmFtZVtUb2tlbi5TdHJpbmdMaXRlcmFsXSA9IFwiU3RyaW5nXCI7XG5Ub2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJlc3Npb25dID0gXCJSZWd1bGFyRXhwcmVzc2lvblwiO1xuVG9rZW5OYW1lW1Rva2VuLlRlbXBsYXRlXSA9IFwiVGVtcGxhdGVcIjtcblRva2VuTmFtZVtUb2tlbi5KU1hJZGVudGlmaWVyXSA9IFwiSlNYSWRlbnRpZmllclwiO1xuVG9rZW5OYW1lW1Rva2VuLkpTWFRleHRdID0gXCJKU1hUZXh0XCI7XG5cbi8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9zZSB0b2tlbnMgaXMgYW4gZXhwcmVzc2lvbi5cbnZhciBGbkV4cHJUb2tlbnMgPSBbXCIoXCIsIFwie1wiLCBcIltcIiwgXCJpblwiLCBcInR5cGVvZlwiLCBcImluc3RhbmNlb2ZcIiwgXCJuZXdcIixcbiAgICAgICAgICAgICAgICBcInJldHVyblwiLCBcImNhc2VcIiwgXCJkZWxldGVcIiwgXCJ0aHJvd1wiLCBcInZvaWRcIixcbiAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50IG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgIFwiPVwiLCBcIis9XCIsIFwiLT1cIiwgXCIqPVwiLCBcIi89XCIsIFwiJT1cIiwgXCI8PD1cIiwgXCI+Pj1cIiwgXCI+Pj49XCIsXG4gICAgICAgICAgICAgICAgXCImPVwiLCBcInw9XCIsIFwiXj1cIiwgXCIsXCIsXG4gICAgICAgICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgIFwiK1wiLCBcIi1cIiwgXCIqXCIsIFwiL1wiLCBcIiVcIiwgXCIrK1wiLCBcIi0tXCIsIFwiPDxcIiwgXCI+PlwiLCBcIj4+PlwiLCBcIiZcIixcbiAgICAgICAgICAgICAgICBcInxcIiwgXCJeXCIsIFwiIVwiLCBcIn5cIiwgXCImJlwiLCBcInx8XCIsIFwiP1wiLCBcIjpcIiwgXCI9PT1cIiwgXCI9PVwiLCBcIj49XCIsXG4gICAgICAgICAgICAgICAgXCI8PVwiLCBcIjxcIiwgXCI+XCIsIFwiIT1cIiwgXCIhPT1cIl07XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVG9rZW46IFRva2VuLFxuICAgIFRva2VuTmFtZTogVG9rZW5OYW1lLFxuICAgIEZuRXhwclRva2VuczogRm5FeHByVG9rZW5zXG59O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFRoZSBsaXN0IG9mIFhIVE1MIGVudGl0aWVzIHRoYXQgYXJlIHZhbGlkIGluIEpTWC5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb25lIVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBxdW90OiBcIlxcdTAwMjJcIixcbiAgICBhbXA6IFwiJlwiLFxuICAgIGFwb3M6IFwiXFx1MDAyN1wiLFxuICAgIGx0OiBcIjxcIixcbiAgICBndDogXCI+XCIsXG4gICAgbmJzcDogXCJcXHUwMEEwXCIsXG4gICAgaWV4Y2w6IFwiXFx1MDBBMVwiLFxuICAgIGNlbnQ6IFwiXFx1MDBBMlwiLFxuICAgIHBvdW5kOiBcIlxcdTAwQTNcIixcbiAgICBjdXJyZW46IFwiXFx1MDBBNFwiLFxuICAgIHllbjogXCJcXHUwMEE1XCIsXG4gICAgYnJ2YmFyOiBcIlxcdTAwQTZcIixcbiAgICBzZWN0OiBcIlxcdTAwQTdcIixcbiAgICB1bWw6IFwiXFx1MDBBOFwiLFxuICAgIGNvcHk6IFwiXFx1MDBBOVwiLFxuICAgIG9yZGY6IFwiXFx1MDBBQVwiLFxuICAgIGxhcXVvOiBcIlxcdTAwQUJcIixcbiAgICBub3Q6IFwiXFx1MDBBQ1wiLFxuICAgIHNoeTogXCJcXHUwMEFEXCIsXG4gICAgcmVnOiBcIlxcdTAwQUVcIixcbiAgICBtYWNyOiBcIlxcdTAwQUZcIixcbiAgICBkZWc6IFwiXFx1MDBCMFwiLFxuICAgIHBsdXNtbjogXCJcXHUwMEIxXCIsXG4gICAgc3VwMjogXCJcXHUwMEIyXCIsXG4gICAgc3VwMzogXCJcXHUwMEIzXCIsXG4gICAgYWN1dGU6IFwiXFx1MDBCNFwiLFxuICAgIG1pY3JvOiBcIlxcdTAwQjVcIixcbiAgICBwYXJhOiBcIlxcdTAwQjZcIixcbiAgICBtaWRkb3Q6IFwiXFx1MDBCN1wiLFxuICAgIGNlZGlsOiBcIlxcdTAwQjhcIixcbiAgICBzdXAxOiBcIlxcdTAwQjlcIixcbiAgICBvcmRtOiBcIlxcdTAwQkFcIixcbiAgICByYXF1bzogXCJcXHUwMEJCXCIsXG4gICAgZnJhYzE0OiBcIlxcdTAwQkNcIixcbiAgICBmcmFjMTI6IFwiXFx1MDBCRFwiLFxuICAgIGZyYWMzNDogXCJcXHUwMEJFXCIsXG4gICAgaXF1ZXN0OiBcIlxcdTAwQkZcIixcbiAgICBBZ3JhdmU6IFwiXFx1MDBDMFwiLFxuICAgIEFhY3V0ZTogXCJcXHUwMEMxXCIsXG4gICAgQWNpcmM6IFwiXFx1MDBDMlwiLFxuICAgIEF0aWxkZTogXCJcXHUwMEMzXCIsXG4gICAgQXVtbDogXCJcXHUwMEM0XCIsXG4gICAgQXJpbmc6IFwiXFx1MDBDNVwiLFxuICAgIEFFbGlnOiBcIlxcdTAwQzZcIixcbiAgICBDY2VkaWw6IFwiXFx1MDBDN1wiLFxuICAgIEVncmF2ZTogXCJcXHUwMEM4XCIsXG4gICAgRWFjdXRlOiBcIlxcdTAwQzlcIixcbiAgICBFY2lyYzogXCJcXHUwMENBXCIsXG4gICAgRXVtbDogXCJcXHUwMENCXCIsXG4gICAgSWdyYXZlOiBcIlxcdTAwQ0NcIixcbiAgICBJYWN1dGU6IFwiXFx1MDBDRFwiLFxuICAgIEljaXJjOiBcIlxcdTAwQ0VcIixcbiAgICBJdW1sOiBcIlxcdTAwQ0ZcIixcbiAgICBFVEg6IFwiXFx1MDBEMFwiLFxuICAgIE50aWxkZTogXCJcXHUwMEQxXCIsXG4gICAgT2dyYXZlOiBcIlxcdTAwRDJcIixcbiAgICBPYWN1dGU6IFwiXFx1MDBEM1wiLFxuICAgIE9jaXJjOiBcIlxcdTAwRDRcIixcbiAgICBPdGlsZGU6IFwiXFx1MDBENVwiLFxuICAgIE91bWw6IFwiXFx1MDBENlwiLFxuICAgIHRpbWVzOiBcIlxcdTAwRDdcIixcbiAgICBPc2xhc2g6IFwiXFx1MDBEOFwiLFxuICAgIFVncmF2ZTogXCJcXHUwMEQ5XCIsXG4gICAgVWFjdXRlOiBcIlxcdTAwREFcIixcbiAgICBVY2lyYzogXCJcXHUwMERCXCIsXG4gICAgVXVtbDogXCJcXHUwMERDXCIsXG4gICAgWWFjdXRlOiBcIlxcdTAwRERcIixcbiAgICBUSE9STjogXCJcXHUwMERFXCIsXG4gICAgc3psaWc6IFwiXFx1MDBERlwiLFxuICAgIGFncmF2ZTogXCJcXHUwMEUwXCIsXG4gICAgYWFjdXRlOiBcIlxcdTAwRTFcIixcbiAgICBhY2lyYzogXCJcXHUwMEUyXCIsXG4gICAgYXRpbGRlOiBcIlxcdTAwRTNcIixcbiAgICBhdW1sOiBcIlxcdTAwRTRcIixcbiAgICBhcmluZzogXCJcXHUwMEU1XCIsXG4gICAgYWVsaWc6IFwiXFx1MDBFNlwiLFxuICAgIGNjZWRpbDogXCJcXHUwMEU3XCIsXG4gICAgZWdyYXZlOiBcIlxcdTAwRThcIixcbiAgICBlYWN1dGU6IFwiXFx1MDBFOVwiLFxuICAgIGVjaXJjOiBcIlxcdTAwRUFcIixcbiAgICBldW1sOiBcIlxcdTAwRUJcIixcbiAgICBpZ3JhdmU6IFwiXFx1MDBFQ1wiLFxuICAgIGlhY3V0ZTogXCJcXHUwMEVEXCIsXG4gICAgaWNpcmM6IFwiXFx1MDBFRVwiLFxuICAgIGl1bWw6IFwiXFx1MDBFRlwiLFxuICAgIGV0aDogXCJcXHUwMEYwXCIsXG4gICAgbnRpbGRlOiBcIlxcdTAwRjFcIixcbiAgICBvZ3JhdmU6IFwiXFx1MDBGMlwiLFxuICAgIG9hY3V0ZTogXCJcXHUwMEYzXCIsXG4gICAgb2NpcmM6IFwiXFx1MDBGNFwiLFxuICAgIG90aWxkZTogXCJcXHUwMEY1XCIsXG4gICAgb3VtbDogXCJcXHUwMEY2XCIsXG4gICAgZGl2aWRlOiBcIlxcdTAwRjdcIixcbiAgICBvc2xhc2g6IFwiXFx1MDBGOFwiLFxuICAgIHVncmF2ZTogXCJcXHUwMEY5XCIsXG4gICAgdWFjdXRlOiBcIlxcdTAwRkFcIixcbiAgICB1Y2lyYzogXCJcXHUwMEZCXCIsXG4gICAgdXVtbDogXCJcXHUwMEZDXCIsXG4gICAgeWFjdXRlOiBcIlxcdTAwRkRcIixcbiAgICB0aG9ybjogXCJcXHUwMEZFXCIsXG4gICAgeXVtbDogXCJcXHUwMEZGXCIsXG4gICAgT0VsaWc6IFwiXFx1MDE1MlwiLFxuICAgIG9lbGlnOiBcIlxcdTAxNTNcIixcbiAgICBTY2Fyb246IFwiXFx1MDE2MFwiLFxuICAgIHNjYXJvbjogXCJcXHUwMTYxXCIsXG4gICAgWXVtbDogXCJcXHUwMTc4XCIsXG4gICAgZm5vZjogXCJcXHUwMTkyXCIsXG4gICAgY2lyYzogXCJcXHUwMkM2XCIsXG4gICAgdGlsZGU6IFwiXFx1MDJEQ1wiLFxuICAgIEFscGhhOiBcIlxcdTAzOTFcIixcbiAgICBCZXRhOiBcIlxcdTAzOTJcIixcbiAgICBHYW1tYTogXCJcXHUwMzkzXCIsXG4gICAgRGVsdGE6IFwiXFx1MDM5NFwiLFxuICAgIEVwc2lsb246IFwiXFx1MDM5NVwiLFxuICAgIFpldGE6IFwiXFx1MDM5NlwiLFxuICAgIEV0YTogXCJcXHUwMzk3XCIsXG4gICAgVGhldGE6IFwiXFx1MDM5OFwiLFxuICAgIElvdGE6IFwiXFx1MDM5OVwiLFxuICAgIEthcHBhOiBcIlxcdTAzOUFcIixcbiAgICBMYW1iZGE6IFwiXFx1MDM5QlwiLFxuICAgIE11OiBcIlxcdTAzOUNcIixcbiAgICBOdTogXCJcXHUwMzlEXCIsXG4gICAgWGk6IFwiXFx1MDM5RVwiLFxuICAgIE9taWNyb246IFwiXFx1MDM5RlwiLFxuICAgIFBpOiBcIlxcdTAzQTBcIixcbiAgICBSaG86IFwiXFx1MDNBMVwiLFxuICAgIFNpZ21hOiBcIlxcdTAzQTNcIixcbiAgICBUYXU6IFwiXFx1MDNBNFwiLFxuICAgIFVwc2lsb246IFwiXFx1MDNBNVwiLFxuICAgIFBoaTogXCJcXHUwM0E2XCIsXG4gICAgQ2hpOiBcIlxcdTAzQTdcIixcbiAgICBQc2k6IFwiXFx1MDNBOFwiLFxuICAgIE9tZWdhOiBcIlxcdTAzQTlcIixcbiAgICBhbHBoYTogXCJcXHUwM0IxXCIsXG4gICAgYmV0YTogXCJcXHUwM0IyXCIsXG4gICAgZ2FtbWE6IFwiXFx1MDNCM1wiLFxuICAgIGRlbHRhOiBcIlxcdTAzQjRcIixcbiAgICBlcHNpbG9uOiBcIlxcdTAzQjVcIixcbiAgICB6ZXRhOiBcIlxcdTAzQjZcIixcbiAgICBldGE6IFwiXFx1MDNCN1wiLFxuICAgIHRoZXRhOiBcIlxcdTAzQjhcIixcbiAgICBpb3RhOiBcIlxcdTAzQjlcIixcbiAgICBrYXBwYTogXCJcXHUwM0JBXCIsXG4gICAgbGFtYmRhOiBcIlxcdTAzQkJcIixcbiAgICBtdTogXCJcXHUwM0JDXCIsXG4gICAgbnU6IFwiXFx1MDNCRFwiLFxuICAgIHhpOiBcIlxcdTAzQkVcIixcbiAgICBvbWljcm9uOiBcIlxcdTAzQkZcIixcbiAgICBwaTogXCJcXHUwM0MwXCIsXG4gICAgcmhvOiBcIlxcdTAzQzFcIixcbiAgICBzaWdtYWY6IFwiXFx1MDNDMlwiLFxuICAgIHNpZ21hOiBcIlxcdTAzQzNcIixcbiAgICB0YXU6IFwiXFx1MDNDNFwiLFxuICAgIHVwc2lsb246IFwiXFx1MDNDNVwiLFxuICAgIHBoaTogXCJcXHUwM0M2XCIsXG4gICAgY2hpOiBcIlxcdTAzQzdcIixcbiAgICBwc2k6IFwiXFx1MDNDOFwiLFxuICAgIG9tZWdhOiBcIlxcdTAzQzlcIixcbiAgICB0aGV0YXN5bTogXCJcXHUwM0QxXCIsXG4gICAgdXBzaWg6IFwiXFx1MDNEMlwiLFxuICAgIHBpdjogXCJcXHUwM0Q2XCIsXG4gICAgZW5zcDogXCJcXHUyMDAyXCIsXG4gICAgZW1zcDogXCJcXHUyMDAzXCIsXG4gICAgdGhpbnNwOiBcIlxcdTIwMDlcIixcbiAgICB6d25qOiBcIlxcdTIwMENcIixcbiAgICB6d2o6IFwiXFx1MjAwRFwiLFxuICAgIGxybTogXCJcXHUyMDBFXCIsXG4gICAgcmxtOiBcIlxcdTIwMEZcIixcbiAgICBuZGFzaDogXCJcXHUyMDEzXCIsXG4gICAgbWRhc2g6IFwiXFx1MjAxNFwiLFxuICAgIGxzcXVvOiBcIlxcdTIwMThcIixcbiAgICByc3F1bzogXCJcXHUyMDE5XCIsXG4gICAgc2JxdW86IFwiXFx1MjAxQVwiLFxuICAgIGxkcXVvOiBcIlxcdTIwMUNcIixcbiAgICByZHF1bzogXCJcXHUyMDFEXCIsXG4gICAgYmRxdW86IFwiXFx1MjAxRVwiLFxuICAgIGRhZ2dlcjogXCJcXHUyMDIwXCIsXG4gICAgRGFnZ2VyOiBcIlxcdTIwMjFcIixcbiAgICBidWxsOiBcIlxcdTIwMjJcIixcbiAgICBoZWxsaXA6IFwiXFx1MjAyNlwiLFxuICAgIHBlcm1pbDogXCJcXHUyMDMwXCIsXG4gICAgcHJpbWU6IFwiXFx1MjAzMlwiLFxuICAgIFByaW1lOiBcIlxcdTIwMzNcIixcbiAgICBsc2FxdW86IFwiXFx1MjAzOVwiLFxuICAgIHJzYXF1bzogXCJcXHUyMDNBXCIsXG4gICAgb2xpbmU6IFwiXFx1MjAzRVwiLFxuICAgIGZyYXNsOiBcIlxcdTIwNDRcIixcbiAgICBldXJvOiBcIlxcdTIwQUNcIixcbiAgICBpbWFnZTogXCJcXHUyMTExXCIsXG4gICAgd2VpZXJwOiBcIlxcdTIxMThcIixcbiAgICByZWFsOiBcIlxcdTIxMUNcIixcbiAgICB0cmFkZTogXCJcXHUyMTIyXCIsXG4gICAgYWxlZnN5bTogXCJcXHUyMTM1XCIsXG4gICAgbGFycjogXCJcXHUyMTkwXCIsXG4gICAgdWFycjogXCJcXHUyMTkxXCIsXG4gICAgcmFycjogXCJcXHUyMTkyXCIsXG4gICAgZGFycjogXCJcXHUyMTkzXCIsXG4gICAgaGFycjogXCJcXHUyMTk0XCIsXG4gICAgY3JhcnI6IFwiXFx1MjFCNVwiLFxuICAgIGxBcnI6IFwiXFx1MjFEMFwiLFxuICAgIHVBcnI6IFwiXFx1MjFEMVwiLFxuICAgIHJBcnI6IFwiXFx1MjFEMlwiLFxuICAgIGRBcnI6IFwiXFx1MjFEM1wiLFxuICAgIGhBcnI6IFwiXFx1MjFENFwiLFxuICAgIGZvcmFsbDogXCJcXHUyMjAwXCIsXG4gICAgcGFydDogXCJcXHUyMjAyXCIsXG4gICAgZXhpc3Q6IFwiXFx1MjIwM1wiLFxuICAgIGVtcHR5OiBcIlxcdTIyMDVcIixcbiAgICBuYWJsYTogXCJcXHUyMjA3XCIsXG4gICAgaXNpbjogXCJcXHUyMjA4XCIsXG4gICAgbm90aW46IFwiXFx1MjIwOVwiLFxuICAgIG5pOiBcIlxcdTIyMEJcIixcbiAgICBwcm9kOiBcIlxcdTIyMEZcIixcbiAgICBzdW06IFwiXFx1MjIxMVwiLFxuICAgIG1pbnVzOiBcIlxcdTIyMTJcIixcbiAgICBsb3dhc3Q6IFwiXFx1MjIxN1wiLFxuICAgIHJhZGljOiBcIlxcdTIyMUFcIixcbiAgICBwcm9wOiBcIlxcdTIyMURcIixcbiAgICBpbmZpbjogXCJcXHUyMjFFXCIsXG4gICAgYW5nOiBcIlxcdTIyMjBcIixcbiAgICBhbmQ6IFwiXFx1MjIyN1wiLFxuICAgIG9yOiBcIlxcdTIyMjhcIixcbiAgICBjYXA6IFwiXFx1MjIyOVwiLFxuICAgIGN1cDogXCJcXHUyMjJBXCIsXG4gICAgXCJpbnRcIjogXCJcXHUyMjJCXCIsXG4gICAgdGhlcmU0OiBcIlxcdTIyMzRcIixcbiAgICBzaW06IFwiXFx1MjIzQ1wiLFxuICAgIGNvbmc6IFwiXFx1MjI0NVwiLFxuICAgIGFzeW1wOiBcIlxcdTIyNDhcIixcbiAgICBuZTogXCJcXHUyMjYwXCIsXG4gICAgZXF1aXY6IFwiXFx1MjI2MVwiLFxuICAgIGxlOiBcIlxcdTIyNjRcIixcbiAgICBnZTogXCJcXHUyMjY1XCIsXG4gICAgc3ViOiBcIlxcdTIyODJcIixcbiAgICBzdXA6IFwiXFx1MjI4M1wiLFxuICAgIG5zdWI6IFwiXFx1MjI4NFwiLFxuICAgIHN1YmU6IFwiXFx1MjI4NlwiLFxuICAgIHN1cGU6IFwiXFx1MjI4N1wiLFxuICAgIG9wbHVzOiBcIlxcdTIyOTVcIixcbiAgICBvdGltZXM6IFwiXFx1MjI5N1wiLFxuICAgIHBlcnA6IFwiXFx1MjJBNVwiLFxuICAgIHNkb3Q6IFwiXFx1MjJDNVwiLFxuICAgIGxjZWlsOiBcIlxcdTIzMDhcIixcbiAgICByY2VpbDogXCJcXHUyMzA5XCIsXG4gICAgbGZsb29yOiBcIlxcdTIzMEFcIixcbiAgICByZmxvb3I6IFwiXFx1MjMwQlwiLFxuICAgIGxhbmc6IFwiXFx1MjMyOVwiLFxuICAgIHJhbmc6IFwiXFx1MjMyQVwiLFxuICAgIGxvejogXCJcXHUyNUNBXCIsXG4gICAgc3BhZGVzOiBcIlxcdTI2NjBcIixcbiAgICBjbHViczogXCJcXHUyNjYzXCIsXG4gICAgaGVhcnRzOiBcIlxcdTI2NjVcIixcbiAgICBkaWFtczogXCJcXHUyNjY2XCJcbn07XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwibmFtZVwiOiBcImVzcHJlZVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiQW4gYWN0aXZlbHktbWFpbnRhaW5lZCBmb3JrIG9mIEVzcHJpbWEsIHRoZSBFQ01BU2NyaXB0IHBhcnNpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIG11bHRpcHVycG9zZSBhbmFseXNpc1wiLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiTmljaG9sYXMgQy4gWmFrYXNcIixcbiAgICBcImVtYWlsXCI6IFwibmljaG9sYXMrbnBtQG5jemNvbnN1bHRpbmcuY29tXCJcbiAgfSxcbiAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlXCIsXG4gIFwibWFpblwiOiBcImVzcHJlZS5qc1wiLFxuICBcImJpblwiOiB7XG4gICAgXCJlc3BhcnNlXCI6IFwiLi9iaW4vZXNwYXJzZS5qc1wiLFxuICAgIFwiZXN2YWxpZGF0ZVwiOiBcIi4vYmluL2VzdmFsaWRhdGUuanNcIlxuICB9LFxuICBcInZlcnNpb25cIjogXCIyLjIuNVwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpblwiLFxuICAgIFwibGliXCIsXG4gICAgXCJ0ZXN0L3J1bi5qc1wiLFxuICAgIFwidGVzdC9ydW5uZXIuanNcIixcbiAgICBcInRlc3QvdGVzdC5qc1wiLFxuICAgIFwidGVzdC9jb21wYXQuanNcIixcbiAgICBcInRlc3QvcmVmbGVjdC5qc1wiLFxuICAgIFwiZXNwcmVlLmpzXCJcbiAgXSxcbiAgXCJlbmdpbmVzXCI6IHtcbiAgICBcIm5vZGVcIjogXCI+PTAuMTAuMFwiXG4gIH0sXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vZXNsaW50L2VzcHJlZS5naXRcIlxuICB9LFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXNsaW50L2VzcHJlZS5naXRcIlxuICB9LFxuICBcImxpY2Vuc2VzXCI6IFtcbiAgICB7XG4gICAgICBcInR5cGVcIjogXCJCU0RcIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vbnpha2FzL2VzcHJlZS9yYXcvbWFzdGVyL0xJQ0VOU0VcIlxuICAgIH1cbiAgXSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl43LjAuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4xLjEwLjBcIixcbiAgICBcImNvbXBsZXhpdHktcmVwb3J0XCI6IFwifjAuNi4xXCIsXG4gICAgXCJkYXRlZm9ybWF0XCI6IFwiXjEuMC4xMVwiLFxuICAgIFwiZXNsaW50XCI6IFwiXjAuOS4yXCIsXG4gICAgXCJlc3ByaW1hXCI6IFwiZ2l0Oi8vZ2l0aHViLmNvbS9qcXVlcnkvZXNwcmltYS5naXRcIixcbiAgICBcImVzcHJpbWEtZmJcIjogXCJeODAwMS4yMDAxLjAtZGV2LWhhcm1vbnktZmJcIixcbiAgICBcImlzdGFuYnVsXCI6IFwifjAuMi42XCIsXG4gICAgXCJqc29uLWRpZmZcIjogXCJ+MC4zLjFcIixcbiAgICBcImxlY2hlXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjAuMVwiLFxuICAgIFwibnBtLWxpY2Vuc2VcIjogXCJeMC4yLjNcIixcbiAgICBcIm9wdGltaXN0XCI6IFwifjAuNi4wXCIsXG4gICAgXCJyZWdlbmVyYXRlXCI6IFwifjAuNS40XCIsXG4gICAgXCJzZW12ZXJcIjogXCJeNC4xLjFcIixcbiAgICBcInNoZWxsanNcIjogXCJeMC4zLjBcIixcbiAgICBcInNoZWxsanMtbm9kZWNsaVwiOiBcIl4wLjEuMVwiLFxuICAgIFwidW5pY29kZS02LjMuMFwiOiBcIn4wLjEuMFwiXG4gIH0sXG4gIFwia2V5d29yZHNcIjogW1xuICAgIFwiYXN0XCIsXG4gICAgXCJlY21hc2NyaXB0XCIsXG4gICAgXCJqYXZhc2NyaXB0XCIsXG4gICAgXCJwYXJzZXJcIixcbiAgICBcInN5bnRheFwiXG4gIF0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJnZW5lcmF0ZS1yZWdleFwiOiBcIm5vZGUgdG9vbHMvZ2VuZXJhdGUtaWRlbnRpZmllci1yZWdleC5qc1wiLFxuICAgIFwidGVzdFwiOiBcIm5wbSBydW4tc2NyaXB0IGxpbnQgJiYgbm9kZSBNYWtlZmlsZS5qcyB0ZXN0ICYmIG5vZGUgdGVzdC9ydW4uanNcIixcbiAgICBcImxpbnRcIjogXCJub2RlIE1ha2VmaWxlLmpzIGxpbnRcIixcbiAgICBcInBhdGNoXCI6IFwibm9kZSBNYWtlZmlsZS5qcyBwYXRjaFwiLFxuICAgIFwibWlub3JcIjogXCJub2RlIE1ha2VmaWxlLmpzIG1pbm9yXCIsXG4gICAgXCJtYWpvclwiOiBcIm5vZGUgTWFrZWZpbGUuanMgbWFqb3JcIixcbiAgICBcImJyb3dzZXJpZnlcIjogXCJub2RlIE1ha2VmaWxlLmpzIGJyb3dzZXJpZnlcIixcbiAgICBcImNvdmVyYWdlXCI6IFwibnBtIHJ1bi1zY3JpcHQgYW5hbHl6ZS1jb3ZlcmFnZSAmJiBucG0gcnVuLXNjcmlwdCBjaGVjay1jb3ZlcmFnZVwiLFxuICAgIFwiYW5hbHl6ZS1jb3ZlcmFnZVwiOiBcIm5vZGUgbm9kZV9tb2R1bGVzL2lzdGFuYnVsL2xpYi9jbGkuanMgY292ZXIgdGVzdC9ydW5uZXIuanNcIixcbiAgICBcImNoZWNrLWNvdmVyYWdlXCI6IFwibm9kZSBub2RlX21vZHVsZXMvaXN0YW5idWwvbGliL2NsaS5qcyBjaGVjay1jb3ZlcmFnZSAtLXN0YXRlbWVudCA5OSAtLWJyYW5jaCA5OSAtLWZ1bmN0aW9uIDk5XCIsXG4gICAgXCJjb21wbGV4aXR5XCI6IFwibnBtIHJ1bi1zY3JpcHQgYW5hbHl6ZS1jb21wbGV4aXR5ICYmIG5wbSBydW4tc2NyaXB0IGNoZWNrLWNvbXBsZXhpdHlcIixcbiAgICBcImFuYWx5emUtY29tcGxleGl0eVwiOiBcIm5vZGUgdG9vbHMvbGlzdC1jb21wbGV4aXR5LmpzXCIsXG4gICAgXCJjaGVjay1jb21wbGV4aXR5XCI6IFwibm9kZSBub2RlX21vZHVsZXMvY29tcGxleGl0eS1yZXBvcnQvc3JjL2NsaS5qcyAtLW1heGNjIDE0IC0tc2lsZW50IC1sIC13IGVzcHJlZS5qc1wiLFxuICAgIFwiYmVuY2htYXJrXCI6IFwibm9kZSB0ZXN0L2JlbmNobWFya3MuanNcIixcbiAgICBcImJlbmNobWFyay1xdWlja1wiOiBcIm5vZGUgdGVzdC9iZW5jaG1hcmtzLmpzIHF1aWNrXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge30sXG4gIFwiZ2l0SGVhZFwiOiBcImVlZWViMDViODc5NzgzOTAxZmYyMzA4ZWZjYmQwY2RhNzY3NTNjYmVcIixcbiAgXCJfaWRcIjogXCJlc3ByZWVAMi4yLjVcIixcbiAgXCJfc2hhc3VtXCI6IFwiZGY2OTFiOTMxMDg4OTQwMmFlYjI5Y2MwNjY3MDhjNTY2OTBiODU0YlwiLFxuICBcIl9mcm9tXCI6IFwiZXNwcmVlQD49Mi4wLjEgPDMuMC4wXCIsXG4gIFwiX25wbVZlcnNpb25cIjogXCIxLjQuMjhcIixcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJuYW1lXCI6IFwibnpha2FzXCIsXG4gICAgXCJlbWFpbFwiOiBcIm5pY2hvbGFzQG5jemNvbnN1bHRpbmcuY29tXCJcbiAgfSxcbiAgXCJtYWludGFpbmVyc1wiOiBbXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwibnpha2FzXCIsXG4gICAgICBcImVtYWlsXCI6IFwibmljaG9sYXNAbmN6Y29uc3VsdGluZy5jb21cIlxuICAgIH1cbiAgXSxcbiAgXCJkaXN0XCI6IHtcbiAgICBcInNoYXN1bVwiOiBcImRmNjkxYjkzMTA4ODk0MDJhZWIyOWNjMDY2NzA4YzU2NjkwYjg1NGJcIixcbiAgICBcInRhcmJhbGxcIjogXCJodHRwOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJlZS8tL2VzcHJlZS0yLjIuNS50Z3pcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHt9LFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJlZS8tL2VzcHJlZS0yLjIuNS50Z3pcIixcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCJcbn1cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG4vKmpzbGludCB2YXJzOmZhbHNlLCBiaXR3aXNlOnRydWUqL1xuLypqc2hpbnQgaW5kZW50OjQqL1xuLypnbG9iYWwgZXhwb3J0czp0cnVlKi9cbihmdW5jdGlvbiBjbG9uZShleHBvcnRzKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIFN5bnRheCxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgICAgVmlzaXRvck9wdGlvbixcbiAgICAgICAgVmlzaXRvcktleXMsXG4gICAgICAgIG9iamVjdENyZWF0ZSxcbiAgICAgICAgb2JqZWN0S2V5cyxcbiAgICAgICAgQlJFQUssXG4gICAgICAgIFNLSVAsXG4gICAgICAgIFJFTU9WRTtcblxuICAgIGZ1bmN0aW9uIGlnbm9yZUpTSGludEVycm9yKCkgeyB9XG5cbiAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgICBpZiAoIWlzQXJyYXkpIHtcbiAgICAgICAgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyYXkpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZXBDb3B5KG9iaikge1xuICAgICAgICB2YXIgcmV0ID0ge30sIGtleSwgdmFsO1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHZhbCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W2tleV0gPSBkZWVwQ29weSh2YWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldFtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYWxsb3dDb3B5KG9iaikge1xuICAgICAgICB2YXIgcmV0ID0ge30sIGtleTtcbiAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlnbm9yZUpTSGludEVycm9yKHNoYWxsb3dDb3B5KTtcblxuICAgIC8vIGJhc2VkIG9uIExMVk0gbGliYysrIHVwcGVyX2JvdW5kIC8gbG93ZXJfYm91bmRcbiAgICAvLyBNSVQgTGljZW5zZVxuXG4gICAgZnVuY3Rpb24gdXBwZXJCb3VuZChhcnJheSwgZnVuYykge1xuICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50O1xuXG4gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGxlbikge1xuICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjtcbiAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG93ZXJCb3VuZChhcnJheSwgZnVuYykge1xuICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50O1xuXG4gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGxlbikge1xuICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjtcbiAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIGlnbm9yZUpTSGludEVycm9yKGxvd2VyQm91bmQpO1xuXG4gICAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSB8fCAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBGKCkgeyB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICBGLnByb3RvdHlwZSA9IG87XG4gICAgICAgICAgICByZXR1cm4gbmV3IEYoKTtcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgIHZhciBrZXlzID0gW10sIGtleTtcbiAgICAgICAgZm9yIChrZXkgaW4gbykge1xuICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGV4dGVuZCh0bywgZnJvbSkge1xuICAgICAgICB2YXIga2V5cyA9IG9iamVjdEtleXMoZnJvbSksIGtleSwgaSwgbGVuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgU3ludGF4ID0ge1xuICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJyxcbiAgICAgICAgQXNzaWdubWVudFBhdHRlcm46ICdBc3NpZ25tZW50UGF0dGVybicsXG4gICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsXG4gICAgICAgIEFycmF5UGF0dGVybjogJ0FycmF5UGF0dGVybicsXG4gICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nLFxuICAgICAgICBBd2FpdEV4cHJlc3Npb246ICdBd2FpdEV4cHJlc3Npb24nLCAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsXG4gICAgICAgIEJpbmFyeUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNzaW9uJyxcbiAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcsXG4gICAgICAgIENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Npb24nLFxuICAgICAgICBDYXRjaENsYXVzZTogJ0NhdGNoQ2xhdXNlJyxcbiAgICAgICAgQ2xhc3NCb2R5OiAnQ2xhc3NCb2R5JyxcbiAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogJ0NsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgICBDbGFzc0V4cHJlc3Npb246ICdDbGFzc0V4cHJlc3Npb24nLFxuICAgICAgICBDb21wcmVoZW5zaW9uQmxvY2s6ICdDb21wcmVoZW5zaW9uQmxvY2snLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbXByZWhlbnNpb25FeHByZXNzaW9uOiAnQ29tcHJlaGVuc2lvbkV4cHJlc3Npb24nLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsXG4gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLFxuICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JyxcbiAgICAgICAgRGlyZWN0aXZlU3RhdGVtZW50OiAnRGlyZWN0aXZlU3RhdGVtZW50JyxcbiAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLFxuICAgICAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JyxcbiAgICAgICAgRXhwb3J0QWxsRGVjbGFyYXRpb246ICdFeHBvcnRBbGxEZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJyxcbiAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiAnRXhwb3J0U3BlY2lmaWVyJyxcbiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Npb25TdGF0ZW1lbnQnLFxuICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLFxuICAgICAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JyxcbiAgICAgICAgRm9yT2ZTdGF0ZW1lbnQ6ICdGb3JPZlN0YXRlbWVudCcsXG4gICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJyxcbiAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJyxcbiAgICAgICAgR2VuZXJhdG9yRXhwcmVzc2lvbjogJ0dlbmVyYXRvckV4cHJlc3Npb24nLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJyxcbiAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVudCcsXG4gICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiAnSW1wb3J0RGVjbGFyYXRpb24nLFxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydFNwZWNpZmllcjogJ0ltcG9ydFNwZWNpZmllcicsXG4gICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJyxcbiAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLFxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHByZXNzaW9uJyxcbiAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLFxuICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlvbicsXG4gICAgICAgIE1vZHVsZVNwZWNpZmllcjogJ01vZHVsZVNwZWNpZmllcicsXG4gICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJyxcbiAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLFxuICAgICAgICBPYmplY3RQYXR0ZXJuOiAnT2JqZWN0UGF0dGVybicsXG4gICAgICAgIFByb2dyYW06ICdQcm9ncmFtJyxcbiAgICAgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsXG4gICAgICAgIFJlc3RFbGVtZW50OiAnUmVzdEVsZW1lbnQnLFxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLFxuICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLFxuICAgICAgICBTcHJlYWRFbGVtZW50OiAnU3ByZWFkRWxlbWVudCcsXG4gICAgICAgIFN1cGVyRXhwcmVzc2lvbjogJ1N1cGVyRXhwcmVzc2lvbicsXG4gICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsXG4gICAgICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJyxcbiAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiAnVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uJyxcbiAgICAgICAgVGVtcGxhdGVFbGVtZW50OiAnVGVtcGxhdGVFbGVtZW50JyxcbiAgICAgICAgVGVtcGxhdGVMaXRlcmFsOiAnVGVtcGxhdGVMaXRlcmFsJyxcbiAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsXG4gICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLFxuICAgICAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLFxuICAgICAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4cHJlc3Npb24nLFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVzc2lvbicsXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0aW9uJyxcbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJyxcbiAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsXG4gICAgICAgIFdpdGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JyxcbiAgICAgICAgWWllbGRFeHByZXNzaW9uOiAnWWllbGRFeHByZXNzaW9uJ1xuICAgIH07XG5cbiAgICBWaXNpdG9yS2V5cyA9IHtcbiAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBBc3NpZ25tZW50UGF0dGVybjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIEFycmF5RXhwcmVzc2lvbjogWydlbGVtZW50cyddLFxuICAgICAgICBBcnJheVBhdHRlcm46IFsnZWxlbWVudHMnXSxcbiAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IFsncGFyYW1zJywgJ2JvZHknXSxcbiAgICAgICAgQXdhaXRFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBCbG9ja1N0YXRlbWVudDogWydib2R5J10sXG4gICAgICAgIEJpbmFyeUV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBCcmVha1N0YXRlbWVudDogWydsYWJlbCddLFxuICAgICAgICBDYWxsRXhwcmVzc2lvbjogWydjYWxsZWUnLCAnYXJndW1lbnRzJ10sXG4gICAgICAgIENhdGNoQ2xhdXNlOiBbJ3BhcmFtJywgJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NCb2R5OiBbJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogWydpZCcsICdzdXBlckNsYXNzJywgJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiBbJ2lkJywgJ3N1cGVyQ2xhc3MnLCAnYm9keSddLFxuICAgICAgICBDb21wcmVoZW5zaW9uQmxvY2s6IFsnbGVmdCcsICdyaWdodCddLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbXByZWhlbnNpb25FeHByZXNzaW9uOiBbJ2Jsb2NrcycsICdmaWx0ZXInLCAnYm9keSddLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnLCAnYWx0ZXJuYXRlJ10sXG4gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiBbJ2xhYmVsJ10sXG4gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiBbXSxcbiAgICAgICAgRGlyZWN0aXZlU3RhdGVtZW50OiBbXSxcbiAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogWydib2R5JywgJ3Rlc3QnXSxcbiAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6IFtdLFxuICAgICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogWydzb3VyY2UnXSxcbiAgICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9uJ10sXG4gICAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb24nLCAnc3BlY2lmaWVycycsICdzb3VyY2UnXSxcbiAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiBbJ2V4cG9ydGVkJywgJ2xvY2FsJ10sXG4gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6IFsnZXhwcmVzc2lvbiddLFxuICAgICAgICBGb3JTdGF0ZW1lbnQ6IFsnaW5pdCcsICd0ZXN0JywgJ3VwZGF0ZScsICdib2R5J10sXG4gICAgICAgIEZvckluU3RhdGVtZW50OiBbJ2xlZnQnLCAncmlnaHQnLCAnYm9keSddLFxuICAgICAgICBGb3JPZlN0YXRlbWVudDogWydsZWZ0JywgJ3JpZ2h0JywgJ2JvZHknXSxcbiAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogWydpZCcsICdwYXJhbXMnLCAnYm9keSddLFxuICAgICAgICBGdW5jdGlvbkV4cHJlc3Npb246IFsnaWQnLCAncGFyYW1zJywgJ2JvZHknXSxcbiAgICAgICAgR2VuZXJhdG9yRXhwcmVzc2lvbjogWydibG9ja3MnLCAnZmlsdGVyJywgJ2JvZHknXSwgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBJZGVudGlmaWVyOiBbXSxcbiAgICAgICAgSWZTdGF0ZW1lbnQ6IFsndGVzdCcsICdjb25zZXF1ZW50JywgJ2FsdGVybmF0ZSddLFxuICAgICAgICBJbXBvcnREZWNsYXJhdGlvbjogWydzcGVjaWZpZXJzJywgJ3NvdXJjZSddLFxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBbJ2xvY2FsJ10sXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogWydsb2NhbCddLFxuICAgICAgICBJbXBvcnRTcGVjaWZpZXI6IFsnaW1wb3J0ZWQnLCAnbG9jYWwnXSxcbiAgICAgICAgTGl0ZXJhbDogW10sXG4gICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6IFsnbGFiZWwnLCAnYm9keSddLFxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIE1lbWJlckV4cHJlc3Npb246IFsnb2JqZWN0JywgJ3Byb3BlcnR5J10sXG4gICAgICAgIE1ldGhvZERlZmluaXRpb246IFsna2V5JywgJ3ZhbHVlJ10sXG4gICAgICAgIE1vZHVsZVNwZWNpZmllcjogW10sXG4gICAgICAgIE5ld0V4cHJlc3Npb246IFsnY2FsbGVlJywgJ2FyZ3VtZW50cyddLFxuICAgICAgICBPYmplY3RFeHByZXNzaW9uOiBbJ3Byb3BlcnRpZXMnXSxcbiAgICAgICAgT2JqZWN0UGF0dGVybjogWydwcm9wZXJ0aWVzJ10sXG4gICAgICAgIFByb2dyYW06IFsnYm9keSddLFxuICAgICAgICBQcm9wZXJ0eTogWydrZXknLCAndmFsdWUnXSxcbiAgICAgICAgUmVzdEVsZW1lbnQ6IFsgJ2FyZ3VtZW50JyBdLFxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiBbJ2V4cHJlc3Npb25zJ10sXG4gICAgICAgIFNwcmVhZEVsZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgU3VwZXJFeHByZXNzaW9uOiBbJ3N1cGVyJ10sXG4gICAgICAgIFN3aXRjaFN0YXRlbWVudDogWydkaXNjcmltaW5hbnQnLCAnY2FzZXMnXSxcbiAgICAgICAgU3dpdGNoQ2FzZTogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnXSxcbiAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBbJ3RhZycsICdxdWFzaSddLFxuICAgICAgICBUZW1wbGF0ZUVsZW1lbnQ6IFtdLFxuICAgICAgICBUZW1wbGF0ZUxpdGVyYWw6IFsncXVhc2lzJywgJ2V4cHJlc3Npb25zJ10sXG4gICAgICAgIFRoaXNFeHByZXNzaW9uOiBbXSxcbiAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgVHJ5U3RhdGVtZW50OiBbJ2Jsb2NrJywgJ2hhbmRsZXInLCAnZmluYWxpemVyJ10sXG4gICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogWydhcmd1bWVudCddLFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb25zJ10sXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogWydpZCcsICdpbml0J10sXG4gICAgICAgIFdoaWxlU3RhdGVtZW50OiBbJ3Rlc3QnLCAnYm9keSddLFxuICAgICAgICBXaXRoU3RhdGVtZW50OiBbJ29iamVjdCcsICdib2R5J10sXG4gICAgICAgIFlpZWxkRXhwcmVzc2lvbjogWydhcmd1bWVudCddXG4gICAgfTtcblxuICAgIC8vIHVuaXF1ZSBpZFxuICAgIEJSRUFLID0ge307XG4gICAgU0tJUCA9IHt9O1xuICAgIFJFTU9WRSA9IHt9O1xuXG4gICAgVmlzaXRvck9wdGlvbiA9IHtcbiAgICAgICAgQnJlYWs6IEJSRUFLLFxuICAgICAgICBTa2lwOiBTS0lQLFxuICAgICAgICBSZW1vdmU6IFJFTU9WRVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBSZWZlcmVuY2UocGFyZW50LCBrZXkpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIH1cblxuICAgIFJlZmVyZW5jZS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uobm9kZSkge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLmtleV0gPSBub2RlO1xuICAgIH07XG5cbiAgICBSZWZlcmVuY2UucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodGhpcy5wYXJlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5zcGxpY2UodGhpcy5rZXksIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2UobnVsbCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gRWxlbWVudChub2RlLCBwYXRoLCB3cmFwLCByZWYpIHtcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgdGhpcy5yZWYgPSByZWY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gQ29udHJvbGxlcigpIHsgfVxuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJldHVybiBwcm9wZXJ0eSBwYXRoIGFycmF5IGZyb20gcm9vdCB0byBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24gcGF0aCgpIHtcbiAgICAgICAgdmFyIGksIGl6LCBqLCBqeiwgcmVzdWx0LCBlbGVtZW50O1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZFRvUGF0aChyZXN1bHQsIHBhdGgpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHBhdGgpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMCwganogPSBwYXRoLmxlbmd0aDsgaiA8IGp6OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aFtqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJvb3Qgbm9kZVxuICAgICAgICBpZiAoIXRoaXMuX19jdXJyZW50LnBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmlyc3Qgbm9kZSBpcyBzZW50aW5lbCwgc2Vjb25kIG5vZGUgaXMgcm9vdCBlbGVtZW50XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAyLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMuX19sZWF2ZWxpc3RbaV07XG4gICAgICAgICAgICBhZGRUb1BhdGgocmVzdWx0LCBlbGVtZW50LnBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRvUGF0aChyZXN1bHQsIHRoaXMuX19jdXJyZW50LnBhdGgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIHR5cGUgb2YgY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUudHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmN1cnJlbnQoKTtcbiAgICAgICAgcmV0dXJuIG5vZGUudHlwZSB8fCB0aGlzLl9fY3VycmVudC53cmFwO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIGFycmF5IG9mIHBhcmVudCBlbGVtZW50c1xuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnBhcmVudHMgPSBmdW5jdGlvbiBwYXJlbnRzKCkge1xuICAgICAgICB2YXIgaSwgaXosIHJlc3VsdDtcblxuICAgICAgICAvLyBmaXJzdCBub2RlIGlzIHNlbnRpbmVsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAxLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5fX2xlYXZlbGlzdFtpXS5ub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyByZXR1cm4gY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIGN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fY3VycmVudC5ub2RlO1xuICAgIH07XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5fX2V4ZWN1dGUgPSBmdW5jdGlvbiBfX2V4ZWN1dGUoY2FsbGJhY2ssIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzLCByZXN1bHQ7XG5cbiAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHByZXZpb3VzICA9IHRoaXMuX19jdXJyZW50O1xuICAgICAgICB0aGlzLl9fY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX19zdGF0ZSA9IG51bGw7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2suY2FsbCh0aGlzLCBlbGVtZW50Lm5vZGUsIHRoaXMuX19sZWF2ZWxpc3RbdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGggLSAxXS5ub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9fY3VycmVudCA9IHByZXZpb3VzO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyBub3RpZnkgY29udHJvbCBza2lwIC8gYnJlYWtcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZmxhZykge1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBmbGFnO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gc2tpcCBjaGlsZCBub2RlcyBvZiBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5vdGlmeShTS0lQKTtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIGJyZWFrIHRyYXZlcnNhbHNcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZVsnYnJlYWsnXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoQlJFQUspO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmVtb3ZlIG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KFJFTU9WRSk7XG4gICAgfTtcblxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdGhpcy52aXNpdG9yID0gdmlzaXRvcjtcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgdGhpcy5fX3dvcmtsaXN0ID0gW107XG4gICAgICAgIHRoaXMuX19sZWF2ZWxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5fX2N1cnJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9fZmFsbGJhY2sgPSB2aXNpdG9yLmZhbGxiYWNrID09PSAnaXRlcmF0aW9uJztcbiAgICAgICAgdGhpcy5fX2tleXMgPSBWaXNpdG9yS2V5cztcbiAgICAgICAgaWYgKHZpc2l0b3Iua2V5cykge1xuICAgICAgICAgICAgdGhpcy5fX2tleXMgPSBleHRlbmQob2JqZWN0Q3JlYXRlKHRoaXMuX19rZXlzKSwgdmlzaXRvci5rZXlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpc05vZGUobm9kZSkge1xuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZS50eXBlID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Byb3BlcnR5KG5vZGVUeXBlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIChub2RlVHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RQYXR0ZXJuKSAmJiAncHJvcGVydGllcycgPT09IGtleTtcbiAgICB9XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIHdvcmtsaXN0LFxuICAgICAgICAgICAgbGVhdmVsaXN0LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBjdXJyZW50MixcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICAgICAgICBjYW5kaWRhdGUsXG4gICAgICAgICAgICBzZW50aW5lbDtcblxuICAgICAgICB0aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNpdG9yKTtcblxuICAgICAgICBzZW50aW5lbCA9IHt9O1xuXG4gICAgICAgIC8vIHJlZmVyZW5jZVxuICAgICAgICB3b3JrbGlzdCA9IHRoaXMuX193b3JrbGlzdDtcbiAgICAgICAgbGVhdmVsaXN0ID0gdGhpcy5fX2xlYXZlbGlzdDtcblxuICAgICAgICAvLyBpbml0aWFsaXplXG4gICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQocm9vdCwgbnVsbCwgbnVsbCwgbnVsbCkpO1xuICAgICAgICBsZWF2ZWxpc3QucHVzaChuZXcgRWxlbWVudChudWxsLCBudWxsLCBudWxsLCBudWxsKSk7XG5cbiAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gc2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gbGVhdmVsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5sZWF2ZSwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCByZXQgPT09IEJSRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGUpIHtcblxuICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IuZW50ZXIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgcmV0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7XG4gICAgICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBTS0lQIHx8IHJldCA9PT0gU0tJUCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlID0gZWxlbWVudC5ub2RlO1xuICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5vZGUudHlwZTtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gdGhpcy5fX2tleXNbbm9kZVR5cGVdO1xuICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gb2JqZWN0S2V5cyhub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub2RlIHR5cGUgJyArIG5vZGVUeXBlICsgJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBjYW5kaWRhdGVzW2N1cnJlbnRdO1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQyID0gY2FuZGlkYXRlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlW2N1cnJlbnQyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvcGVydHkobm9kZVR5cGUsIGNhbmRpZGF0ZXNbY3VycmVudF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sICdQcm9wZXJ0eScsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZVtjdXJyZW50Ml0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZShjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG5ldyBFbGVtZW50KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBudWxsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uocm9vdCwgdmlzaXRvcikge1xuICAgICAgICBmdW5jdGlvbiByZW1vdmVFbGVtKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBuZXh0RWxlbSxcbiAgICAgICAgICAgICAgICBwYXJlbnQ7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnJlZi5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIHJlZmVyZW5jZSBpcyBhbiBlbGVtZW50IG9mIGFuIGFycmF5LlxuICAgICAgICAgICAgICAgIGtleSA9IGVsZW1lbnQucmVmLmtleTtcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtZW50LnJlZi5wYXJlbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiByZW1vdmVkIGZyb20gYXJyYXksIHRoZW4gZGVjcmVhc2UgZm9sbG93aW5nIGl0ZW1zJyBrZXlzLlxuICAgICAgICAgICAgICAgIGkgPSB3b3JrbGlzdC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0RWxlbSA9IHdvcmtsaXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW0ucmVmICYmIG5leHRFbGVtLnJlZi5wYXJlbnQgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgIChuZXh0RWxlbS5yZWYua2V5IDwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAtLW5leHRFbGVtLnJlZi5rZXk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd29ya2xpc3QsXG4gICAgICAgICAgICBsZWF2ZWxpc3QsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbm9kZVR5cGUsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIGN1cnJlbnQyLFxuICAgICAgICAgICAgY2FuZGlkYXRlcyxcbiAgICAgICAgICAgIGNhbmRpZGF0ZSxcbiAgICAgICAgICAgIHNlbnRpbmVsLFxuICAgICAgICAgICAgb3V0ZXIsXG4gICAgICAgICAgICBrZXk7XG5cbiAgICAgICAgdGhpcy5fX2luaXRpYWxpemUocm9vdCwgdmlzaXRvcik7XG5cbiAgICAgICAgc2VudGluZWwgPSB7fTtcblxuICAgICAgICAvLyByZWZlcmVuY2VcbiAgICAgICAgd29ya2xpc3QgPSB0aGlzLl9fd29ya2xpc3Q7XG4gICAgICAgIGxlYXZlbGlzdCA9IHRoaXMuX19sZWF2ZWxpc3Q7XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZVxuICAgICAgICBvdXRlciA9IHtcbiAgICAgICAgICAgIHJvb3Q6IHJvb3RcbiAgICAgICAgfTtcbiAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KHJvb3QsIG51bGwsIG51bGwsIG5ldyBSZWZlcmVuY2Uob3V0ZXIsICdyb290JykpO1xuICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICBsZWF2ZWxpc3QucHVzaChlbGVtZW50KTtcblxuICAgICAgICB3aGlsZSAod29ya2xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gd29ya2xpc3QucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBzZW50aW5lbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBsZWF2ZWxpc3QucG9wKCk7XG5cbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmxlYXZlLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCxcbiAgICAgICAgICAgICAgICAvLyBzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuZGVmaW5lZCBhbmQgbnVsbCBpbiB0aGlzIHBsYWNlXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQICYmIHRhcmdldCAhPT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWYucmVwbGFjZSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFJFTU9WRSB8fCB0YXJnZXQgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFbGVtKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHRhcmdldCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmVudGVyLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgLy8gbm9kZSBtYXkgYmUgcmVwbGFjZWQgd2l0aCBudWxsLFxuICAgICAgICAgICAgLy8gc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmRlZmluZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZVxuICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQICYmIHRhcmdldCAhPT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjZVxuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmLnJlcGxhY2UodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm5vZGUgPSB0YXJnZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFJFTU9WRSB8fCB0YXJnZXQgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUVsZW0oZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5ub2RlID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgdGFyZ2V0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBub2RlIG1heSBiZSBudWxsXG4gICAgICAgICAgICBub2RlID0gZWxlbWVudC5ub2RlO1xuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc2VudGluZWwpO1xuICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFNLSVAgfHwgdGFyZ2V0ID09PSBTS0lQKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5vZGUudHlwZTtcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSB0aGlzLl9fa2V5c1tub2RlVHlwZV07XG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBvYmplY3RLZXlzKG5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub2RlIHR5cGUgJyArIG5vZGVUeXBlICsgJy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAtPSAxKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gY2FuZGlkYXRlc1tjdXJyZW50XTtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50MiA9IGNhbmRpZGF0ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVbY3VycmVudDJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eShub2RlVHlwZSwgY2FuZGlkYXRlc1tjdXJyZW50XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHknLCBuZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVudDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZVtjdXJyZW50Ml0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgbnVsbCwgbmV3IFJlZmVyZW5jZShjYW5kaWRhdGUsIGN1cnJlbnQyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChjYW5kaWRhdGUsIGtleSwgbnVsbCwgbmV3IFJlZmVyZW5jZShub2RlLCBrZXkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICByZXR1cm4gY29udHJvbGxlci50cmF2ZXJzZShyb290LCB2aXNpdG9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYWNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICByZXR1cm4gY29udHJvbGxlci5yZXBsYWNlKHJvb3QsIHZpc2l0b3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZENvbW1lbnRSYW5nZShjb21tZW50LCB0b2tlbnMpIHtcbiAgICAgICAgdmFyIHRhcmdldDtcblxuICAgICAgICB0YXJnZXQgPSB1cHBlckJvdW5kKHRva2VucywgZnVuY3Rpb24gc2VhcmNoKHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW4ucmFuZ2VbMF0gPiBjb21tZW50LnJhbmdlWzBdO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbY29tbWVudC5yYW5nZVswXSwgY29tbWVudC5yYW5nZVsxXV07XG5cbiAgICAgICAgaWYgKHRhcmdldCAhPT0gdG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID0gdG9rZW5zW3RhcmdldF0ucmFuZ2VbMF07XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXQgLT0gMTtcbiAgICAgICAgaWYgKHRhcmdldCA+PSAwKSB7XG4gICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0gPSB0b2tlbnNbdGFyZ2V0XS5yYW5nZVsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21tZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGF0dGFjaENvbW1lbnRzKHRyZWUsIHByb3ZpZGVkQ29tbWVudHMsIHRva2Vucykge1xuICAgICAgICAvLyBBdCBmaXJzdCwgd2Ugc2hvdWxkIGNhbGN1bGF0ZSBleHRlbmRlZCBjb21tZW50IHJhbmdlcy5cbiAgICAgICAgdmFyIGNvbW1lbnRzID0gW10sIGNvbW1lbnQsIGxlbiwgaSwgY3Vyc29yO1xuXG4gICAgICAgIGlmICghdHJlZS5yYW5nZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRhY2hDb21tZW50cyBuZWVkcyByYW5nZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG9rZW5zIGFycmF5IGlzIGVtcHR5LCB3ZSBhdHRhY2ggY29tbWVudHMgdG8gdHJlZSBhcyAnbGVhZGluZ0NvbW1lbnRzJ1xuICAgICAgICBpZiAoIXRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChwcm92aWRlZENvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbMCwgdHJlZS5yYW5nZVswXV07XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyZWUubGVhZGluZ0NvbW1lbnRzID0gY29tbWVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJlZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZXh0ZW5kQ29tbWVudFJhbmdlKGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pLCB0b2tlbnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgaXMgYmFzZWQgb24gSm9obiBGcmVlbWFuJ3MgaW1wbGVtZW50YXRpb24uXG4gICAgICAgIGN1cnNvciA9IDA7XG4gICAgICAgIHRyYXZlcnNlKHRyZWUsIHtcbiAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb21tZW50O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA+IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9PT0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGVcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnNvciA9IDA7XG4gICAgICAgIHRyYXZlcnNlKHRyZWUsIHtcbiAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb21tZW50O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPCBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPT09IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLnRyYWlsaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGVcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0cmVlO1xuICAgIH1cblxuICAgIGV4cG9ydHMudmVyc2lvbiA9IHJlcXVpcmUoJy4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgICBleHBvcnRzLlN5bnRheCA9IFN5bnRheDtcbiAgICBleHBvcnRzLnRyYXZlcnNlID0gdHJhdmVyc2U7XG4gICAgZXhwb3J0cy5yZXBsYWNlID0gcmVwbGFjZTtcbiAgICBleHBvcnRzLmF0dGFjaENvbW1lbnRzID0gYXR0YWNoQ29tbWVudHM7XG4gICAgZXhwb3J0cy5WaXNpdG9yS2V5cyA9IFZpc2l0b3JLZXlzO1xuICAgIGV4cG9ydHMuVmlzaXRvck9wdGlvbiA9IFZpc2l0b3JPcHRpb247XG4gICAgZXhwb3J0cy5Db250cm9sbGVyID0gQ29udHJvbGxlcjtcbiAgICBleHBvcnRzLmNsb25lRW52aXJvbm1lbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjbG9uZSh7fSk7IH07XG5cbiAgICByZXR1cm4gZXhwb3J0cztcbn0oZXhwb3J0cykpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwiZXN0cmF2ZXJzZVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiRUNNQVNjcmlwdCBKUyBBU1QgdHJhdmVyc2FsIGZ1bmN0aW9uc1wiLFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2VzdG9vbHMvZXN0cmF2ZXJzZVwiLFxuICBcIm1haW5cIjogXCJlc3RyYXZlcnNlLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMS4wXCIsXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0wLjEwLjBcIlxuICB9LFxuICBcIm1haW50YWluZXJzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJjb25zdGVsbGF0aW9uXCIsXG4gICAgICBcImVtYWlsXCI6IFwidXRhdGFuZS50ZWFAZ21haWwuY29tXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIm1pY2hhZWxmaWNhcnJhXCIsXG4gICAgICBcImVtYWlsXCI6IFwibnBtQG1pY2hhZWwuZmljYXJyYS5tZVwiXG4gICAgfVxuICBdLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiZ2l0K3NzaDovL2dpdEBnaXRodWIuY29tL2VzdG9vbHMvZXN0cmF2ZXJzZS5naXRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJjaGFpXCI6IFwiXjIuMS4xXCIsXG4gICAgXCJjb2ZmZWUtc2NyaXB0XCI6IFwiXjEuOC4wXCIsXG4gICAgXCJlc3ByZWVcIjogXCJeMS4xMS4wXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOC4xMFwiLFxuICAgIFwiZ3VscC1idW1wXCI6IFwiXjAuMi4yXCIsXG4gICAgXCJndWxwLWZpbHRlclwiOiBcIl4yLjAuMFwiLFxuICAgIFwiZ3VscC1naXRcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtdGFnLXZlcnNpb25cIjogXCJeMS4yLjFcIixcbiAgICBcImpzaGludFwiOiBcIl4yLjUuNlwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4xLjBcIlxuICB9LFxuICBcImxpY2Vuc2VzXCI6IFtcbiAgICB7XG4gICAgICBcInR5cGVcIjogXCJCU0RcIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXN0b29scy9lc3RyYXZlcnNlL3Jhdy9tYXN0ZXIvTElDRU5TRS5CU0RcIlxuICAgIH1cbiAgXSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInRlc3RcIjogXCJucG0gcnVuLXNjcmlwdCBsaW50ICYmIG5wbSBydW4tc2NyaXB0IHVuaXQtdGVzdFwiLFxuICAgIFwibGludFwiOiBcImpzaGludCBlc3RyYXZlcnNlLmpzXCIsXG4gICAgXCJ1bml0LXRlc3RcIjogXCJtb2NoYSAtLWNvbXBpbGVycyBjb2ZmZWU6Y29mZmVlLXNjcmlwdC9yZWdpc3RlclwiXG4gIH0sXG4gIFwiZ2l0SGVhZFwiOiBcIjE2NmViYmUwYThkNDVjZWIyMzkxYjZmNWVmNWQxYmFiNmJmYjI2N2FcIixcbiAgXCJidWdzXCI6IHtcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9lc3Rvb2xzL2VzdHJhdmVyc2UvaXNzdWVzXCJcbiAgfSxcbiAgXCJfaWRcIjogXCJlc3RyYXZlcnNlQDMuMS4wXCIsXG4gIFwiX3NoYXN1bVwiOiBcIjE1ZTI4YTQ0NmI4YjgyYmM3MDBjY2M4Yjk2Yzc4YWY0ZGEwZDZjYmFcIixcbiAgXCJfZnJvbVwiOiBcImVzdHJhdmVyc2VAPj0zLjEuMCA8NC4wLjBcIixcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjIuMC4wLWFscGhhLTVcIixcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiY29uc3RlbGxhdGlvblwiLFxuICAgIFwiZW1haWxcIjogXCJ1dGF0YW5lLnRlYUBnbWFpbC5jb21cIlxuICB9LFxuICBcImRpc3RcIjoge1xuICAgIFwic2hhc3VtXCI6IFwiMTVlMjhhNDQ2YjhiODJiYzcwMGNjYzhiOTZjNzhhZjRkYTBkNmNiYVwiLFxuICAgIFwidGFyYmFsbFwiOiBcImh0dHA6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN0cmF2ZXJzZS8tL2VzdHJhdmVyc2UtMy4xLjAudGd6XCJcbiAgfSxcbiAgXCJkaXJlY3Rvcmllc1wiOiB7fSxcbiAgXCJfcmVzb2x2ZWRcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyYXZlcnNlLy0vZXN0cmF2ZXJzZS0zLjEuMC50Z3pcIixcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCJcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuIC8qanNsaW50IG5vZGU6IHRydWUgKi9cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTdGF0aWMgYW5hbHlzaXMgZm9yIFBvbHltZXIuXG4gKiBAbmFtZXNwYWNlIGh5ZHJvbHlzaXNcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFuYWx5emVyOiAgICAgICAgICByZXF1aXJlKCcuL2xpYi9hbmFseXplcicpLFxuICBkb2NzOiAgICAgICAgICAgICAgcmVxdWlyZSgnLi9saWIvYXN0LXV0aWxzL2RvY3MnKSxcbiAgRlNSZXNvbHZlcjogICAgICAgIHJlcXVpcmUoJy4vbGliL2xvYWRlci9mcy1yZXNvbHZlcicpLFxuICBqc2RvYzogICAgICAgICAgICAgcmVxdWlyZSgnLi9saWIvYXN0LXV0aWxzL2pzZG9jJyksXG4gIExvYWRlcjogICAgICAgICAgICByZXF1aXJlKCcuL2xpYi9sb2FkZXIvZmlsZS1sb2FkZXInKSxcbiAgTm9vcFJlc29sdmVyOiAgICAgIHJlcXVpcmUoJy4vbGliL2xvYWRlci9ub29wLXJlc29sdmVyJyksXG4gIFJlZGlyZWN0UmVzb2x2ZXI6ICByZXF1aXJlKCcuL2xpYi9sb2FkZXIvcmVkaXJlY3QtcmVzb2x2ZXInKSxcbiAgWEhSUmVzb2x2ZXI6ICAgICAgIHJlcXVpcmUoJy4vbGliL2xvYWRlci94aHItcmVzb2x2ZXInKSxcbiAgX2pzUGFyc2U6ICAgICAgICAgIHJlcXVpcmUoJy4vbGliL2FzdC11dGlscy9qcy1wYXJzZScpLFxuICBfaW1wb3J0UGFyc2U6ICAgICAgcmVxdWlyZSgnLi9saWIvYXN0LXV0aWxzL2ltcG9ydC1wYXJzZScpLFxufTtcbiJdfQ==
  26537 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvYW5hbHl6ZXIuanMiLCJsaWIvYXN0LXV0aWxzL2FuYWx5emUtcHJvcGVydGllcy5qcyIsImxpYi9hc3QtdXRpbHMvYXN0LXZhbHVlLmpzIiwibGliL2FzdC11dGlscy9iZWhhdmlvci1maW5kZXIuanMiLCJsaWIvYXN0LXV0aWxzL2RvY3MuanMiLCJsaWIvYXN0LXV0aWxzL2VsZW1lbnQtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9lc3V0aWwuanMiLCJsaWIvYXN0LXV0aWxzL2ZlYXR1cmUtZmluZGVyLmpzIiwibGliL2FzdC11dGlscy9maW5kLWFsaWFzLmpzIiwibGliL2FzdC11dGlscy9pbXBvcnQtcGFyc2UuanMiLCJsaWIvYXN0LXV0aWxzL2pzLXBhcnNlLmpzIiwibGliL2FzdC11dGlscy9qc2RvYy5qcyIsImxpYi9sb2FkZXIvZmlsZS1sb2FkZXIuanMiLCJsaWIvbG9hZGVyL2ZzLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci9ub29wLXJlc29sdmVyLmpzIiwibGliL2xvYWRlci9yZWRpcmVjdC1yZXNvbHZlci5qcyIsImxpYi9sb2FkZXIveGhyLXJlc29sdmVyLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbGliL19lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcGF0aC1icm93c2VyaWZ5L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9wdW55Y29kZS9wdW55Y29kZS5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy1lczMvZGVjb2RlLmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nLWVzMy9lbmNvZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmctZXMzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL3VybC91cmwuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvdXRpbC9zdXBwb3J0L2lzQnVmZmVyQnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy91dGlsL3V0aWwuanMiLCJub2RlX21vZHVsZXMvZG9jdHJpbmUvbGliL2RvY3RyaW5lLmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL2xpYi90eXBlZC5qcyIsIm5vZGVfbW9kdWxlcy9kb2N0cmluZS9saWIvdXRpbGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9kb2N0cmluZS9ub2RlX21vZHVsZXMvZXN1dGlscy9saWIvYXN0LmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL25vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi9jb2RlLmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL25vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi9rZXl3b3JkLmpzIiwibm9kZV9tb2R1bGVzL2RvY3RyaW5lL25vZGVfbW9kdWxlcy9lc3V0aWxzL2xpYi91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9kb2N0cmluZS9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kb2N0cmluZS9wYWNrYWdlLmpzb24iLCJub2RlX21vZHVsZXMvZG9tNS9kb201LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9kb2N0eXBlLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL2ZvcmVpZ25fY29udGVudC5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL2NvbW1vbi9odG1sLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvY29tbW9uL3VuaWNvZGUuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9jb21tb24vdXRpbHMuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9qc2RvbS9qc2RvbV9wYXJzZXIuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9qc2RvbS9wYXJzaW5nX3VuaXQuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6ZXIuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi9zaW1wbGVfYXBpL3NpbXBsZV9hcGlfcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvc2ltcGxlX2FwaS90b2tlbml6ZXJfcHJveHkuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vbG9jYXRpb25faW5mb19taXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi9uYW1lZF9lbnRpdHlfdHJpZS5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3Rva2VuaXphdGlvbi9wcmVwcm9jZXNzb3IuanMiLCJub2RlX21vZHVsZXMvZG9tNS9ub2RlX21vZHVsZXMvcGFyc2U1L2xpYi90b2tlbml6YXRpb24vdG9rZW5pemVyLmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9hZGFwdGVycy9kZWZhdWx0LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9hZGFwdGVycy9odG1scGFyc2VyMi5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL2Zvcm1hdHRpbmdfZWxlbWVudF9saXN0LmpzIiwibm9kZV9tb2R1bGVzL2RvbTUvbm9kZV9tb2R1bGVzL3BhcnNlNS9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vbG9jYXRpb25faW5mb19taXhpbi5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL29wZW5fZWxlbWVudF9zdGFjay5qcyIsIm5vZGVfbW9kdWxlcy9kb201L25vZGVfbW9kdWxlcy9wYXJzZTUvbGliL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9lc3ByZWUuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9hc3Qtbm9kZS1mYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvYXN0LW5vZGUtdHlwZXMuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9jb21tZW50LWF0dGFjaG1lbnQuanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi9mZWF0dXJlcy5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL21lc3NhZ2VzLmpzIiwibm9kZV9tb2R1bGVzL2VzcHJlZS9saWIvc3RyaW5nLW1hcC5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL3N5bnRheC5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvbGliL3Rva2VuLWluZm8uanMiLCJub2RlX21vZHVsZXMvZXNwcmVlL2xpYi94aHRtbC1lbnRpdGllcy5qcyIsIm5vZGVfbW9kdWxlcy9lc3ByZWUvcGFja2FnZS5qc29uIiwibm9kZV9tb2R1bGVzL2VzdHJhdmVyc2UvZXN0cmF2ZXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9lc3RyYXZlcnNlL3BhY2thZ2UuanNvbiIsIm5vZGVfbW9kdWxlcy9wYXRoLWlzLWFic29sdXRlL2luZGV4LmpzIiwiaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOXRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9OQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOWZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuc0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2x6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3dUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pDQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ppQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDalFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN3dFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDck1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM3dGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNzVLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3A4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDejBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbiAoZ2xvYmFsKXtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0Jztcbi8vIGpzaGludCAtVzA3OVxudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZSB8fCByZXF1aXJlKCdlczYtcHJvbWlzZScpLlByb21pc2U7XG4vLyBqc2hpbnQgK1cwNzlcblxudmFyIGRvbTUgPSByZXF1aXJlKCdkb201Jyk7XG52YXIgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5cbnZhciBkb2NzID0gcmVxdWlyZSgnLi9hc3QtdXRpbHMvZG9jcycpO1xudmFyIEZpbGVMb2FkZXIgPSByZXF1aXJlKCcuL2xvYWRlci9maWxlLWxvYWRlcicpO1xudmFyIGltcG9ydFBhcnNlID0gcmVxdWlyZSgnLi9hc3QtdXRpbHMvaW1wb3J0LXBhcnNlJyk7XG52YXIganNQYXJzZSA9IHJlcXVpcmUoJy4vYXN0LXV0aWxzL2pzLXBhcnNlJyk7XG52YXIgTm9vcFJlc29sdmVyID0gcmVxdWlyZSgnLi9sb2FkZXIvbm9vcC1yZXNvbHZlcicpO1xuXG5mdW5jdGlvbiByZWR1Y2VNZXRhZGF0YShtMSwgbTIpIHtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogIG0xLmVsZW1lbnRzLmNvbmNhdChtMi5lbGVtZW50cyksXG4gICAgZmVhdHVyZXM6ICBtMS5mZWF0dXJlcy5jb25jYXQobTIuZmVhdHVyZXMpLFxuICAgIGJlaGF2aW9yczogbTEuYmVoYXZpb3JzLmNvbmNhdChtMi5iZWhhdmlvcnMpLFxuICB9O1xufVxuXG52YXIgRU1QVFlfTUVUQURBVEEgPSB7ZWxlbWVudHM6IFtdLCBmZWF0dXJlczogW10sIGJlaGF2aW9yczogW119O1xuXG4vKipcbiAqIFBhcnNlNSdzIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyc2VkIGh0bWwgZG9jdW1lbnRcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERvY3VtZW50QVNUXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogZXNwcmVlJ3MgcmVwcmVzZW50YXRpb24gb2YgYSBwYXJzZWQgaHRtbCBkb2N1bWVudFxuICogQHR5cGVkZWYge09iamVjdH0gSlNBU1RcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKi9cblxuLyoqXG4gKiBQYWNrYWdlIG9mIGEgcGFyc2VkIEpTIHNjcmlwdFxuICogQHR5cGVkZWYge09iamVjdH0gUGFyc2VkSlNcbiAqIEBwcm9wZXJ0eSB7SlNBU1R9IGFzdCBUaGUgc2NyaXB0J3MgQVNUXG4gKiBAcHJvcGVydHkge0RvY3VtZW50QVNUfSBzY3JpcHRFbGVtZW50IElmIGlubGluZSwgdGhlIHNjcmlwdCdzIGNvbnRhaW5pbmcgdGFnLlxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBzaW5nbGUgcG9seW1lciBlbGVtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFbGVtZW50RGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBQb2x5bWVyIGZlYXR1cmUuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBGZWF0dXJlRGVzY3JpcHRvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuXG4vKipcbiAqIFRoZSBtZXRhZGF0YSBmb3IgYSBQb2x5bWVyIGJlaGF2aW9yIG1peGluLlxuICogQHR5cGVkZWYge09iamVjdH0gQmVoYXZpb3JEZXNjcmlwdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICovXG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIGZvciBhbGwgZmVhdHVyZXMgYW5kIGVsZW1lbnRzIGRlZmluZWQgaW4gb25lIGRvY3VtZW50XG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEb2N1bWVudERlc2NyaXB0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge0FycmF5PEVsZW1lbnREZXNjcmlwdG9yPn0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIGZyb20gdGhlIGRvY3VtZW50XG4gKiBAcHJvcGVydHkge0FycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn0gIGZlYXR1cmVzIFRoZSBmZWF0dXJlcyBmcm9tIHRoZSBkb2N1bWVudFxuICogQHByb3BlcnR5IHtBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59ICBiZWhhdmlvcnMgVGhlIGJlaGF2aW9ycyBmcm9tIHRoZSBkb2N1bWVudFxuICovXG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIG9mIGFuIGVudGlyZSBIVE1MIGRvY3VtZW50LCBpbiBwcm9taXNlcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFuYWx5emVkRG9jdW1lbnRcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaHJlZiBUaGUgdXJsIG9mIHRoZSBkb2N1bWVudC5cbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxQYXJzZWRJbXBvcnQ+fSAgaHRtbExvYWRlZCBUaGUgcGFyc2VkIHJlcHJlc2VudGF0aW9uIG9mXG4gKiAgICAgdGhlIGRvYy4gVXNlIHRoZSBgYXN0YCBwcm9wZXJ0eSB0byBnZXQgdGhlIGZ1bGwgYHBhcnNlNWAgYXN0XG4gKlxuICogQHByb3BlcnR5IHtQcm9taXNlPEFycmF5PHN0cmluZz4+fSBkZXBzTG9hZGVkIFJlc29sdmVzIHRvIHRoZSBsaXN0IG9mIHRoaXNcbiAqICAgICBEb2N1bWVudCdzIHRyYW5zaXRpdmUgaW1wb3J0IGRlcGVuZGVuY2llc1xuICpcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gZGVwSHJlZnMgVGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMgb2YgdGhlIGRvY3VtZW50LlxuICpcbiAqIEBwcm9wZXJ0eSB7UHJvbWlzZTxEb2N1bWVudERlc2NyaXB0b3I+fSBtZXRhZGF0YUxvYWRlZCBSZXNvbHZlcyB0byB0aGUgbGlzdCBvZlxuICogICAgIHRoaXMgRG9jdW1lbnQncyBpbXBvcnQgZGVwZW5kZW5jaWVzXG4gKi9cblxuLyoqXG4gKiBBIGRhdGFiYXNlIG9mIFBvbHltZXIgbWV0YWRhdGEgZGVmaW5lZCBpbiBIVE1MXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyT2YgaHlkcm9seXNpc1xuICogQHBhcmFtICB7Ym9vbGVhbn0gYXR0YWNoQVNUICBJZiB0cnVlLCBhdHRhY2ggYSBwYXJzZTUgY29tcGxpYW50IEFTVFxuICogQHBhcmFtICB7RmlsZUxvYWRlcj19IGxvYWRlciBBbiBvcHRpb25hbCBgRmlsZUxvYWRlcmAgdXNlZCB0byBsb2FkIGV4dGVybmFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlc1xuICovXG52YXIgQW5hbHl6ZXIgPSBmdW5jdGlvbiBBbmFseXplcihhdHRhY2hBU1QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIpIHtcbiAgdGhpcy5sb2FkZXIgPSBsb2FkZXI7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhbGwgZWxlbWVudHMgdGhlIGBBbmFseXplcmAgaGFzIG1ldGFkYXRhIGZvci5cbiAgICogQG1lbWJlciB7QXJyYXkuPEVsZW1lbnREZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZWxlbWVudHMgPSBbXTtcblxuICAvKipcbiAgICogQSB2aWV3IGludG8gYGVsZW1lbnRzYCwga2V5ZWQgYnkgdGFnIG5hbWUuXG4gICAqIEBtZW1iZXIge09iamVjdC48c3RyaW5nLEVsZW1lbnREZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZWxlbWVudHNCeVRhZ05hbWUgPSB7fTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIEFQSSBmZWF0dXJlcyBhZGRlZCB0byBgUG9seW1lci5CYXNlYCBlbmNvdW50ZXJlZCBieSB0aGVcbiAgICogYW5hbHl6ZXIuXG4gICAqIEBtZW1iZXIge0FycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn1cbiAgICovXG4gIHRoaXMuZmVhdHVyZXMgPSBbXTtcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9ycyBjb2xsZWN0ZWQgYnkgdGhlIGFuYWx5c2lzIHBhc3MuXG4gICAqXG4gICAqIEBtZW1iZXIge0FycmF5PEJlaGF2aW9yRGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmJlaGF2aW9ycyA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgYmVoYXZpb3JzIGNvbGxlY3RlZCBieSB0aGUgYW5hbHlzaXMgcGFzcyBieSBuYW1lLlxuICAgKlxuICAgKiBAbWVtYmVyIHtPYmplY3Q8c3RyaW5nLEJlaGF2aW9yRGVzY3JpcHRvcj59XG4gICAqL1xuICB0aGlzLmJlaGF2aW9yc0J5TmFtZSA9IHt9O1xuXG4gIC8qKlxuICAgKiBBIG1hcCwga2V5ZWQgYnkgYWJzb2x1dGUgcGF0aCwgb2YgRG9jdW1lbnQgbWV0YWRhdGEuXG4gICAqIEBtZW1iZXIge09iamVjdDxzdHJpbmcsQW5hbHl6ZWREb2N1bWVudD59XG4gICAqL1xuICB0aGlzLmh0bWwgPSB7fTtcblxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IHBhdGgsIG9mIEhUTUwgZG9jdW1lbnQgQVNUcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHRoaXMucGFyc2VkRG9jdW1lbnRzID0ge307XG5cbiAgLyoqXG4gICAqIEEgbWFwLCBrZXllZCBieSBwYXRoLCBvZiBKUyBzY3JpcHQgQVNUcy5cbiAgICpcbiAgICogSWYgdGhlIHBhdGggaXMgYW4gSFRNTCBmaWxlIHdpdGggbXVsdGlwbGUgc2NyaXB0cywgdGhlIGVudHJ5IHdpbGwgYmUgYW4gYXJyYXkgb2Ygc2NyaXB0cy5cbiAgICpcbiAgICogQHR5cGUge09iamVjdDxzdHJpbmcsQXJyYXk8UGFyc2VkSlM+Pn1cbiAgICovXG4gIHRoaXMucGFyc2VkU2NyaXB0cyA9IHt9O1xuXG5cblxuICAvKipcbiAgICogQSBtYXAsIGtleWVkIGJ5IHBhdGgsIG9mIGRvY3VtZW50IGNvbnRlbnQuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB0aGlzLl9jb250ZW50ID0ge307XG59O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBBbmFseXplci5hbmFsenllYFxuICogQHR5cGVkZWYge09iamVjdH0gTG9hZE9wdGlvbnNcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vQW5ub3RhdGlvbnMgV2hldGhlciBgYW5ub3RhdGUoKWAgc2hvdWxkIGJlIHNraXBwZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNsZWFuIFdoZXRoZXIgdGhlIGdlbmVyYXRlZCBkZXNjcmlwdG9ycyBzaG91bGQgYmUgY2xlYW5lZFxuICogICAgIG9mIHJlZHVuZGFudCBkYXRhLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbihzdHJpbmcpOiBib29sZWFufSBmaWx0ZXIgQSBwcmVkaWNhdGUgZnVuY3Rpb24gdGhhdFxuICogICAgIGluZGljYXRlcyB3aGljaCBmaWxlcyBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgbG9hZGVyLiBCeSBkZWZhdWx0IGFsbFxuICogICAgIGZpbGVzIG5vdCBsb2NhdGVkIHVuZGVyIHRoZSBkaXJuYW1lIG9mIGBocmVmYCB3aWxsIGJlIGlnbm9yZWQuXG4gKi9cblxuLyoqXG4gKiBTaG9ydGhhbmQgZm9yIHRyYW5zaXRpdmVseSBsb2FkaW5nIGFuZCBwcm9jZXNzaW5nIGFsbCBpbXBvcnRzIGJlZ2lubmluZyBhdFxuICogYGhyZWZgLlxuICpcbiAqIEluIG9yZGVyIHRvIHByb3Blcmx5IGZpbHRlciBwYXRocywgYGhyZWZgIF9tdXN0XyBiZSBhbiBhYnNvbHV0ZSBVUkkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhyZWYgVGhlIHJvb3QgaW1wb3J0IHRvIGJlZ2luIGxvYWRpbmcgZnJvbS5cbiAqIEBwYXJhbSB7TG9hZE9wdGlvbnM9fSBvcHRpb25zIEFueSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSBsb2FkLlxuICogQHJldHVybiB7UHJvbWlzZTxBbmFseXplcj59IEEgcHJvbWlzZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIGBocmVmYCBhbmQgaXRzXG4gKiAgICAgZGVwZW5kZW5jaWVzIGhhdmUgYmVlbiBsb2FkZWQgYW5kIGFuYWx5emVkLlxuICovXG5BbmFseXplci5hbmFseXplID0gZnVuY3Rpb24gYW5hbHl6ZShocmVmLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyIHx8IF9kZWZhdWx0RmlsdGVyKGhyZWYpO1xuXG4gIHZhciBsb2FkZXIgPSBuZXcgRmlsZUxvYWRlcigpO1xuICB2YXIgUHJpbWFyeVJlc29sdmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgP1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgnLi9sb2FkZXIvZnMtcmVzb2x2ZXInKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKCcuL2xvYWRlci94aHItcmVzb2x2ZXInKTtcbiAgbG9hZGVyLmFkZFJlc29sdmVyKG5ldyBQcmltYXJ5UmVzb2x2ZXIob3B0aW9ucykpO1xuICBsb2FkZXIuYWRkUmVzb2x2ZXIobmV3IE5vb3BSZXNvbHZlcih7dGVzdDogb3B0aW9ucy5maWx0ZXJ9KSk7XG5cbiAgdmFyIGFuYWx5emVyID0gbmV3IHRoaXMobnVsbCwgbG9hZGVyKTtcbiAgcmV0dXJuIGFuYWx5emVyLm1ldGFkYXRhVHJlZShocmVmKS50aGVuKGZ1bmN0aW9uKHJvb3QpIHtcbiAgICBpZiAoIW9wdGlvbnMubm9Bbm5vdGF0aW9ucykge1xuICAgICAgYW5hbHl6ZXIuYW5ub3RhdGUoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY2xlYW4pIHtcbiAgICAgIGFuYWx5emVyLmNsZWFuKCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYW5hbHl6ZXIpO1xuICB9KTtcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihzdHJpbmcpOiBib29sZWFufVxuICovXG5mdW5jdGlvbiBfZGVmYXVsdEZpbHRlcihocmVmKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGxhc3QgYC9gIG9yIGBcXGAuXG4gIHZhciBiYXNlID0gaHJlZi5tYXRjaCgvXiguKj8pW15cXC9cXFxcXSokLylbMV07XG4gIHJldHVybiBmdW5jdGlvbih1cmkpIHtcbiAgICByZXR1cm4gdXJpLmluZGV4T2YoYmFzZSkgIT09IDA7XG4gIH07XG59XG5cbkFuYWx5emVyLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gbG9hZChocmVmKSB7XG4gIHJldHVybiB0aGlzLmxvYWRlci5yZXF1ZXN0KGhyZWYpLnRoZW4oZnVuY3Rpb24oY29udGVudCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRbaHJlZl0gPSBjb250ZW50O1xuICAgICAgICByZXNvbHZlKHRoaXMuX3BhcnNlSFRNTChjb250ZW50LCBocmVmKSk7XG4gICAgICB9LmJpbmQodGhpcyksIDApO1xuICAgIH0uYmluZCh0aGlzKSkuY2F0Y2goZnVuY3Rpb24oZXJyKXtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwcm9jZXNzaW5nIGRvY3VtZW50IGF0IFwiICsgaHJlZik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gYEFuYWx5emVkRG9jdW1lbnRgIHJlcHJlc2VudGluZyB0aGUgcHJvdmlkZWQgZG9jdW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gIHtzdHJpbmd9IGh0bWxJbXBvcnQgUmF3IHRleHQgb2YgYW4gSFRNTCBkb2N1bWVudFxuICogQHBhcmFtICB7c3RyaW5nfSBocmVmICAgICAgIFRoZSBkb2N1bWVudCdzIFVSTC5cbiAqIEByZXR1cm4ge0FuYWx5emVkRG9jdW1lbnR9ICAgICAgIEFuICBgQW5hbHl6ZWREb2N1bWVudGBcbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLl9wYXJzZUhUTUwgPSBmdW5jdGlvbiBfcGFyc2VIVE1MKGh0bWxJbXBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYpIHtcbiAgaWYgKGhyZWYgaW4gdGhpcy5odG1sKSB7XG4gICAgcmV0dXJuIHRoaXMuaHRtbFtocmVmXTtcbiAgfVxuICB2YXIgZGVwc0xvYWRlZCA9IFtdO1xuICB2YXIgZGVwSHJlZnMgPSBbXTtcbiAgdmFyIG1ldGFkYXRhTG9hZGVkID0gUHJvbWlzZS5yZXNvbHZlKEVNUFRZX01FVEFEQVRBKTtcbiAgdmFyIHBhcnNlZDtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBpbXBvcnRQYXJzZShodG1sSW1wb3J0LCBocmVmKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyEnKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgdmFyIGh0bWxMb2FkZWQgPSBQcm9taXNlLnJlc29sdmUocGFyc2VkKTtcbiAgaWYgKHBhcnNlZC5zY3JpcHQpIHtcbiAgICBtZXRhZGF0YUxvYWRlZCA9IHRoaXMuX3Byb2Nlc3NTY3JpcHRzKHBhcnNlZC5zY3JpcHQsIGhyZWYpO1xuICB9XG4gIHZhciBjb21tZW50VGV4dCA9IHBhcnNlZC5jb21tZW50Lm1hcChmdW5jdGlvbihjb21tZW50KXtcbiAgICByZXR1cm4gZG9tNS5nZXRUZXh0Q29udGVudChjb21tZW50KTtcbiAgfSk7XG4gIHZhciBwc2V1ZG9FbGVtZW50cyA9IGRvY3MucGFyc2VQc2V1ZG9FbGVtZW50cyhjb21tZW50VGV4dCk7XG4gIHBzZXVkb0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCl7XG4gICAgZWxlbWVudC5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgdGhpcy5lbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIHRoaXMuZWxlbWVudHNCeVRhZ05hbWVbZWxlbWVudC5pc10gPSBlbGVtZW50O1xuICB9LmJpbmQodGhpcykpO1xuICBtZXRhZGF0YUxvYWRlZCA9IG1ldGFkYXRhTG9hZGVkLnRoZW4oZnVuY3Rpb24obWV0YWRhdGEpe1xuICAgIHZhciBtZXRhZGF0YUVudHJ5ID0ge1xuICAgICAgZWxlbWVudHM6IHBzZXVkb0VsZW1lbnRzLFxuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgYmVoYXZpb3JzOiBbXVxuICAgIH07XG4gICAgcmV0dXJuIFttZXRhZGF0YSwgbWV0YWRhdGFFbnRyeV0ucmVkdWNlKHJlZHVjZU1ldGFkYXRhKTtcbiAgfSk7XG4gIGRlcHNMb2FkZWQucHVzaChtZXRhZGF0YUxvYWRlZCk7XG5cblxuICBpZiAodGhpcy5sb2FkZXIpIHtcbiAgICB2YXIgYmFzZVVyaSA9IGhyZWY7XG4gICAgaWYgKHBhcnNlZC5iYXNlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJPbmx5IG9uZSBiYXNlIHRhZyBwZXIgZG9jdW1lbnQhXCIpO1xuICAgICAgdGhyb3cgXCJNdWx0aXBsZSBiYXNlIHRhZ3MgaW4gXCIgKyBocmVmO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkLmJhc2UubGVuZ3RoID09IDEpIHtcbiAgICAgIHZhciBiYXNlSHJlZiA9IGRvbTUuZ2V0QXR0cmlidXRlKHBhcnNlZC5iYXNlWzBdLCBcImhyZWZcIik7XG4gICAgICBpZiAoYmFzZUhyZWYpIHtcbiAgICAgICAgYmFzZUhyZWYgPSBiYXNlSHJlZiArIFwiL1wiO1xuICAgICAgICBiYXNlVXJpID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgYmFzZUhyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZWQuaW1wb3J0LmZvckVhY2goZnVuY3Rpb24obGluaykge1xuICAgICAgdmFyIGxpbmt1cmwgPSBkb201LmdldEF0dHJpYnV0ZShsaW5rLCAnaHJlZicpO1xuICAgICAgaWYgKGxpbmt1cmwpIHtcbiAgICAgICAgdmFyIHJlc29sdmVkVXJsID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgbGlua3VybCk7XG4gICAgICAgIGRlcEhyZWZzLnB1c2gocmVzb2x2ZWRVcmwpO1xuICAgICAgICBkZXBzTG9hZGVkLnB1c2godGhpcy5fZGVwZW5kZW5jaWVzTG9hZGVkRm9yKHJlc29sdmVkVXJsLCBocmVmKSk7XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICBwYXJzZWQuc3R5bGUuZm9yRWFjaChmdW5jdGlvbihzdHlsZUVsZW1lbnQpIHtcbiAgICAgIGlmIChwb2x5bWVyRXh0ZXJuYWxTdHlsZShzdHlsZUVsZW1lbnQpKSB7XG4gICAgICAgIHZhciBzdHlsZUhyZWYgPSBkb201LmdldEF0dHJpYnV0ZShzdHlsZUVsZW1lbnQsICdocmVmJyk7XG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgc3R5bGVIcmVmID0gdXJsLnJlc29sdmUoYmFzZVVyaSwgc3R5bGVIcmVmKTtcbiAgICAgICAgICBkZXBzTG9hZGVkLnB1c2godGhpcy5sb2FkZXIucmVxdWVzdChzdHlsZUhyZWYpLnRoZW4oZnVuY3Rpb24oY29udGVudCl7XG4gICAgICAgICAgICB0aGlzLl9jb250ZW50W3N0eWxlSHJlZl0gPSBjb250ZW50O1xuICAgICAgICAgIH0uYmluZCh0aGlzKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgfVxuICBkZXBzTG9hZGVkID0gUHJvbWlzZS5hbGwoZGVwc0xvYWRlZClcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oKSB7cmV0dXJuIGRlcEhyZWZzO30pXG4gICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHt0aHJvdyBlcnI7fSk7XG4gIHRoaXMucGFyc2VkRG9jdW1lbnRzW2hyZWZdID0gcGFyc2VkLmFzdDtcbiAgdGhpcy5odG1sW2hyZWZdID0ge1xuICAgICAgaHJlZjogaHJlZixcbiAgICAgIGh0bWxMb2FkZWQ6IGh0bWxMb2FkZWQsXG4gICAgICBtZXRhZGF0YUxvYWRlZDogbWV0YWRhdGFMb2FkZWQsXG4gICAgICBkZXBIcmVmczogZGVwSHJlZnMsXG4gICAgICBkZXBzTG9hZGVkOiBkZXBzTG9hZGVkXG4gIH07XG4gIHJldHVybiB0aGlzLmh0bWxbaHJlZl07XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX3Byb2Nlc3NTY3JpcHRzID0gZnVuY3Rpb24gX3Byb2Nlc3NTY3JpcHRzKHNjcmlwdHMsIGhyZWYpIHtcbiAgdmFyIHNjcmlwdFByb21pc2VzID0gW107XG4gIHNjcmlwdHMuZm9yRWFjaChmdW5jdGlvbihzY3JpcHQpIHtcbiAgICBzY3JpcHRQcm9taXNlcy5wdXNoKHRoaXMuX3Byb2Nlc3NTY3JpcHQoc2NyaXB0LCBocmVmKSk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHJldHVybiBQcm9taXNlLmFsbChzY3JpcHRQcm9taXNlcykudGhlbihmdW5jdGlvbihtZXRhZGF0YUxpc3QpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0LnJlZHVjZShyZWR1Y2VNZXRhZGF0YSwgRU1QVFlfTUVUQURBVEEpO1xuICB9KTtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5fcHJvY2Vzc1NjcmlwdCA9IGZ1bmN0aW9uIF9wcm9jZXNzU2NyaXB0KHNjcmlwdCwgaHJlZikge1xuICB2YXIgc3JjID0gZG9tNS5nZXRBdHRyaWJ1dGUoc2NyaXB0LCAnc3JjJyk7XG4gIHZhciBwYXJzZWRKcztcbiAgaWYgKCFzcmMpIHtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkSnMgPSBqc1BhcnNlKChzY3JpcHQuY2hpbGROb2Rlcy5sZW5ndGgpID8gc2NyaXB0LmNoaWxkTm9kZXNbMF0udmFsdWUgOiAnJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBGaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGxpbmUgbnVtYmVyIGZvciB0aGUgZXJyb3IuXG4gICAgICB2YXIgbGluZSA9IDA7XG4gICAgICB2YXIgY29sID0gMDtcbiAgICAgIGlmIChzY3JpcHQuX19vd25lckRvY3VtZW50ICYmIHNjcmlwdC5fX293bmVyRG9jdW1lbnQgPT0gaHJlZikge1xuICAgICAgICBsaW5lID0gc2NyaXB0Ll9fbG9jYXRpb25EZXRhaWwubGluZSAtIDE7XG4gICAgICAgIGNvbCA9IHNjcmlwdC5fX2xvY2F0aW9uRGV0YWlsLmxpbmUgLSAxO1xuICAgICAgfVxuICAgICAgbGluZSArPSBlcnIubGluZU51bWJlcjtcbiAgICAgIGNvbCArPSBlcnIuY29sdW1uO1xuICAgICAgdmFyIG1lc3NhZ2UgPSBcIkVycm9yIHBhcnNpbmcgc2NyaXB0IGluIFwiICsgaHJlZiArIFwiIGF0IFwiICsgbGluZSArIFwiOlwiICsgY29sO1xuICAgICAgbWVzc2FnZSArPSBcIlxcblwiICsgZXJyLnN0YWNrO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5lbGVtZW50cykge1xuICAgICAgcGFyc2VkSnMuZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2NyaXB0RWxlbWVudCA9IHNjcmlwdDtcbiAgICAgICAgZWxlbWVudC5jb250ZW50SHJlZiA9IGhyZWY7XG4gICAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgaWYgKGVsZW1lbnQuaXMgaW4gdGhpcy5lbGVtZW50c0J5VGFnTmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSWdub3JpbmcgZHVwbGljYXRlIGVsZW1lbnQgZGVmaW5pdGlvbjogJyArIGVsZW1lbnQuaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZWxlbWVudHNCeVRhZ05hbWVbZWxlbWVudC5pc10gPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkSnMuZmVhdHVyZXMpIHtcbiAgICAgIHBhcnNlZEpzLmZlYXR1cmVzLmZvckVhY2goZnVuY3Rpb24oZmVhdHVyZSl7XG4gICAgICAgIGZlYXR1cmUuY29udGVudEhyZWYgPSBocmVmO1xuICAgICAgICBmZWF0dXJlLnNjcmlwdEVsZW1lbnQgPSBzY3JpcHQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmVhdHVyZXMgPSB0aGlzLmZlYXR1cmVzLmNvbmNhdChwYXJzZWRKcy5mZWF0dXJlcyk7XG4gICAgfVxuICAgIGlmIChwYXJzZWRKcy5iZWhhdmlvcnMpIHtcbiAgICAgIHBhcnNlZEpzLmJlaGF2aW9ycy5mb3JFYWNoKGZ1bmN0aW9uKGJlaGF2aW9yKXtcbiAgICAgICAgYmVoYXZpb3IuY29udGVudEhyZWYgPSBocmVmO1xuICAgICAgICB0aGlzLmJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvci5pc10gPSBiZWhhdmlvcjtcbiAgICAgICAgdGhpcy5iZWhhdmlvcnNCeU5hbWVbYmVoYXZpb3Iuc3ltYm9sXSA9IGJlaGF2aW9yO1xuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuYmVoYXZpb3JzID0gdGhpcy5iZWhhdmlvcnMuY29uY2F0KHBhcnNlZEpzLmJlaGF2aW9ycyk7XG4gICAgfVxuICAgIGlmICghT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJzZWRTY3JpcHRzLCBocmVmKSkge1xuICAgICAgdGhpcy5wYXJzZWRTY3JpcHRzW2hyZWZdID0gW107XG4gICAgfVxuICAgIHZhciBzY3JpcHRFbGVtZW50O1xuICAgIGlmIChzY3JpcHQuX19vd25lckRvY3VtZW50ICYmIHNjcmlwdC5fX293bmVyRG9jdW1lbnQgPT0gaHJlZikge1xuICAgICAgc2NyaXB0RWxlbWVudCA9IHNjcmlwdDtcbiAgICB9XG4gICAgdGhpcy5wYXJzZWRTY3JpcHRzW2hyZWZdLnB1c2goe1xuICAgICAgYXN0OiBwYXJzZWRKcy5wYXJzZWRTY3JpcHQsXG4gICAgICBzY3JpcHRFbGVtZW50OiBzY3JpcHRFbGVtZW50XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcnNlZEpzO1xuICB9XG4gIGlmICh0aGlzLmxvYWRlcikge1xuICAgIHZhciByZXNvbHZlZFNyYyA9IHVybC5yZXNvbHZlKGhyZWYsIHNyYyk7XG4gICAgcmV0dXJuIHRoaXMubG9hZGVyLnJlcXVlc3QocmVzb2x2ZWRTcmMpLnRoZW4oZnVuY3Rpb24oY29udGVudCkge1xuICAgICAgdGhpcy5fY29udGVudFtyZXNvbHZlZFNyY10gPSBjb250ZW50O1xuICAgICAgdmFyIHJlc29sdmVkU2NyaXB0ID0gT2JqZWN0LmNyZWF0ZShzY3JpcHQpO1xuICAgICAgcmVzb2x2ZWRTY3JpcHQuY2hpbGROb2RlcyA9IFt7dmFsdWU6IGNvbnRlbnR9XTtcbiAgICAgIHJlc29sdmVkU2NyaXB0LmF0dHJzID0gcmVzb2x2ZWRTY3JpcHQuYXR0cnMuc2xpY2UoKTtcbiAgICAgIGRvbTUucmVtb3ZlQXR0cmlidXRlKHJlc29sdmVkU2NyaXB0LCAnc3JjJyk7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1NjcmlwdChyZXNvbHZlZFNjcmlwdCwgcmVzb2x2ZWRTcmMpO1xuICAgIH0uYmluZCh0aGlzKSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7dGhyb3cgZXJyO30pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRU1QVFlfTUVUQURBVEEpO1xuICB9XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX2RlcGVuZGVuY2llc0xvYWRlZEZvciA9IGZ1bmN0aW9uIF9kZXBlbmRlbmNpZXNMb2FkZWRGb3IoaHJlZiwgcm9vdCkge1xuICB2YXIgZm91bmQgPSB7fTtcbiAgaWYgKHJvb3QgIT09IHVuZGVmaW5lZCkge1xuICAgIGZvdW5kW3Jvb3RdID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fZ2V0RGVwZW5kZW5jaWVzKGhyZWYsIGZvdW5kKS50aGVuKGZ1bmN0aW9uKGRlcHMpIHtcbiAgICB2YXIgZGVwTWV0YWRhdGFMb2FkZWQgPSBbXTtcbiAgICB2YXIgZGVwUHJvbWlzZXMgPSBkZXBzLm1hcChmdW5jdGlvbihkZXBIcmVmKXtcbiAgICAgIHJldHVybiB0aGlzLmxvYWQoZGVwSHJlZikudGhlbihmdW5jdGlvbihodG1sTW9ub21lcikge1xuICAgICAgICByZXR1cm4gaHRtbE1vbm9tZXIubWV0YWRhdGFMb2FkZWQ7XG4gICAgICB9KTtcbiAgICB9LmJpbmQodGhpcykpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChkZXBQcm9taXNlcyk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG4vKipcbiAqIExpc3QgYWxsIHRoZSBodG1sIGRlcGVuZGVuY2llcyBmb3IgdGhlIGRvY3VtZW50IGF0IGBocmVmYC5cbiAqIEBwYXJhbSAge3N0cmluZ30gICAgICAgICAgICAgICAgICAgaHJlZiAgICAgIFRoZSBocmVmIHRvIGdldCBkZXBlbmRlbmNpZXMgZm9yLlxuICogQHBhcmFtICB7T2JqZWN0LjxzdHJpbmcsYm9vbGVhbj49fSBmb3VuZCAgICAgQW4gb2JqZWN0IGtleWVkIGJ5IFVSTCBvZiB0aGVcbiAqICAgICBhbHJlYWR5IHJlc29sdmVkIGRlcGVuZGVuY2llcy5cbiAqIEBwYXJhbSAge2Jvb2xlYW49fSAgICAgICAgICAgICAgICB0cmFuc2l0aXZlIFdoZXRoZXIgdG8gbG9hZCB0cmFuc2l0aXZlXG4gKiAgICAgZGVwZW5kZW5jaWVzLiBEZWZhdWx0cyB0byB0cnVlLlxuICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59ICBBIGxpc3Qgb2YgYWxsIHRoZSBodG1sIGRlcGVuZGVuY2llcy5cbiAqL1xuQW5hbHl6ZXIucHJvdG90eXBlLl9nZXREZXBlbmRlbmNpZXMgPSBmdW5jdGlvbiBfZ2V0RGVwZW5kZW5jaWVzKGhyZWYsIGZvdW5kLCB0cmFuc2l0aXZlKSB7XG4gIGlmIChmb3VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm91bmQgPSB7fTtcbiAgICBmb3VuZFtocmVmXSA9IHRydWU7XG4gIH1cbiAgaWYgKHRyYW5zaXRpdmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRyYW5zaXRpdmUgPSB0cnVlO1xuICB9XG4gIHZhciBkZXBzID0gW107XG4gIHJldHVybiB0aGlzLmxvYWQoaHJlZikudGhlbihmdW5jdGlvbihodG1sTW9ub21lcikge1xuICAgIHZhciB0cmFuc2l0aXZlRGVwcyA9IFtdO1xuICAgIGh0bWxNb25vbWVyLmRlcEhyZWZzLmZvckVhY2goZnVuY3Rpb24oZGVwSHJlZil7XG4gICAgICBpZiAoZm91bmRbZGVwSHJlZl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVwcy5wdXNoKGRlcEhyZWYpO1xuICAgICAgZm91bmRbZGVwSHJlZl0gPSB0cnVlO1xuICAgICAgaWYgKHRyYW5zaXRpdmUpIHtcbiAgICAgICAgdHJhbnNpdGl2ZURlcHMucHVzaCh0aGlzLl9nZXREZXBlbmRlbmNpZXMoZGVwSHJlZiwgZm91bmQpKTtcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbCh0cmFuc2l0aXZlRGVwcyk7XG4gIH0uYmluZCh0aGlzKSkudGhlbihmdW5jdGlvbih0cmFuc2l0aXZlRGVwcykge1xuICAgIHZhciBhbGxkZXBzID0gdHJhbnNpdGl2ZURlcHMucmVkdWNlKGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICB9LCBbXSkuY29uY2F0KGRlcHMpO1xuICAgIHJldHVybiBhbGxkZXBzO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIG1hdGNoZXNEb2N1bWVudEZvbGRlcihkZXNjcmlwdG9yLCBocmVmKSB7XG4gIGlmICghZGVzY3JpcHRvci5jb250ZW50SHJlZikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgZGVzY3JpcHRvckRvYyA9IHVybC5wYXJzZShkZXNjcmlwdG9yLmNvbnRlbnRIcmVmKTtcbiAgaWYgKCFkZXNjcmlwdG9yRG9jIHx8ICFkZXNjcmlwdG9yRG9jLnBhdGhuYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBzZWFyY2hEb2MgPSB1cmwucGFyc2UoaHJlZik7XG4gIGlmICghc2VhcmNoRG9jIHx8ICFzZWFyY2hEb2MucGF0aG5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHNlYXJjaFBhdGggPSBzZWFyY2hEb2MucGF0aG5hbWU7XG4gIHZhciBsYXN0U2xhc2ggPSBzZWFyY2hQYXRoLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgaWYgKGxhc3RTbGFzaCA+IDApIHtcbiAgICBzZWFyY2hQYXRoID0gc2VhcmNoUGF0aC5zbGljZSgwLCBsYXN0U2xhc2gpO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yRG9jLnBhdGhuYW1lLmluZGV4T2Yoc2VhcmNoUGF0aCkgPT09IDA7XG59XG5cbkFuYWx5emVyLnByb3RvdHlwZS5lbGVtZW50c0ZvckZvbGRlciA9IGZ1bmN0aW9uIGVsZW1lbnRzRm9yRm9sZGVyKGhyZWYpIHtcbiAgcmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpe1xuICAgIHJldHVybiBtYXRjaGVzRG9jdW1lbnRGb2xkZXIoZWxlbWVudCwgaHJlZik7XG4gIH0pO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLmJlaGF2aW9yc0ZvckZvbGRlciA9IGZ1bmN0aW9uIGJlaGF2aW9yc0ZvckZvbGRlcihocmVmKSB7XG4gIHJldHVybiB0aGlzLmJlaGF2aW9ycy5maWx0ZXIoZnVuY3Rpb24oYmVoYXZpb3Ipe1xuICAgIHJldHVybiBtYXRjaGVzRG9jdW1lbnRGb2xkZXIoYmVoYXZpb3IsIGhyZWYpO1xuICB9KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIFBPSk8gcmVwcmVzZW50YXRpb24gb2YgdGhlIGltcG9ydFxuICogdHJlZSwgaW4gYSBmb3JtYXQgdGhhdCBtYWludGFpbnMgdGhlIG9yZGVyaW5nIG9mIHRoZSBIVE1MIGltcG9ydHMgc3BlYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIHRoZSBpbXBvcnQgdG8gZ2V0IG1ldGFkYXRhIGZvci5cbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5tZXRhZGF0YVRyZWUgPSBmdW5jdGlvbiBtZXRhZGF0YVRyZWUoaHJlZikge1xuICByZXR1cm4gdGhpcy5sb2FkKGhyZWYpLnRoZW4oZnVuY3Rpb24obW9ub21lcil7XG4gICAgdmFyIGxvYWRlZEhyZWZzID0ge307XG4gICAgbG9hZGVkSHJlZnNbaHJlZl0gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVRyZWUobW9ub21lciwgbG9hZGVkSHJlZnMpO1xuICB9LmJpbmQodGhpcykpO1xufTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9tZXRhZGF0YVRyZWUgPSBmdW5jdGlvbiBfbWV0YWRhdGFUcmVlKGh0bWxNb25vbWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZEhyZWZzKSB7XG4gIGlmIChsb2FkZWRIcmVmcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbG9hZGVkSHJlZnMgPSB7fTtcbiAgfVxuICByZXR1cm4gaHRtbE1vbm9tZXIubWV0YWRhdGFMb2FkZWQudGhlbihmdW5jdGlvbihtZXRhZGF0YSkge1xuICAgIG1ldGFkYXRhID0ge1xuICAgICAgZWxlbWVudHM6IG1ldGFkYXRhLmVsZW1lbnRzLFxuICAgICAgZmVhdHVyZXM6IG1ldGFkYXRhLmZlYXR1cmVzLFxuICAgICAgaHJlZjogaHRtbE1vbm9tZXIuaHJlZlxuICAgIH07XG4gICAgcmV0dXJuIGh0bWxNb25vbWVyLmRlcHNMb2FkZWQudGhlbihmdW5jdGlvbihocmVmcykge1xuICAgICAgdmFyIGRlcE1ldGFkYXRhID0gW107XG4gICAgICBocmVmcy5mb3JFYWNoKGZ1bmN0aW9uKGhyZWYpIHtcbiAgICAgICAgdmFyIG1ldGFkYXRhUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgaWYgKGRlcE1ldGFkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBtZXRhZGF0YVByb21pc2UgPSBkZXBNZXRhZGF0YVtkZXBNZXRhZGF0YS5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBtZXRhZGF0YVByb21pc2UgPSBtZXRhZGF0YVByb21pc2UudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBpZiAoIWxvYWRlZEhyZWZzW2hyZWZdKSB7XG4gICAgICAgICAgICBsb2FkZWRIcmVmc1tocmVmXSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFUcmVlKHRoaXMuaHRtbFtocmVmXSwgbG9hZGVkSHJlZnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIGRlcE1ldGFkYXRhLnB1c2gobWV0YWRhdGFQcm9taXNlKTtcbiAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZGVwTWV0YWRhdGEpLnRoZW4oZnVuY3Rpb24oaW1wb3J0TWV0YWRhdGEpIHtcbiAgICAgICAgbWV0YWRhdGEuaW1wb3J0cyA9IGltcG9ydE1ldGFkYXRhO1xuICAgICAgICByZXR1cm4gaHRtbE1vbm9tZXIuaHRtbExvYWRlZC50aGVuKGZ1bmN0aW9uKHBhcnNlZEh0bWwpIHtcbiAgICAgICAgICBtZXRhZGF0YS5odG1sID0gcGFyc2VkSHRtbDtcbiAgICAgICAgICBpZiAobWV0YWRhdGEuZWxlbWVudHMpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLmVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgICBhdHRhY2hEb21Nb2R1bGUocGFyc2VkSHRtbCwgZWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5mdW5jdGlvbiBtYXRjaGluZ0ltcG9ydChpbXBvcnRFbGVtZW50KSB7XG4gIHZhciBtYXRjaGVzVGFnID0gZG9tNS5wcmVkaWNhdGVzLmhhc1RhZ05hbWUoaW1wb3J0RWxlbWVudC50YWdOYW1lKTtcbiAgdmFyIG1hdGNoZXNIcmVmID0gZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgnaHJlZicsIGRvbTUuZ2V0QXR0cmlidXRlKGltcG9ydEVsZW1lbnQsICdocmVmJykpO1xuICB2YXIgbWF0Y2hlc1JlbCA9IGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3JlbCcsIGRvbTUuZ2V0QXR0cmlidXRlKGltcG9ydEVsZW1lbnQsICdyZWwnKSk7XG4gIHJldHVybiBkb201LnByZWRpY2F0ZXMuQU5EKG1hdGNoZXNUYWcsIG1hdGNoZXNIcmVmLCBtYXRjaGVzUmVsKTtcbn1cblxuLy8gVE9ETyhham8pOiBSZWZhY3RvciBvdXQgb2YgdnVsY2FuaXplIGludG8gZG9tNS5cbnZhciBwb2x5bWVyRXh0ZXJuYWxTdHlsZSA9IGRvbTUucHJlZGljYXRlcy5BTkQoXG4gIGRvbTUucHJlZGljYXRlcy5oYXNUYWdOYW1lKCdsaW5rJyksXG4gIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3JlbCcsICdpbXBvcnQnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgndHlwZScsICdjc3MnKVxuKTtcblxudmFyIGV4dGVybmFsU2NyaXB0ID0gZG9tNS5wcmVkaWNhdGVzLkFORChcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc1RhZ05hbWUoJ3NjcmlwdCcpLFxuICBkb201LnByZWRpY2F0ZXMuaGFzQXR0cignc3JjJylcbik7XG5cbnZhciBpc0h0bWxJbXBvcnROb2RlID0gZG9tNS5wcmVkaWNhdGVzLkFORChcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc1RhZ05hbWUoJ2xpbmsnKSxcbiAgZG9tNS5wcmVkaWNhdGVzLmhhc0F0dHJWYWx1ZSgncmVsJywgJ2ltcG9ydCcpLFxuICBkb201LnByZWRpY2F0ZXMuTk9UKFxuICAgIGRvbTUucHJlZGljYXRlcy5oYXNBdHRyVmFsdWUoJ3R5cGUnLCAnY3NzJylcbiAgKVxuKTtcblxuQW5hbHl6ZXIucHJvdG90eXBlLl9pbmxpbmVTdHlsZXMgPSBmdW5jdGlvbiBfaW5saW5lU3R5bGVzKGFzdCwgaHJlZikge1xuICB2YXIgY3NzTGlua3MgPSBkb201LnF1ZXJ5QWxsKGFzdCwgcG9seW1lckV4dGVybmFsU3R5bGUpO1xuICBjc3NMaW5rcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmspIHtcbiAgICB2YXIgbGlua0hyZWYgPSBkb201LmdldEF0dHJpYnV0ZShsaW5rLCAnaHJlZicpO1xuICAgIHZhciB1cmkgPSB1cmwucmVzb2x2ZShocmVmLCBsaW5rSHJlZik7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9jb250ZW50W3VyaV07XG4gICAgdmFyIHN0eWxlID0gZG9tNS5jb25zdHJ1Y3RvcnMuZWxlbWVudCgnc3R5bGUnKTtcbiAgICBkb201LnNldFRleHRDb250ZW50KHN0eWxlLCAnXFxuJyArIGNvbnRlbnQgKyAnXFxuJyk7XG4gICAgZG9tNS5yZXBsYWNlKGxpbmssIHN0eWxlKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgcmV0dXJuIGNzc0xpbmtzLmxlbmd0aCA+IDA7XG59O1xuXG5BbmFseXplci5wcm90b3R5cGUuX2lubGluZVNjcmlwdHMgPSBmdW5jdGlvbiBfaW5saW5lU2NyaXB0cyhhc3QsIGhyZWYpIHtcbiAgdmFyIHNjcmlwdHMgPSBkb201LnF1ZXJ5QWxsKGFzdCwgZXh0ZXJuYWxTY3JpcHQpO1xuICBzY3JpcHRzLmZvckVhY2goZnVuY3Rpb24oc2NyaXB0KSB7XG4gICAgdmFyIHNjcmlwdEhyZWYgPSBkb201LmdldEF0dHJpYnV0ZShzY3JpcHQsICdzcmMnKTtcbiAgICB2YXIgdXJpID0gdXJsLnJlc29sdmUoaHJlZiwgc2NyaXB0SHJlZik7XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9jb250ZW50W3VyaV07XG4gICAgdmFyIGlubGluZWQgPSBkb201LmNvbnN0cnVjdG9ycy5lbGVtZW50KCdzY3JpcHQnKTtcbiAgICBkb201LnNldFRleHRDb250ZW50KGlubGluZWQsICdcXG4nICsgY29udGVudCArICdcXG4nKTtcbiAgICBkb201LnJlcGxhY2Uoc2NyaXB0LCBpbmxpbmVkKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgcmV0dXJuIHNjcmlwdHMubGVuZ3RoID4gMDtcbn07XG5cbkFuYWx5emVyLnByb3RvdHlwZS5faW5saW5lSW1wb3J0cyA9IGZ1bmN0aW9uIF9pbmxpbmVJbXBvcnRzKGFzdCwgaHJlZiwgbG9hZGVkKSB7XG4gIHZhciBpbXBvcnRzID0gZG9tNS5xdWVyeUFsbChhc3QsIGlzSHRtbEltcG9ydE5vZGUpO1xuICBpbXBvcnRzLmZvckVhY2goZnVuY3Rpb24oaHRtbEltcG9ydCkge1xuICAgIHZhciBpbXBvcnRIcmVmID0gZG9tNS5nZXRBdHRyaWJ1dGUoaHRtbEltcG9ydCwgJ2hyZWYnKTtcbiAgICB2YXIgdXJpID0gdXJsLnJlc29sdmUoaHJlZiwgaW1wb3J0SHJlZik7XG4gICAgaWYgKGxvYWRlZFt1cmldKSB7XG4gICAgICBkb201LnJlbW92ZShodG1sSW1wb3J0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGNvbnRlbnQgPSB0aGlzLmdldExvYWRlZEFzdCh1cmksIGxvYWRlZCk7XG4gICAgZG9tNS5yZXBsYWNlKGh0bWxJbXBvcnQsIGNvbnRlbnQpO1xuICB9LmJpbmQodGhpcykpO1xuICByZXR1cm4gaW1wb3J0cy5sZW5ndGggPiAwO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gYSBmb3JtIG9mIHRoZSBBU1Qgd2l0aCBhbGwgbGlua3MgcmVwbGFjZWRcbiAqIHdpdGggdGhlIGRvY3VtZW50IHRoZXkgbGluayB0by4gLmNzcyBhbmQgLnNjcmlwdCBmaWxlcyBiZWNvbWUgJmx0O3N0eWxlJmd0OyBhbmRcbiAqICZsdDtzY3JpcHQmZ3Q7LCByZXNwZWN0aXZlbHkuXG4gKlxuICogVGhlIGVsZW1lbnRzIGluIHRoZSBsb2FkZWQgZG9jdW1lbnQgYXJlIHVubW9kaWZpZWQgZnJvbSB0aGVpciBvcmlnaW5hbFxuICogZG9jdW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBocmVmIFRoZSBkb2N1bWVudCB0byBsb2FkLlxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZyxib29sZWFuPj19IGxvYWRlZCBBbiBvYmplY3Qga2V5ZWQgYnkgYWxyZWFkeSBsb2FkZWQgZG9jdW1lbnRzLlxuICogQHJldHVybiB7UHJvbWlzZS48RG9jdW1lbnRBU1Q+fVxuICovXG5BbmFseXplci5wcm90b3R5cGUuZ2V0TG9hZGVkQXN0ID0gZnVuY3Rpb24gZ2V0TG9hZGVkQXN0KGhyZWYsIGxvYWRlZCkge1xuICBpZiAoIWxvYWRlZCkge1xuICAgIGxvYWRlZCA9IHt9O1xuICB9XG4gIGxvYWRlZFtocmVmXSA9IHRydWU7XG4gIHZhciBwYXJzZWREb2N1bWVudCA9IHRoaXMucGFyc2VkRG9jdW1lbnRzW2hyZWZdO1xuICB2YXIgYW5hbHl6ZWREb2N1bWVudCA9IHRoaXMuaHRtbFtocmVmXTtcbiAgdmFyIGFzdENvcHkgPSBkb201LnBhcnNlKGRvbTUuc2VyaWFsaXplKHBhcnNlZERvY3VtZW50KSk7XG4gIC8vIFdoZW5ldmVyIHdlIGlubGluZSBzb21ldGhpbmcsIHJlc2V0IGlubGluZWQgdG8gdHJ1ZSB0byBrbm93IHRoYXQgYW5vYXRoZXJcbiAgLy8gaW5saW5pbmcgcGFzcyBpcyBuZWVkZWQ7XG4gIHRoaXMuX2lubGluZVN0eWxlcyhhc3RDb3B5LCBocmVmKTtcbiAgdGhpcy5faW5saW5lU2NyaXB0cyhhc3RDb3B5LCBocmVmKTtcbiAgdGhpcy5faW5saW5lSW1wb3J0cyhhc3RDb3B5LCBocmVmLCBsb2FkZWQpO1xuICByZXR1cm4gYXN0Q29weTtcbn07XG5cbi8qKlxuICogQ2FsbHMgYGRvbTUubm9kZVdhbGtBbGxgIG9uIGVhY2ggZG9jdW1lbnQgdGhhdCBgQW5heXpsZXJgIGhhcyBsYW9kZWQuXG4gKiBAcGFyYW0gIHtPYmplY3R9IHByZWRpY2F0ZSBBIGRvbTUgcHJlZGljYXRlLlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5BbmFseXplci5wcm90b3R5cGUubm9kZVdhbGtEb2N1bWVudHMgPSBmdW5jdGlvbiBub2RlV2Fsa0RvY3VtZW50cyhwcmVkaWNhdGUpIHtcbiAgZm9yICh2YXIgaHJlZiBpbiB0aGlzLnBhcnNlZERvY3VtZW50cykge1xuICAgIHZhciBtYXRjaCA9IGRvbTUubm9kZVdhbGsodGhpcy5wYXJzZWREb2N1bWVudHNbaHJlZl0sIHByZWRpY2F0ZSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBDYWxscyBgZG9tNS5ub2RlV2Fsa0FsbGAgb24gZWFjaCBkb2N1bWVudCB0aGF0IGBBbmF5emxlcmAgaGFzIGxhb2RlZC5cbiAqIEBwYXJhbSAge09iamVjdH0gcHJlZGljYXRlIEEgZG9tNSBwcmVkaWNhdGUuXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbkFuYWx5emVyLnByb3RvdHlwZS5ub2RlV2Fsa0FsbERvY3VtZW50cyA9IGZ1bmN0aW9uIG5vZGVXYWxrRG9jdW1lbnRzKHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICBmb3IgKHZhciBocmVmIGluIHRoaXMucGFyc2VkRG9jdW1lbnRzKSB7XG4gICAgdmFyIG5ld05vZGVzID0gZG9tNS5ub2RlV2Fsa0FsbCh0aGlzLnBhcnNlZERvY3VtZW50c1tocmVmXSwgcHJlZGljYXRlKTtcbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQobmV3Tm9kZXMpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqIEFubm90YXRlcyBhbGwgbG9hZGVkIG1ldGFkYXRhIHdpdGggaXRzIGRvY3VtZW50YXRpb24uICovXG5BbmFseXplci5wcm90b3R5cGUuYW5ub3RhdGUgPSBmdW5jdGlvbiBhbm5vdGF0ZSgpIHtcbiAgaWYgKHRoaXMuZmVhdHVyZXMubGVuZ3RoID4gMCkge1xuICAgIHZhciBmZWF0dXJlRWwgPSBkb2NzLmZlYXR1cmVFbGVtZW50KHRoaXMuZmVhdHVyZXMpO1xuICAgIHRoaXMuZWxlbWVudHMudW5zaGlmdChmZWF0dXJlRWwpO1xuICAgIHRoaXMuZWxlbWVudHNCeVRhZ05hbWVbZmVhdHVyZUVsLmlzXSA9IGZlYXR1cmVFbDtcbiAgfVxuICB2YXIgYmVoYXZpb3JzQnlOYW1lID0gdGhpcy5iZWhhdmlvcnNCeU5hbWU7XG4gIHZhciBlbGVtZW50SGVscGVyID0gZnVuY3Rpb24oZGVzY3JpcHRvcil7XG4gICAgZG9jcy5hbm5vdGF0ZUVsZW1lbnQoZGVzY3JpcHRvciwgYmVoYXZpb3JzQnlOYW1lKTtcbiAgfTtcbiAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGVsZW1lbnRIZWxwZXIpO1xuICB0aGlzLmJlaGF2aW9ycy5mb3JFYWNoKGVsZW1lbnRIZWxwZXIpOyAvLyBTYW1lIHNoYXBlLlxuICB0aGlzLmJlaGF2aW9ycy5mb3JFYWNoKGZ1bmN0aW9uKGJlaGF2aW9yKXtcbiAgICBpZiAoYmVoYXZpb3IuaXMgIT09IGJlaGF2aW9yLnN5bWJvbCAmJiBiZWhhdmlvci5zeW1ib2wpIHtcbiAgICAgIHRoaXMuYmVoYXZpb3JzQnlOYW1lW2JlaGF2aW9yLnN5bWJvbF0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xufTtcblxuZnVuY3Rpb24gYXR0YWNoRG9tTW9kdWxlKHBhcnNlZEltcG9ydCwgZWxlbWVudCkge1xuICB2YXIgZG9tTW9kdWxlcyA9IHBhcnNlZEltcG9ydFsnZG9tLW1vZHVsZSddO1xuICBmb3IgKHZhciBpID0gMCwgZG9tTW9kdWxlOyBpIDwgZG9tTW9kdWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGRvbU1vZHVsZSA9IGRvbU1vZHVsZXNbaV07XG4gICAgaWYgKGRvbTUuZ2V0QXR0cmlidXRlKGRvbU1vZHVsZSwgJ2lkJykgPT09IGVsZW1lbnQuaXMpIHtcbiAgICAgIGVsZW1lbnQuZG9tTW9kdWxlID0gZG9tTW9kdWxlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUmVtb3ZlcyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIHRoZSBjb2xsZWN0ZWQgZGVzY3JpcHRvcnMuICovXG5BbmFseXplci5wcm90b3R5cGUuY2xlYW4gPSBmdW5jdGlvbiBjbGVhbigpIHtcbiAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGRvY3MuY2xlYW5FbGVtZW50KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQW5hbHl6ZXI7XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW14cFlpOWhibUZzZVhwbGNpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRUJzYVdObGJuTmxYRzRnS2lCRGIzQjVjbWxuYUhRZ0tHTXBJREl3TVRVZ1ZHaGxJRkJ2YkhsdFpYSWdVSEp2YW1WamRDQkJkWFJvYjNKekxpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNvZ1ZHaHBjeUJqYjJSbElHMWhlU0J2Ym14NUlHSmxJSFZ6WldRZ2RXNWtaWElnZEdobElFSlRSQ0J6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdGMElHaDBkSEE2THk5d2IyeDViV1Z5TG1kcGRHaDFZaTVwYnk5TVNVTkZUbE5GTG5SNGRGeHVJQ29nVkdobElHTnZiWEJzWlhSbElITmxkQ0J2WmlCaGRYUm9iM0p6SUcxaGVTQmlaU0JtYjNWdVpDQmhkQ0JvZEhSd09pOHZjRzlzZVcxbGNpNW5hWFJvZFdJdWFXOHZRVlZVU0U5U1V5NTBlSFJjYmlBcUlGUm9aU0JqYjIxd2JHVjBaU0J6WlhRZ2IyWWdZMjl1ZEhKcFluVjBiM0p6SUcxaGVTQmlaU0JtYjNWdVpDQmhkQ0JvZEhSd09pOHZjRzlzZVcxbGNpNW5hWFJvZFdJdWFXOHZRMDlPVkZKSlFsVlVUMUpUTG5SNGRGeHVJQ29nUTI5a1pTQmthWE4wY21saWRYUmxaQ0JpZVNCSGIyOW5iR1VnWVhNZ2NHRnlkQ0J2WmlCMGFHVWdjRzlzZVcxbGNpQndjbTlxWldOMElHbHpJR0ZzYzI5Y2JpQXFJSE4xWW1wbFkzUWdkRzhnWVc0Z1lXUmthWFJwYjI1aGJDQkpVQ0J5YVdkb2RITWdaM0poYm5RZ1ptOTFibVFnWVhRZ2FIUjBjRG92TDNCdmJIbHRaWEl1WjJsMGFIVmlMbWx2TDFCQlZFVk9WRk11ZEhoMFhHNGdLaTljYmk4dklHcHphR2x1ZENCdWIyUmxPaUIwY25WbFhHNG5kWE5sSUhOMGNtbGpkQ2M3WEc0dkx5QnFjMmhwYm5RZ0xWY3dOemxjYm5aaGNpQlFjbTl0YVhObElEMGdaMnh2WW1Gc0xsQnliMjFwYzJVZ2ZId2djbVZ4ZFdseVpTZ25aWE0yTFhCeWIyMXBjMlVuS1M1UWNtOXRhWE5sTzF4dUx5OGdhbk5vYVc1MElDdFhNRGM1WEc1Y2JuWmhjaUJrYjIwMUlEMGdjbVZ4ZFdseVpTZ25aRzl0TlNjcE8xeHVkbUZ5SUhWeWJDQTlJSEpsY1hWcGNtVW9KM1Z5YkNjcE8xeHVYRzUyWVhJZ1pHOWpjeUE5SUhKbGNYVnBjbVVvSnk0dllYTjBMWFYwYVd4ekwyUnZZM01uS1R0Y2JuWmhjaUJHYVd4bFRHOWhaR1Z5SUQwZ2NtVnhkV2x5WlNnbkxpOXNiMkZrWlhJdlptbHNaUzFzYjJGa1pYSW5LVHRjYm5aaGNpQnBiWEJ2Y25SUVlYSnpaU0E5SUhKbGNYVnBjbVVvSnk0dllYTjBMWFYwYVd4ekwybHRjRzl5ZEMxd1lYSnpaU2NwTzF4dWRtRnlJR3B6VUdGeWMyVWdQU0J5WlhGMWFYSmxLQ2N1TDJGemRDMTFkR2xzY3k5cWN5MXdZWEp6WlNjcE8xeHVkbUZ5SUU1dmIzQlNaWE52YkhabGNpQTlJSEpsY1hWcGNtVW9KeTR2Ykc5aFpHVnlMMjV2YjNBdGNtVnpiMngyWlhJbktUdGNibHh1Wm5WdVkzUnBiMjRnY21Wa2RXTmxUV1YwWVdSaGRHRW9iVEVzSUcweUtTQjdYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdaV3hsYldWdWRITTZJQ0J0TVM1bGJHVnRaVzUwY3k1amIyNWpZWFFvYlRJdVpXeGxiV1Z1ZEhNcExGeHVJQ0FnSUdabFlYUjFjbVZ6T2lBZ2JURXVabVZoZEhWeVpYTXVZMjl1WTJGMEtHMHlMbVpsWVhSMWNtVnpLU3hjYmlBZ0lDQmlaV2hoZG1sdmNuTTZJRzB4TG1KbGFHRjJhVzl5Y3k1amIyNWpZWFFvYlRJdVltVm9ZWFpwYjNKektTeGNiaUFnZlR0Y2JuMWNibHh1ZG1GeUlFVk5VRlJaWDAxRlZFRkVRVlJCSUQwZ2UyVnNaVzFsYm5Sek9pQmJYU3dnWm1WaGRIVnlaWE02SUZ0ZExDQmlaV2hoZG1sdmNuTTZJRnRkZlR0Y2JseHVMeW9xWEc0Z0tpQlFZWEp6WlRVbmN5QnlaWEJ5WlhObGJuUmhkR2x2YmlCdlppQmhJSEJoY25ObFpDQm9kRzFzSUdSdlkzVnRaVzUwWEc0Z0tpQkFkSGx3WldSbFppQjdUMkpxWldOMGZTQkViMk4xYldWdWRFRlRWRnh1SUNvZ1FHMWxiV0psY205bUlHaDVaSEp2YkhsemFYTmNiaUFxTDF4dVhHNHZLaXBjYmlBcUlHVnpjSEpsWlNkeklISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlHRWdjR0Z5YzJWa0lHaDBiV3dnWkc5amRXMWxiblJjYmlBcUlFQjBlWEJsWkdWbUlIdFBZbXBsWTNSOUlFcFRRVk5VWEc0Z0tpQkFiV1Z0WW1WeWIyWWdhSGxrY205c2VYTnBjMXh1SUNvdlhHNWNiaThxS2x4dUlDb2dVR0ZqYTJGblpTQnZaaUJoSUhCaGNuTmxaQ0JLVXlCelkzSnBjSFJjYmlBcUlFQjBlWEJsWkdWbUlIdFBZbXBsWTNSOUlGQmhjbk5sWkVwVFhHNGdLaUJBY0hKdmNHVnlkSGtnZTBwVFFWTlVmU0JoYzNRZ1ZHaGxJSE5qY21sd2RDZHpJRUZUVkZ4dUlDb2dRSEJ5YjNCbGNuUjVJSHRFYjJOMWJXVnVkRUZUVkgwZ2MyTnlhWEIwUld4bGJXVnVkQ0JKWmlCcGJteHBibVVzSUhSb1pTQnpZM0pwY0hRbmN5QmpiMjUwWVdsdWFXNW5JSFJoWnk1Y2JpQXFJRUJ0WlcxaVpYSnZaaUJvZVdSeWIyeDVjMmx6WEc0Z0tpOWNibHh1THlvcVhHNGdLaUJVYUdVZ2JXVjBZV1JoZEdFZ1ptOXlJR0VnYzJsdVoyeGxJSEJ2YkhsdFpYSWdaV3hsYldWdWRGeHVJQ29nUUhSNWNHVmtaV1lnZTA5aWFtVmpkSDBnUld4bGJXVnVkRVJsYzJOeWFYQjBiM0pjYmlBcUlFQnRaVzFpWlhKdlppQm9lV1J5YjJ4NWMybHpYRzRnS2k5Y2JseHVMeW9xWEc0Z0tpQlVhR1VnYldWMFlXUmhkR0VnWm05eUlHRWdVRzlzZVcxbGNpQm1aV0YwZFhKbExseHVJQ29nUUhSNWNHVmtaV1lnZTA5aWFtVmpkSDBnUm1WaGRIVnlaVVJsYzJOeWFYQjBiM0pjYmlBcUlFQnRaVzFpWlhKdlppQm9lV1J5YjJ4NWMybHpYRzRnS2k5Y2JseHVMeW9xWEc0Z0tpQlVhR1VnYldWMFlXUmhkR0VnWm05eUlHRWdVRzlzZVcxbGNpQmlaV2hoZG1sdmNpQnRhWGhwYmk1Y2JpQXFJRUIwZVhCbFpHVm1JSHRQWW1wbFkzUjlJRUpsYUdGMmFXOXlSR1Z6WTNKcGNIUnZjbHh1SUNvZ1FHMWxiV0psY205bUlHaDVaSEp2YkhsemFYTmNiaUFxTDF4dVhHNHZLaXBjYmlBcUlGUm9aU0J0WlhSaFpHRjBZU0JtYjNJZ1lXeHNJR1psWVhSMWNtVnpJR0Z1WkNCbGJHVnRaVzUwY3lCa1pXWnBibVZrSUdsdUlHOXVaU0JrYjJOMWJXVnVkRnh1SUNvZ1FIUjVjR1ZrWldZZ2UwOWlhbVZqZEgwZ1JHOWpkVzFsYm5SRVpYTmpjbWx3ZEc5eVhHNGdLaUJBYldWdFltVnliMllnYUhsa2NtOXNlWE5wYzF4dUlDb2dRSEJ5YjNCbGNuUjVJSHRCY25KaGVUeEZiR1Z0Wlc1MFJHVnpZM0pwY0hSdmNqNTlJR1ZzWlcxbGJuUnpJRlJvWlNCbGJHVnRaVzUwY3lCbWNtOXRJSFJvWlNCa2IyTjFiV1Z1ZEZ4dUlDb2dRSEJ5YjNCbGNuUjVJSHRCY25KaGVUeEdaV0YwZFhKbFJHVnpZM0pwY0hSdmNqNTlJQ0JtWldGMGRYSmxjeUJVYUdVZ1ptVmhkSFZ5WlhNZ1puSnZiU0IwYUdVZ1pHOWpkVzFsYm5SY2JpQXFJRUJ3Y205d1pYSjBlU0I3UVhKeVlYazhSbVZoZEhWeVpVUmxjMk55YVhCMGIzSStmU0FnWW1Wb1lYWnBiM0p6SUZSb1pTQmlaV2hoZG1sdmNuTWdabkp2YlNCMGFHVWdaRzlqZFcxbGJuUmNiaUFxTDF4dVhHNHZLaXBjYmlBcUlGUm9aU0J0WlhSaFpHRjBZU0J2WmlCaGJpQmxiblJwY21VZ1NGUk5UQ0JrYjJOMWJXVnVkQ3dnYVc0Z2NISnZiV2x6WlhNdVhHNGdLaUJBZEhsd1pXUmxaaUI3VDJKcVpXTjBmU0JCYm1Gc2VYcGxaRVJ2WTNWdFpXNTBYRzRnS2lCQWJXVnRZbVZ5YjJZZ2FIbGtjbTlzZVhOcGMxeHVJQ29nUUhCeWIzQmxjblI1SUh0emRISnBibWQ5SUdoeVpXWWdWR2hsSUhWeWJDQnZaaUIwYUdVZ1pHOWpkVzFsYm5RdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTFCeWIyMXBjMlU4VUdGeWMyVmtTVzF3YjNKMFBuMGdJR2gwYld4TWIyRmtaV1FnVkdobElIQmhjbk5sWkNCeVpYQnlaWE5sYm5SaGRHbHZiaUJ2Wmx4dUlDb2dJQ0FnSUhSb1pTQmtiMk11SUZWelpTQjBhR1VnWUdGemRHQWdjSEp2Y0dWeWRIa2dkRzhnWjJWMElIUm9aU0JtZFd4c0lHQndZWEp6WlRWZ0lHRnpkRnh1SUNwY2JpQXFJRUJ3Y205d1pYSjBlU0I3VUhKdmJXbHpaVHhCY25KaGVUeHpkSEpwYm1jK1BuMGdaR1Z3YzB4dllXUmxaQ0JTWlhOdmJIWmxjeUIwYnlCMGFHVWdiR2x6ZENCdlppQjBhR2x6WEc0Z0tpQWdJQ0FnUkc5amRXMWxiblFuY3lCMGNtRnVjMmwwYVhabElHbHRjRzl5ZENCa1pYQmxibVJsYm1OcFpYTmNiaUFxWEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMEZ5Y21GNVBITjBjbWx1Wno1OUlHUmxjRWh5WldaeklGUm9aU0JrYVhKbFkzUWdaR1Z3Wlc1a1pXNWphV1Z6SUc5bUlIUm9aU0JrYjJOMWJXVnVkQzVjYmlBcVhHNGdLaUJBY0hKdmNHVnlkSGtnZTFCeWIyMXBjMlU4Ukc5amRXMWxiblJFWlhOamNtbHdkRzl5UG4wZ2JXVjBZV1JoZEdGTWIyRmtaV1FnVW1WemIyeDJaWE1nZEc4Z2RHaGxJR3hwYzNRZ2IyWmNiaUFxSUNBZ0lDQjBhR2x6SUVSdlkzVnRaVzUwSjNNZ2FXMXdiM0owSUdSbGNHVnVaR1Z1WTJsbGMxeHVJQ292WEc1Y2JpOHFLbHh1SUNvZ1FTQmtZWFJoWW1GelpTQnZaaUJRYjJ4NWJXVnlJRzFsZEdGa1lYUmhJR1JsWm1sdVpXUWdhVzRnU0ZSTlRGeHVJQ3BjYmlBcUlFQmpiMjV6ZEhKMVkzUnZjbHh1SUNvZ1FHMWxiV0psY2s5bUlHaDVaSEp2YkhsemFYTmNiaUFxSUVCd1lYSmhiU0FnZTJKdmIyeGxZVzU5SUdGMGRHRmphRUZUVkNBZ1NXWWdkSEoxWlN3Z1lYUjBZV05vSUdFZ2NHRnljMlUxSUdOdmJYQnNhV0Z1ZENCQlUxUmNiaUFxSUVCd1lYSmhiU0FnZTBacGJHVk1iMkZrWlhJOWZTQnNiMkZrWlhJZ1FXNGdiM0IwYVc5dVlXd2dZRVpwYkdWTWIyRmtaWEpnSUhWelpXUWdkRzhnYkc5aFpDQmxlSFJsY201aGJGeHVJQ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYTnZkWEpqWlhOY2JpQXFMMXh1ZG1GeUlFRnVZV3g1ZW1WeUlEMGdablZ1WTNScGIyNGdRVzVoYkhsNlpYSW9ZWFIwWVdOb1FWTlVMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiRzloWkdWeUtTQjdYRzRnSUhSb2FYTXViRzloWkdWeUlEMGdiRzloWkdWeU8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQklHeHBjM1FnYjJZZ1lXeHNJR1ZzWlcxbGJuUnpJSFJvWlNCZ1FXNWhiSGw2WlhKZ0lHaGhjeUJ0WlhSaFpHRjBZU0JtYjNJdVhHNGdJQ0FxSUVCdFpXMWlaWElnZTBGeWNtRjVManhGYkdWdFpXNTBSR1Z6WTNKcGNIUnZjajU5WEc0Z0lDQXFMMXh1SUNCMGFHbHpMbVZzWlcxbGJuUnpJRDBnVzEwN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVFZ2RtbGxkeUJwYm5SdklHQmxiR1Z0Wlc1MGMyQXNJR3RsZVdWa0lHSjVJSFJoWnlCdVlXMWxMbHh1SUNBZ0tpQkFiV1Z0WW1WeUlIdFBZbXBsWTNRdVBITjBjbWx1Wnl4RmJHVnRaVzUwUkdWelkzSnBjSFJ2Y2o1OVhHNGdJQ0FxTDF4dUlDQjBhR2x6TG1Wc1pXMWxiblJ6UW5sVVlXZE9ZVzFsSUQwZ2UzMDdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFRWdiR2x6ZENCdlppQkJVRWtnWm1WaGRIVnlaWE1nWVdSa1pXUWdkRzhnWUZCdmJIbHRaWEl1UW1GelpXQWdaVzVqYjNWdWRHVnlaV1FnWW5rZ2RHaGxYRzRnSUNBcUlHRnVZV3g1ZW1WeUxseHVJQ0FnS2lCQWJXVnRZbVZ5SUh0QmNuSmhlVHhHWldGMGRYSmxSR1Z6WTNKcGNIUnZjajU5WEc0Z0lDQXFMMXh1SUNCMGFHbHpMbVpsWVhSMWNtVnpJRDBnVzEwN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZSb1pTQmlaV2hoZG1sdmNuTWdZMjlzYkdWamRHVmtJR0o1SUhSb1pTQmhibUZzZVhOcGN5QndZWE56TGx4dUlDQWdLbHh1SUNBZ0tpQkFiV1Z0WW1WeUlIdEJjbkpoZVR4Q1pXaGhkbWx2Y2tSbGMyTnlhWEIwYjNJK2ZWeHVJQ0FnS2k5Y2JpQWdkR2hwY3k1aVpXaGhkbWx2Y25NZ1BTQmJYVHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWR2hsSUdKbGFHRjJhVzl5Y3lCamIyeHNaV04wWldRZ1lua2dkR2hsSUdGdVlXeDVjMmx6SUhCaGMzTWdZbmtnYm1GdFpTNWNiaUFnSUNwY2JpQWdJQ29nUUcxbGJXSmxjaUI3VDJKcVpXTjBQSE4wY21sdVp5eENaV2hoZG1sdmNrUmxjMk55YVhCMGIzSStmVnh1SUNBZ0tpOWNiaUFnZEdocGN5NWlaV2hoZG1sdmNuTkNlVTVoYldVZ1BTQjdmVHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRU0J0WVhBc0lHdGxlV1ZrSUdKNUlHRmljMjlzZFhSbElIQmhkR2dzSUc5bUlFUnZZM1Z0Wlc1MElHMWxkR0ZrWVhSaExseHVJQ0FnS2lCQWJXVnRZbVZ5SUh0UFltcGxZM1E4YzNSeWFXNW5MRUZ1WVd4NWVtVmtSRzlqZFcxbGJuUStmVnh1SUNBZ0tpOWNiaUFnZEdocGN5NW9kRzFzSUQwZ2UzMDdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFRWdiV0Z3TENCclpYbGxaQ0JpZVNCd1lYUm9MQ0J2WmlCSVZFMU1JR1J2WTNWdFpXNTBJRUZUVkhNdVhHNGdJQ0FxSUVCMGVYQmxJSHRQWW1wbFkzUjlYRzRnSUNBcUwxeHVJQ0IwYUdsekxuQmhjbk5sWkVSdlkzVnRaVzUwY3lBOUlIdDlPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkJJRzFoY0N3Z2EyVjVaV1FnWW5rZ2NHRjBhQ3dnYjJZZ1NsTWdjMk55YVhCMElFRlRWSE11WEc0Z0lDQXFYRzRnSUNBcUlFbG1JSFJvWlNCd1lYUm9JR2x6SUdGdUlFaFVUVXdnWm1sc1pTQjNhWFJvSUcxMWJIUnBjR3hsSUhOamNtbHdkSE1zSUhSb1pTQmxiblJ5ZVNCM2FXeHNJR0psSUdGdUlHRnljbUY1SUc5bUlITmpjbWx3ZEhNdVhHNGdJQ0FxWEc0Z0lDQXFJRUIwZVhCbElIdFBZbXBsWTNROGMzUnlhVzVuTEVGeWNtRjVQRkJoY25ObFpFcFRQajU5WEc0Z0lDQXFMMXh1SUNCMGFHbHpMbkJoY25ObFpGTmpjbWx3ZEhNZ1BTQjdmVHRjYmx4dVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVFZ2JXRndMQ0JyWlhsbFpDQmllU0J3WVhSb0xDQnZaaUJrYjJOMWJXVnVkQ0JqYjI1MFpXNTBMbHh1SUNBZ0tpQkFkSGx3WlNCN1QySnFaV04wZlZ4dUlDQWdLaTljYmlBZ2RHaHBjeTVmWTI5dWRHVnVkQ0E5SUh0OU8xeHVmVHRjYmx4dUx5b3FYRzRnS2lCUGNIUnBiMjV6SUdadmNpQmdRVzVoYkhsNlpYSXVZVzVoYkhwNVpXQmNiaUFxSUVCMGVYQmxaR1ZtSUh0UFltcGxZM1I5SUV4dllXUlBjSFJwYjI1elhHNGdLaUJBYldWdFltVnliMllnYUhsa2NtOXNlWE5wYzF4dUlDb2dRSEJ5YjNCbGNuUjVJSHRpYjI5c1pXRnVmU0J1YjBGdWJtOTBZWFJwYjI1eklGZG9aWFJvWlhJZ1lHRnVibTkwWVhSbEtDbGdJSE5vYjNWc1pDQmlaU0J6YTJsd2NHVmtMbHh1SUNvZ1FIQnliM0JsY25SNUlIdGliMjlzWldGdWZTQmpiR1ZoYmlCWGFHVjBhR1Z5SUhSb1pTQm5aVzVsY21GMFpXUWdaR1Z6WTNKcGNIUnZjbk1nYzJodmRXeGtJR0psSUdOc1pXRnVaV1JjYmlBcUlDQWdJQ0J2WmlCeVpXUjFibVJoYm5RZ1pHRjBZUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdablZ1WTNScGIyNG9jM1J5YVc1bktUb2dZbTl2YkdWaGJuMGdabWxzZEdWeUlFRWdjSEpsWkdsallYUmxJR1oxYm1OMGFXOXVJSFJvWVhSY2JpQXFJQ0FnSUNCcGJtUnBZMkYwWlhNZ2QyaHBZMmdnWm1sc1pYTWdjMmh2ZFd4a0lHSmxJR2xuYm05eVpXUWdZbmtnZEdobElHeHZZV1JsY2k0Z1Fua2daR1ZtWVhWc2RDQmhiR3hjYmlBcUlDQWdJQ0JtYVd4bGN5QnViM1FnYkc5allYUmxaQ0IxYm1SbGNpQjBhR1VnWkdseWJtRnRaU0J2WmlCZ2FISmxabUFnZDJsc2JDQmlaU0JwWjI1dmNtVmtMbHh1SUNvdlhHNWNiaThxS2x4dUlDb2dVMmh2Y25Sb1lXNWtJR1p2Y2lCMGNtRnVjMmwwYVhabGJIa2diRzloWkdsdVp5QmhibVFnY0hKdlkyVnpjMmx1WnlCaGJHd2dhVzF3YjNKMGN5QmlaV2RwYm01cGJtY2dZWFJjYmlBcUlHQm9jbVZtWUM1Y2JpQXFYRzRnS2lCSmJpQnZjbVJsY2lCMGJ5QndjbTl3WlhKc2VTQm1hV3gwWlhJZ2NHRjBhSE1zSUdCb2NtVm1ZQ0JmYlhWemRGOGdZbVVnWVc0Z1lXSnpiMngxZEdVZ1ZWSkpMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdjM1J5YVc1bmZTQm9jbVZtSUZSb1pTQnliMjkwSUdsdGNHOXlkQ0IwYnlCaVpXZHBiaUJzYjJGa2FXNW5JR1p5YjIwdVhHNGdLaUJBY0dGeVlXMGdlMHh2WVdSUGNIUnBiMjV6UFgwZ2IzQjBhVzl1Y3lCQmJua2dZV1JrYVhScGIyNWhiQ0J2Y0hScGIyNXpJR1p2Y2lCMGFHVWdiRzloWkM1Y2JpQXFJRUJ5WlhSMWNtNGdlMUJ5YjIxcGMyVThRVzVoYkhsNlpYSStmU0JCSUhCeWIyMXBjMlVnZEdoaGRDQjNhV3hzSUhKbGMyOXNkbVVnYjI1alpTQmdhSEpsWm1BZ1lXNWtJR2wwYzF4dUlDb2dJQ0FnSUdSbGNHVnVaR1Z1WTJsbGN5Qm9ZWFpsSUdKbFpXNGdiRzloWkdWa0lHRnVaQ0JoYm1Gc2VYcGxaQzVjYmlBcUwxeHVRVzVoYkhsNlpYSXVZVzVoYkhsNlpTQTlJR1oxYm1OMGFXOXVJR0Z1WVd4NWVtVW9hSEpsWml3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0J2Y0hScGIyNXpJRDBnYjNCMGFXOXVjeUI4ZkNCN2ZUdGNiaUFnYjNCMGFXOXVjeTVtYVd4MFpYSWdQU0J2Y0hScGIyNXpMbVpwYkhSbGNpQjhmQ0JmWkdWbVlYVnNkRVpwYkhSbGNpaG9jbVZtS1R0Y2JseHVJQ0IyWVhJZ2JHOWhaR1Z5SUQwZ2JtVjNJRVpwYkdWTWIyRmtaWElvS1R0Y2JpQWdkbUZ5SUZCeWFXMWhjbmxTWlhOdmJIWmxjaUE5SUhSNWNHVnZaaUIzYVc1a2IzY2dQVDA5SUNkMWJtUmxabWx1WldRbklEOWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxjWFZwY21Vb0p5NHZiRzloWkdWeUwyWnpMWEpsYzI5c2RtVnlKeWtnT2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WeGRXbHlaU2duTGk5c2IyRmtaWEl2ZUdoeUxYSmxjMjlzZG1WeUp5azdYRzRnSUd4dllXUmxjaTVoWkdSU1pYTnZiSFpsY2lodVpYY2dVSEpwYldGeWVWSmxjMjlzZG1WeUtHOXdkR2x2Ym5NcEtUdGNiaUFnYkc5aFpHVnlMbUZrWkZKbGMyOXNkbVZ5S0c1bGR5Qk9iMjl3VW1WemIyeDJaWElvZTNSbGMzUTZJRzl3ZEdsdmJuTXVabWxzZEdWeWZTa3BPMXh1WEc0Z0lIWmhjaUJoYm1Gc2VYcGxjaUE5SUc1bGR5QjBhR2x6S0c1MWJHd3NJR3h2WVdSbGNpazdYRzRnSUhKbGRIVnliaUJoYm1Gc2VYcGxjaTV0WlhSaFpHRjBZVlJ5WldVb2FISmxaaWt1ZEdobGJpaG1kVzVqZEdsdmJpaHliMjkwS1NCN1hHNGdJQ0FnYVdZZ0tDRnZjSFJwYjI1ekxtNXZRVzV1YjNSaGRHbHZibk1wSUh0Y2JpQWdJQ0FnSUdGdVlXeDVlbVZ5TG1GdWJtOTBZWFJsS0NrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNodmNIUnBiMjV6TG1Oc1pXRnVLU0I3WEc0Z0lDQWdJQ0JoYm1Gc2VYcGxjaTVqYkdWaGJpZ3BPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnVUhKdmJXbHpaUzV5WlhOdmJIWmxLR0Z1WVd4NWVtVnlLVHRjYmlBZ2ZTazdYRzU5TzF4dVhHNHZLaXBjYmlBcUlFQndjbWwyWVhSbFhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhSEpsWmx4dUlDb2dRSEpsZEhWeWJpQjdablZ1WTNScGIyNG9jM1J5YVc1bktUb2dZbTl2YkdWaGJuMWNiaUFxTDF4dVpuVnVZM1JwYjI0Z1gyUmxabUYxYkhSR2FXeDBaWElvYUhKbFppa2dlMXh1SUNBdkx5QkZkbVZ5ZVhSb2FXNW5JSFZ3SUhSdklIUm9aU0JzWVhOMElHQXZZQ0J2Y2lCZ1hGeGdMbHh1SUNCMllYSWdZbUZ6WlNBOUlHaHlaV1l1YldGMFkyZ29MMTRvTGlvL0tWdGVYRnd2WEZ4Y1hGMHFKQzhwV3pGZE8xeHVJQ0J5WlhSMWNtNGdablZ1WTNScGIyNG9kWEpwS1NCN1hHNGdJQ0FnY21WMGRYSnVJSFZ5YVM1cGJtUmxlRTltS0dKaGMyVXBJQ0U5UFNBd08xeHVJQ0I5TzF4dWZWeHVYRzVCYm1Gc2VYcGxjaTV3Y205MGIzUjVjR1V1Ykc5aFpDQTlJR1oxYm1OMGFXOXVJR3h2WVdRb2FISmxaaWtnZTF4dUlDQnlaWFIxY200Z2RHaHBjeTVzYjJGa1pYSXVjbVZ4ZFdWemRDaG9jbVZtS1M1MGFHVnVLR1oxYm1OMGFXOXVLR052Ym5SbGJuUXBJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9ablZ1WTNScGIyNG9jbVZ6YjJ4MlpTd2djbVZxWldOMEtTQjdYRzRnSUNBZ0lDQnpaWFJVYVcxbGIzVjBLR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbDlqYjI1MFpXNTBXMmh5WldaZElEMGdZMjl1ZEdWdWREdGNiaUFnSUNBZ0lDQWdjbVZ6YjJ4MlpTaDBhR2x6TGw5d1lYSnpaVWhVVFV3b1kyOXVkR1Z1ZEN3Z2FISmxaaWtwTzF4dUlDQWdJQ0FnZlM1aWFXNWtLSFJvYVhNcExDQXdLVHRjYmlBZ0lDQjlMbUpwYm1Rb2RHaHBjeWtwTG1OaGRHTm9LR1oxYm1OMGFXOXVLR1Z5Y2lsN1hHNGdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLRndpUlhKeWIzSWdjSEp2WTJWemMybHVaeUJrYjJOMWJXVnVkQ0JoZENCY0lpQXJJR2h5WldZcE8xeHVJQ0FnSUNBZ2RHaHliM2NnWlhKeU8xeHVJQ0FnSUgwcE8xeHVJQ0I5TG1KcGJtUW9kR2hwY3lrcE8xeHVmVHRjYmx4dUx5b3FYRzRnS2lCU1pYUjFjbTV6SUdGdUlHQkJibUZzZVhwbFpFUnZZM1Z0Wlc1MFlDQnlaWEJ5WlhObGJuUnBibWNnZEdobElIQnliM1pwWkdWa0lHUnZZM1Z0Wlc1MFhHNGdLaUJBY0hKcGRtRjBaVnh1SUNvZ1FIQmhjbUZ0SUNCN2MzUnlhVzVuZlNCb2RHMXNTVzF3YjNKMElGSmhkeUIwWlhoMElHOW1JR0Z1SUVoVVRVd2daRzlqZFcxbGJuUmNiaUFxSUVCd1lYSmhiU0FnZTNOMGNtbHVaMzBnYUhKbFppQWdJQ0FnSUNCVWFHVWdaRzlqZFcxbGJuUW5jeUJWVWt3dVhHNGdLaUJBY21WMGRYSnVJSHRCYm1Gc2VYcGxaRVJ2WTNWdFpXNTBmU0FnSUNBZ0lDQkJiaUFnWUVGdVlXeDVlbVZrUkc5amRXMWxiblJnWEc0Z0tpOWNia0Z1WVd4NWVtVnlMbkJ5YjNSdmRIbHdaUzVmY0dGeWMyVklWRTFNSUQwZ1puVnVZM1JwYjI0Z1gzQmhjbk5sU0ZSTlRDaG9kRzFzU1cxd2IzSjBMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm9jbVZtS1NCN1hHNGdJR2xtSUNob2NtVm1JR2x1SUhSb2FYTXVhSFJ0YkNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtaDBiV3hiYUhKbFpsMDdYRzRnSUgxY2JpQWdkbUZ5SUdSbGNITk1iMkZrWldRZ1BTQmJYVHRjYmlBZ2RtRnlJR1JsY0VoeVpXWnpJRDBnVzEwN1hHNGdJSFpoY2lCdFpYUmhaR0YwWVV4dllXUmxaQ0E5SUZCeWIyMXBjMlV1Y21WemIyeDJaU2hGVFZCVVdWOU5SVlJCUkVGVVFTazdYRzRnSUhaaGNpQndZWEp6WldRN1hHNGdJSFJ5ZVNCN1hHNGdJQ0FnY0dGeWMyVmtJRDBnYVcxd2IzSjBVR0Z5YzJVb2FIUnRiRWx0Y0c5eWRDd2dhSEpsWmlrN1hHNGdJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2UxeHVJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9KMFZ5Y205eUlIQmhjbk5wYm1jaEp5azdYRzRnSUNBZ2RHaHliM2NnWlhKeU8xeHVJQ0I5WEc0Z0lIWmhjaUJvZEcxc1RHOWhaR1ZrSUQwZ1VISnZiV2x6WlM1eVpYTnZiSFpsS0hCaGNuTmxaQ2s3WEc0Z0lHbG1JQ2h3WVhKelpXUXVjMk55YVhCMEtTQjdYRzRnSUNBZ2JXVjBZV1JoZEdGTWIyRmtaV1FnUFNCMGFHbHpMbDl3Y205alpYTnpVMk55YVhCMGN5aHdZWEp6WldRdWMyTnlhWEIwTENCb2NtVm1LVHRjYmlBZ2ZWeHVJQ0IyWVhJZ1kyOXRiV1Z1ZEZSbGVIUWdQU0J3WVhKelpXUXVZMjl0YldWdWRDNXRZWEFvWm5WdVkzUnBiMjRvWTI5dGJXVnVkQ2w3WEc0Z0lDQWdjbVYwZFhKdUlHUnZiVFV1WjJWMFZHVjRkRU52Ym5SbGJuUW9ZMjl0YldWdWRDazdYRzRnSUgwcE8xeHVJQ0IyWVhJZ2NITmxkV1J2Uld4bGJXVnVkSE1nUFNCa2IyTnpMbkJoY25ObFVITmxkV1J2Uld4bGJXVnVkSE1vWTI5dGJXVnVkRlJsZUhRcE8xeHVJQ0J3YzJWMVpHOUZiR1Z0Wlc1MGN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtHVnNaVzFsYm5RcGUxeHVJQ0FnSUdWc1pXMWxiblF1WTI5dWRHVnVkRWh5WldZZ1BTQm9jbVZtTzF4dUlDQWdJSFJvYVhNdVpXeGxiV1Z1ZEhNdWNIVnphQ2hsYkdWdFpXNTBLVHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblJ6UW5sVVlXZE9ZVzFsVzJWc1pXMWxiblF1YVhOZElEMGdaV3hsYldWdWREdGNiaUFnZlM1aWFXNWtLSFJvYVhNcEtUdGNiaUFnYldWMFlXUmhkR0ZNYjJGa1pXUWdQU0J0WlhSaFpHRjBZVXh2WVdSbFpDNTBhR1Z1S0daMWJtTjBhVzl1S0cxbGRHRmtZWFJoS1h0Y2JpQWdJQ0IyWVhJZ2JXVjBZV1JoZEdGRmJuUnllU0E5SUh0Y2JpQWdJQ0FnSUdWc1pXMWxiblJ6T2lCd2MyVjFaRzlGYkdWdFpXNTBjeXhjYmlBZ0lDQWdJR1psWVhSMWNtVnpPaUJiWFN4Y2JpQWdJQ0FnSUdKbGFHRjJhVzl5Y3pvZ1cxMWNiaUFnSUNCOU8xeHVJQ0FnSUhKbGRIVnliaUJiYldWMFlXUmhkR0VzSUcxbGRHRmtZWFJoUlc1MGNubGRMbkpsWkhWalpTaHlaV1IxWTJWTlpYUmhaR0YwWVNrN1hHNGdJSDBwTzF4dUlDQmtaWEJ6VEc5aFpHVmtMbkIxYzJnb2JXVjBZV1JoZEdGTWIyRmtaV1FwTzF4dVhHNWNiaUFnYVdZZ0tIUm9hWE11Ykc5aFpHVnlLU0I3WEc0Z0lDQWdkbUZ5SUdKaGMyVlZjbWtnUFNCb2NtVm1PMXh1SUNBZ0lHbG1JQ2h3WVhKelpXUXVZbUZ6WlM1c1pXNW5kR2dnUGlBeEtTQjdYRzRnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0Z3aVQyNXNlU0J2Ym1VZ1ltRnpaU0IwWVdjZ2NHVnlJR1J2WTNWdFpXNTBJVndpS1R0Y2JpQWdJQ0FnSUhSb2NtOTNJRndpVFhWc2RHbHdiR1VnWW1GelpTQjBZV2R6SUdsdUlGd2lJQ3NnYUhKbFpqdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIQmhjbk5sWkM1aVlYTmxMbXhsYm1kMGFDQTlQU0F4S1NCN1hHNGdJQ0FnSUNCMllYSWdZbUZ6WlVoeVpXWWdQU0JrYjIwMUxtZGxkRUYwZEhKcFluVjBaU2h3WVhKelpXUXVZbUZ6WlZzd1hTd2dYQ0pvY21WbVhDSXBPMXh1SUNBZ0lDQWdhV1lnS0dKaGMyVkljbVZtS1NCN1hHNGdJQ0FnSUNBZ0lHSmhjMlZJY21WbUlEMGdZbUZ6WlVoeVpXWWdLeUJjSWk5Y0lqdGNiaUFnSUNBZ0lDQWdZbUZ6WlZWeWFTQTlJSFZ5YkM1eVpYTnZiSFpsS0dKaGMyVlZjbWtzSUdKaGMyVkljbVZtS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjR0Z5YzJWa0xtbHRjRzl5ZEM1bWIzSkZZV05vS0daMWJtTjBhVzl1S0d4cGJtc3BJSHRjYmlBZ0lDQWdJSFpoY2lCc2FXNXJkWEpzSUQwZ1pHOXROUzVuWlhSQmRIUnlhV0oxZEdVb2JHbHVheXdnSjJoeVpXWW5LVHRjYmlBZ0lDQWdJR2xtSUNoc2FXNXJkWEpzS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ5WlhOdmJIWmxaRlZ5YkNBOUlIVnliQzV5WlhOdmJIWmxLR0poYzJWVmNta3NJR3hwYm10MWNtd3BPMXh1SUNBZ0lDQWdJQ0JrWlhCSWNtVm1jeTV3ZFhOb0tISmxjMjlzZG1Wa1ZYSnNLVHRjYmlBZ0lDQWdJQ0FnWkdWd2MweHZZV1JsWkM1d2RYTm9LSFJvYVhNdVgyUmxjR1Z1WkdWdVkybGxjMHh2WVdSbFpFWnZjaWh5WlhOdmJIWmxaRlZ5YkN3Z2FISmxaaWtwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDB1WW1sdVpDaDBhR2x6S1NrN1hHNGdJQ0FnY0dGeWMyVmtMbk4wZVd4bExtWnZja1ZoWTJnb1puVnVZM1JwYjI0b2MzUjViR1ZGYkdWdFpXNTBLU0I3WEc0Z0lDQWdJQ0JwWmlBb2NHOXNlVzFsY2tWNGRHVnlibUZzVTNSNWJHVW9jM1I1YkdWRmJHVnRaVzUwS1NrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnYzNSNWJHVkljbVZtSUQwZ1pHOXROUzVuWlhSQmRIUnlhV0oxZEdVb2MzUjViR1ZGYkdWdFpXNTBMQ0FuYUhKbFppY3BPMXh1SUNBZ0lDQWdJQ0JwWmlBb2FISmxaaWtnZTF4dUlDQWdJQ0FnSUNBZ0lITjBlV3hsU0hKbFppQTlJSFZ5YkM1eVpYTnZiSFpsS0dKaGMyVlZjbWtzSUhOMGVXeGxTSEpsWmlrN1hHNGdJQ0FnSUNBZ0lDQWdaR1Z3YzB4dllXUmxaQzV3ZFhOb0tIUm9hWE11Ykc5aFpHVnlMbkpsY1hWbGMzUW9jM1I1YkdWSWNtVm1LUzUwYUdWdUtHWjFibU4wYVc5dUtHTnZiblJsYm5RcGUxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWZZMjl1ZEdWdWRGdHpkSGxzWlVoeVpXWmRJRDBnWTI5dWRHVnVkRHRjYmlBZ0lDQWdJQ0FnSUNCOUxtSnBibVFvZEdocGN5a3BLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDB1WW1sdVpDaDBhR2x6S1NrN1hHNGdJSDFjYmlBZ1pHVndjMHh2WVdSbFpDQTlJRkJ5YjIxcGMyVXVZV3hzS0dSbGNITk1iMkZrWldRcFhHNGdJQ0FnSUNBZ0lDNTBhR1Z1S0daMWJtTjBhVzl1S0NrZ2UzSmxkSFZ5YmlCa1pYQkljbVZtY3p0OUtWeHVJQ0FnSUNBZ0lDQXVZMkYwWTJnb1puVnVZM1JwYjI0b1pYSnlLU0I3ZEdoeWIzY2daWEp5TzMwcE8xeHVJQ0IwYUdsekxuQmhjbk5sWkVSdlkzVnRaVzUwYzF0b2NtVm1YU0E5SUhCaGNuTmxaQzVoYzNRN1hHNGdJSFJvYVhNdWFIUnRiRnRvY21WbVhTQTlJSHRjYmlBZ0lDQWdJR2h5WldZNklHaHlaV1lzWEc0Z0lDQWdJQ0JvZEcxc1RHOWhaR1ZrT2lCb2RHMXNURzloWkdWa0xGeHVJQ0FnSUNBZ2JXVjBZV1JoZEdGTWIyRmtaV1E2SUcxbGRHRmtZWFJoVEc5aFpHVmtMRnh1SUNBZ0lDQWdaR1Z3U0hKbFpuTTZJR1JsY0VoeVpXWnpMRnh1SUNBZ0lDQWdaR1Z3YzB4dllXUmxaRG9nWkdWd2MweHZZV1JsWkZ4dUlDQjlPMXh1SUNCeVpYUjFjbTRnZEdocGN5NW9kRzFzVzJoeVpXWmRPMXh1ZlR0Y2JseHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbDl3Y205alpYTnpVMk55YVhCMGN5QTlJR1oxYm1OMGFXOXVJRjl3Y205alpYTnpVMk55YVhCMGN5aHpZM0pwY0hSekxDQm9jbVZtS1NCN1hHNGdJSFpoY2lCelkzSnBjSFJRY205dGFYTmxjeUE5SUZ0ZE8xeHVJQ0J6WTNKcGNIUnpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9jMk55YVhCMEtTQjdYRzRnSUNBZ2MyTnlhWEIwVUhKdmJXbHpaWE11Y0hWemFDaDBhR2x6TGw5d2NtOWpaWE56VTJOeWFYQjBLSE5qY21sd2RDd2dhSEpsWmlrcE8xeHVJQ0I5TG1KcGJtUW9kR2hwY3lrcE8xeHVJQ0J5WlhSMWNtNGdVSEp2YldselpTNWhiR3dvYzJOeWFYQjBVSEp2YldselpYTXBMblJvWlc0b1puVnVZM1JwYjI0b2JXVjBZV1JoZEdGTWFYTjBLU0I3WEc0Z0lDQWdjbVYwZFhKdUlHMWxkR0ZrWVhSaFRHbHpkQzV5WldSMVkyVW9jbVZrZFdObFRXVjBZV1JoZEdFc0lFVk5VRlJaWDAxRlZFRkVRVlJCS1R0Y2JpQWdmU2s3WEc1OU8xeHVYRzVCYm1Gc2VYcGxjaTV3Y205MGIzUjVjR1V1WDNCeWIyTmxjM05UWTNKcGNIUWdQU0JtZFc1amRHbHZiaUJmY0hKdlkyVnpjMU5qY21sd2RDaHpZM0pwY0hRc0lHaHlaV1lwSUh0Y2JpQWdkbUZ5SUhOeVl5QTlJR1J2YlRVdVoyVjBRWFIwY21saWRYUmxLSE5qY21sd2RDd2dKM055WXljcE8xeHVJQ0IyWVhJZ2NHRnljMlZrU25NN1hHNGdJR2xtSUNnaGMzSmpLU0I3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUhCaGNuTmxaRXB6SUQwZ2FuTlFZWEp6WlNnb2MyTnlhWEIwTG1Ob2FXeGtUbTlrWlhNdWJHVnVaM1JvS1NBL0lITmpjbWx3ZEM1amFHbHNaRTV2WkdWeld6QmRMblpoYkhWbElEb2dKeWNwTzF4dUlDQWdJSDBnWTJGMFkyZ2dLR1Z5Y2lrZ2UxeHVJQ0FnSUNBZ0x5OGdSbWxuZFhKbElHOTFkQ0IwYUdVZ1kyOXljbVZqZENCc2FXNWxJRzUxYldKbGNpQm1iM0lnZEdobElHVnljbTl5TGx4dUlDQWdJQ0FnZG1GeUlHeHBibVVnUFNBd08xeHVJQ0FnSUNBZ2RtRnlJR052YkNBOUlEQTdYRzRnSUNBZ0lDQnBaaUFvYzJOeWFYQjBMbDlmYjNkdVpYSkViMk4xYldWdWRDQW1KaUJ6WTNKcGNIUXVYMTl2ZDI1bGNrUnZZM1Z0Wlc1MElEMDlJR2h5WldZcElIdGNiaUFnSUNBZ0lDQWdiR2x1WlNBOUlITmpjbWx3ZEM1ZlgyeHZZMkYwYVc5dVJHVjBZV2xzTG14cGJtVWdMU0F4TzF4dUlDQWdJQ0FnSUNCamIyd2dQU0J6WTNKcGNIUXVYMTlzYjJOaGRHbHZia1JsZEdGcGJDNXNhVzVsSUMwZ01UdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHeHBibVVnS3owZ1pYSnlMbXhwYm1WT2RXMWlaWEk3WEc0Z0lDQWdJQ0JqYjJ3Z0t6MGdaWEp5TG1OdmJIVnRianRjYmlBZ0lDQWdJSFpoY2lCdFpYTnpZV2RsSUQwZ1hDSkZjbkp2Y2lCd1lYSnphVzVuSUhOamNtbHdkQ0JwYmlCY0lpQXJJR2h5WldZZ0t5QmNJaUJoZENCY0lpQXJJR3hwYm1VZ0t5QmNJanBjSWlBcklHTnZiRHRjYmlBZ0lDQWdJRzFsYzNOaFoyVWdLejBnWENKY1hHNWNJaUFySUdWeWNpNXpkR0ZqYXp0Y2JpQWdJQ0FnSUhKbGRIVnliaUJRY205dGFYTmxMbkpsYW1WamRDaHVaWGNnUlhKeWIzSW9iV1Z6YzJGblpTa3BPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9jR0Z5YzJWa1NuTXVaV3hsYldWdWRITXBJSHRjYmlBZ0lDQWdJSEJoY25ObFpFcHpMbVZzWlcxbGJuUnpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9aV3hsYldWdWRDa2dlMXh1SUNBZ0lDQWdJQ0JsYkdWdFpXNTBMbk5qY21sd2RFVnNaVzFsYm5RZ1BTQnpZM0pwY0hRN1hHNGdJQ0FnSUNBZ0lHVnNaVzFsYm5RdVkyOXVkR1Z1ZEVoeVpXWWdQU0JvY21WbU8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1Wc1pXMWxiblJ6TG5CMWMyZ29aV3hsYldWdWRDazdYRzRnSUNBZ0lDQWdJR2xtSUNobGJHVnRaVzUwTG1seklHbHVJSFJvYVhNdVpXeGxiV1Z1ZEhOQ2VWUmhaMDVoYldVcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emIyeGxMbmRoY200b0owbG5ibTl5YVc1bklHUjFjR3hwWTJGMFpTQmxiR1Z0Wlc1MElHUmxabWx1YVhScGIyNDZJQ2NnS3lCbGJHVnRaVzUwTG1sektUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtVnNaVzFsYm5SelFubFVZV2RPWVcxbFcyVnNaVzFsYm5RdWFYTmRJRDBnWld4bGJXVnVkRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlM1aWFXNWtLSFJvYVhNcEtUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tIQmhjbk5sWkVwekxtWmxZWFIxY21WektTQjdYRzRnSUNBZ0lDQndZWEp6WldSS2N5NW1aV0YwZFhKbGN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtHWmxZWFIxY21VcGUxeHVJQ0FnSUNBZ0lDQm1aV0YwZFhKbExtTnZiblJsYm5SSWNtVm1JRDBnYUhKbFpqdGNiaUFnSUNBZ0lDQWdabVZoZEhWeVpTNXpZM0pwY0hSRmJHVnRaVzUwSUQwZ2MyTnlhWEIwTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbVpsWVhSMWNtVnpJRDBnZEdocGN5NW1aV0YwZFhKbGN5NWpiMjVqWVhRb2NHRnljMlZrU25NdVptVmhkSFZ5WlhNcE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2NHRnljMlZrU25NdVltVm9ZWFpwYjNKektTQjdYRzRnSUNBZ0lDQndZWEp6WldSS2N5NWlaV2hoZG1sdmNuTXVabTl5UldGamFDaG1kVzVqZEdsdmJpaGlaV2hoZG1sdmNpbDdYRzRnSUNBZ0lDQWdJR0psYUdGMmFXOXlMbU52Ym5SbGJuUkljbVZtSUQwZ2FISmxaanRjYmlBZ0lDQWdJQ0FnZEdocGN5NWlaV2hoZG1sdmNuTkNlVTVoYldWYlltVm9ZWFpwYjNJdWFYTmRJRDBnWW1Wb1lYWnBiM0k3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZbVZvWVhacGIzSnpRbmxPWVcxbFcySmxhR0YyYVc5eUxuTjViV0p2YkYwZ1BTQmlaV2hoZG1sdmNqdGNiaUFnSUNBZ0lIMHVZbWx1WkNoMGFHbHpLU2s3WEc0Z0lDQWdJQ0IwYUdsekxtSmxhR0YyYVc5eWN5QTlJSFJvYVhNdVltVm9ZWFpwYjNKekxtTnZibU5oZENod1lYSnpaV1JLY3k1aVpXaGhkbWx2Y25NcE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb0lVOWlhbVZqZEM1b1lYTlBkMjVRY205d1pYSjBlUzVqWVd4c0tIUm9hWE11Y0dGeWMyVmtVMk55YVhCMGN5d2dhSEpsWmlrcElIdGNiaUFnSUNBZ0lIUm9hWE11Y0dGeWMyVmtVMk55YVhCMGMxdG9jbVZtWFNBOUlGdGRPMXh1SUNBZ0lIMWNiaUFnSUNCMllYSWdjMk55YVhCMFJXeGxiV1Z1ZER0Y2JpQWdJQ0JwWmlBb2MyTnlhWEIwTGw5ZmIzZHVaWEpFYjJOMWJXVnVkQ0FtSmlCelkzSnBjSFF1WDE5dmQyNWxja1J2WTNWdFpXNTBJRDA5SUdoeVpXWXBJSHRjYmlBZ0lDQWdJSE5qY21sd2RFVnNaVzFsYm5RZ1BTQnpZM0pwY0hRN1hHNGdJQ0FnZlZ4dUlDQWdJSFJvYVhNdWNHRnljMlZrVTJOeWFYQjBjMXRvY21WbVhTNXdkWE5vS0h0Y2JpQWdJQ0FnSUdGemREb2djR0Z5YzJWa1NuTXVjR0Z5YzJWa1UyTnlhWEIwTEZ4dUlDQWdJQ0FnYzJOeWFYQjBSV3hsYldWdWREb2djMk55YVhCMFJXeGxiV1Z1ZEZ4dUlDQWdJSDBwTzF4dUlDQWdJSEpsZEhWeWJpQndZWEp6WldSS2N6dGNiaUFnZlZ4dUlDQnBaaUFvZEdocGN5NXNiMkZrWlhJcElIdGNiaUFnSUNCMllYSWdjbVZ6YjJ4MlpXUlRjbU1nUFNCMWNtd3VjbVZ6YjJ4MlpTaG9jbVZtTENCemNtTXBPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbXh2WVdSbGNpNXlaWEYxWlhOMEtISmxjMjlzZG1Wa1UzSmpLUzUwYUdWdUtHWjFibU4wYVc5dUtHTnZiblJsYm5RcElIdGNiaUFnSUNBZ0lIUm9hWE11WDJOdmJuUmxiblJiY21WemIyeDJaV1JUY21OZElEMGdZMjl1ZEdWdWREdGNiaUFnSUNBZ0lIWmhjaUJ5WlhOdmJIWmxaRk5qY21sd2RDQTlJRTlpYW1WamRDNWpjbVZoZEdVb2MyTnlhWEIwS1R0Y2JpQWdJQ0FnSUhKbGMyOXNkbVZrVTJOeWFYQjBMbU5vYVd4a1RtOWtaWE1nUFNCYmUzWmhiSFZsT2lCamIyNTBaVzUwZlYwN1hHNGdJQ0FnSUNCeVpYTnZiSFpsWkZOamNtbHdkQzVoZEhSeWN5QTlJSEpsYzI5c2RtVmtVMk55YVhCMExtRjBkSEp6TG5Oc2FXTmxLQ2s3WEc0Z0lDQWdJQ0JrYjIwMUxuSmxiVzkyWlVGMGRISnBZblYwWlNoeVpYTnZiSFpsWkZOamNtbHdkQ3dnSjNOeVl5Y3BPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11WDNCeWIyTmxjM05UWTNKcGNIUW9jbVZ6YjJ4MlpXUlRZM0pwY0hRc0lISmxjMjlzZG1Wa1UzSmpLVHRjYmlBZ0lDQjlMbUpwYm1Rb2RHaHBjeWtwTG1OaGRHTm9LR1oxYm1OMGFXOXVLR1Z5Y2lrZ2UzUm9jbTkzSUdWeWNqdDlLVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0J5WlhSMWNtNGdVSEp2YldselpTNXlaWE52YkhabEtFVk5VRlJaWDAxRlZFRkVRVlJCS1R0Y2JpQWdmVnh1ZlR0Y2JseHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbDlrWlhCbGJtUmxibU5wWlhOTWIyRmtaV1JHYjNJZ1BTQm1kVzVqZEdsdmJpQmZaR1Z3Wlc1a1pXNWphV1Z6VEc5aFpHVmtSbTl5S0doeVpXWXNJSEp2YjNRcElIdGNiaUFnZG1GeUlHWnZkVzVrSUQwZ2UzMDdYRzRnSUdsbUlDaHliMjkwSUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQm1iM1Z1WkZ0eWIyOTBYU0E5SUhSeWRXVTdYRzRnSUgxY2JpQWdjbVYwZFhKdUlIUm9hWE11WDJkbGRFUmxjR1Z1WkdWdVkybGxjeWhvY21WbUxDQm1iM1Z1WkNrdWRHaGxiaWhtZFc1amRHbHZiaWhrWlhCektTQjdYRzRnSUNBZ2RtRnlJR1JsY0UxbGRHRmtZWFJoVEc5aFpHVmtJRDBnVzEwN1hHNGdJQ0FnZG1GeUlHUmxjRkJ5YjIxcGMyVnpJRDBnWkdWd2N5NXRZWEFvWm5WdVkzUnBiMjRvWkdWd1NISmxaaWw3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1c2IyRmtLR1JsY0VoeVpXWXBMblJvWlc0b1puVnVZM1JwYjI0b2FIUnRiRTF2Ym05dFpYSXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR2gwYld4TmIyNXZiV1Z5TG0xbGRHRmtZWFJoVEc5aFpHVmtPMXh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmUzVpYVc1a0tIUm9hWE1wS1R0Y2JpQWdJQ0J5WlhSMWNtNGdVSEp2YldselpTNWhiR3dvWkdWd1VISnZiV2x6WlhNcE8xeHVJQ0I5TG1KcGJtUW9kR2hwY3lrcE8xeHVmVHRjYmx4dUx5b3FYRzRnS2lCTWFYTjBJR0ZzYkNCMGFHVWdhSFJ0YkNCa1pYQmxibVJsYm1OcFpYTWdabTl5SUhSb1pTQmtiMk4xYldWdWRDQmhkQ0JnYUhKbFptQXVYRzRnS2lCQWNHRnlZVzBnSUh0emRISnBibWQ5SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdoeVpXWWdJQ0FnSUNCVWFHVWdhSEpsWmlCMGJ5Qm5aWFFnWkdWd1pXNWtaVzVqYVdWeklHWnZjaTVjYmlBcUlFQndZWEpoYlNBZ2UwOWlhbVZqZEM0OGMzUnlhVzVuTEdKdmIyeGxZVzQrUFgwZ1ptOTFibVFnSUNBZ0lFRnVJRzlpYW1WamRDQnJaWGxsWkNCaWVTQlZVa3dnYjJZZ2RHaGxYRzRnS2lBZ0lDQWdZV3h5WldGa2VTQnlaWE52YkhabFpDQmtaWEJsYm1SbGJtTnBaWE11WEc0Z0tpQkFjR0Z5WVcwZ0lIdGliMjlzWldGdVBYMGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RISmhibk5wZEdsMlpTQlhhR1YwYUdWeUlIUnZJR3h2WVdRZ2RISmhibk5wZEdsMlpWeHVJQ29nSUNBZ0lHUmxjR1Z1WkdWdVkybGxjeTRnUkdWbVlYVnNkSE1nZEc4Z2RISjFaUzVjYmlBcUlFQnlaWFIxY200Z2UwRnljbUY1TGp4emRISnBibWMrZlNBZ1FTQnNhWE4wSUc5bUlHRnNiQ0IwYUdVZ2FIUnRiQ0JrWlhCbGJtUmxibU5wWlhNdVhHNGdLaTljYmtGdVlXeDVlbVZ5TG5CeWIzUnZkSGx3WlM1ZloyVjBSR1Z3Wlc1a1pXNWphV1Z6SUQwZ1puVnVZM1JwYjI0Z1gyZGxkRVJsY0dWdVpHVnVZMmxsY3lob2NtVm1MQ0JtYjNWdVpDd2dkSEpoYm5OcGRHbDJaU2tnZTF4dUlDQnBaaUFvWm05MWJtUWdQVDA5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUdadmRXNWtJRDBnZTMwN1hHNGdJQ0FnWm05MWJtUmJhSEpsWmwwZ1BTQjBjblZsTzF4dUlDQjlYRzRnSUdsbUlDaDBjbUZ1YzJsMGFYWmxJRDA5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNCMGNtRnVjMmwwYVhabElEMGdkSEoxWlR0Y2JpQWdmVnh1SUNCMllYSWdaR1Z3Y3lBOUlGdGRPMXh1SUNCeVpYUjFjbTRnZEdocGN5NXNiMkZrS0doeVpXWXBMblJvWlc0b1puVnVZM1JwYjI0b2FIUnRiRTF2Ym05dFpYSXBJSHRjYmlBZ0lDQjJZWElnZEhKaGJuTnBkR2wyWlVSbGNITWdQU0JiWFR0Y2JpQWdJQ0JvZEcxc1RXOXViMjFsY2k1a1pYQkljbVZtY3k1bWIzSkZZV05vS0daMWJtTjBhVzl1S0dSbGNFaHlaV1lwZTF4dUlDQWdJQ0FnYVdZZ0tHWnZkVzVrVzJSbGNFaHlaV1pkS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdSbGNITXVjSFZ6YUNoa1pYQkljbVZtS1R0Y2JpQWdJQ0FnSUdadmRXNWtXMlJsY0VoeVpXWmRJRDBnZEhKMVpUdGNiaUFnSUNBZ0lHbG1JQ2gwY21GdWMybDBhWFpsS1NCN1hHNGdJQ0FnSUNBZ0lIUnlZVzV6YVhScGRtVkVaWEJ6TG5CMWMyZ29kR2hwY3k1ZloyVjBSR1Z3Wlc1a1pXNWphV1Z6S0dSbGNFaHlaV1lzSUdadmRXNWtLU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmUzVpYVc1a0tIUm9hWE1wS1R0Y2JpQWdJQ0J5WlhSMWNtNGdVSEp2YldselpTNWhiR3dvZEhKaGJuTnBkR2wyWlVSbGNITXBPMXh1SUNCOUxtSnBibVFvZEdocGN5a3BMblJvWlc0b1puVnVZM1JwYjI0b2RISmhibk5wZEdsMlpVUmxjSE1wSUh0Y2JpQWdJQ0IyWVhJZ1lXeHNaR1Z3Y3lBOUlIUnlZVzV6YVhScGRtVkVaWEJ6TG5KbFpIVmpaU2htZFc1amRHbHZiaWhoTENCaUtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1lTNWpiMjVqWVhRb1lpazdYRzRnSUNBZ2ZTd2dXMTBwTG1OdmJtTmhkQ2hrWlhCektUdGNiaUFnSUNCeVpYUjFjbTRnWVd4c1pHVndjenRjYmlBZ2ZTazdYRzU5TzF4dVhHNW1kVzVqZEdsdmJpQnRZWFJqYUdWelJHOWpkVzFsYm5SR2IyeGtaWElvWkdWelkzSnBjSFJ2Y2l3Z2FISmxaaWtnZTF4dUlDQnBaaUFvSVdSbGMyTnlhWEIwYjNJdVkyOXVkR1Z1ZEVoeVpXWXBJSHRjYmlBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lIMWNiaUFnZG1GeUlHUmxjMk55YVhCMGIzSkViMk1nUFNCMWNtd3VjR0Z5YzJVb1pHVnpZM0pwY0hSdmNpNWpiMjUwWlc1MFNISmxaaWs3WEc0Z0lHbG1JQ2doWkdWelkzSnBjSFJ2Y2tSdll5QjhmQ0FoWkdWelkzSnBjSFJ2Y2tSdll5NXdZWFJvYm1GdFpTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ2ZWeHVJQ0IyWVhJZ2MyVmhjbU5vUkc5aklEMGdkWEpzTG5CaGNuTmxLR2h5WldZcE8xeHVJQ0JwWmlBb0lYTmxZWEpqYUVSdll5QjhmQ0FoYzJWaGNtTm9SRzlqTG5CaGRHaHVZVzFsS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0I5WEc0Z0lIWmhjaUJ6WldGeVkyaFFZWFJvSUQwZ2MyVmhjbU5vUkc5akxuQmhkR2h1WVcxbE8xeHVJQ0IyWVhJZ2JHRnpkRk5zWVhOb0lEMGdjMlZoY21Ob1VHRjBhQzVzWVhOMFNXNWtaWGhQWmloY0lpOWNJaWs3WEc0Z0lHbG1JQ2hzWVhOMFUyeGhjMmdnUGlBd0tTQjdYRzRnSUNBZ2MyVmhjbU5vVUdGMGFDQTlJSE5sWVhKamFGQmhkR2d1YzJ4cFkyVW9NQ3dnYkdGemRGTnNZWE5vS1R0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnWkdWelkzSnBjSFJ2Y2tSdll5NXdZWFJvYm1GdFpTNXBibVJsZUU5bUtITmxZWEpqYUZCaGRHZ3BJRDA5UFNBd08xeHVmVnh1WEc1QmJtRnNlWHBsY2k1d2NtOTBiM1I1Y0dVdVpXeGxiV1Z1ZEhOR2IzSkdiMnhrWlhJZ1BTQm1kVzVqZEdsdmJpQmxiR1Z0Wlc1MGMwWnZja1p2YkdSbGNpaG9jbVZtS1NCN1hHNGdJSEpsZEhWeWJpQjBhR2x6TG1Wc1pXMWxiblJ6TG1acGJIUmxjaWhtZFc1amRHbHZiaWhsYkdWdFpXNTBLWHRjYmlBZ0lDQnlaWFIxY200Z2JXRjBZMmhsYzBSdlkzVnRaVzUwUm05c1pHVnlLR1ZzWlcxbGJuUXNJR2h5WldZcE8xeHVJQ0I5S1R0Y2JuMDdYRzVjYmtGdVlXeDVlbVZ5TG5CeWIzUnZkSGx3WlM1aVpXaGhkbWx2Y25OR2IzSkdiMnhrWlhJZ1BTQm1kVzVqZEdsdmJpQmlaV2hoZG1sdmNuTkdiM0pHYjJ4a1pYSW9hSEpsWmlrZ2UxeHVJQ0J5WlhSMWNtNGdkR2hwY3k1aVpXaGhkbWx2Y25NdVptbHNkR1Z5S0daMWJtTjBhVzl1S0dKbGFHRjJhVzl5S1h0Y2JpQWdJQ0J5WlhSMWNtNGdiV0YwWTJobGMwUnZZM1Z0Wlc1MFJtOXNaR1Z5S0dKbGFHRjJhVzl5TENCb2NtVm1LVHRjYmlBZ2ZTazdYRzU5TzF4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ1lTQndjbTl0YVhObElIUm9ZWFFnY21WemIyeDJaWE1nZEc4Z1lTQlFUMHBQSUhKbGNISmxjMlZ1ZEdGMGFXOXVJRzltSUhSb1pTQnBiWEJ2Y25SY2JpQXFJSFJ5WldVc0lHbHVJR0VnWm05eWJXRjBJSFJvWVhRZ2JXRnBiblJoYVc1eklIUm9aU0J2Y21SbGNtbHVaeUJ2WmlCMGFHVWdTRlJOVENCcGJYQnZjblJ6SUhOd1pXTXVYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYUhKbFppQjBhR1VnYVcxd2IzSjBJSFJ2SUdkbGRDQnRaWFJoWkdGMFlTQm1iM0l1WEc0Z0tpQkFjbVYwZFhKdUlIdFFjbTl0YVhObGZWeHVJQ292WEc1QmJtRnNlWHBsY2k1d2NtOTBiM1I1Y0dVdWJXVjBZV1JoZEdGVWNtVmxJRDBnWm5WdVkzUnBiMjRnYldWMFlXUmhkR0ZVY21WbEtHaHlaV1lwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11Ykc5aFpDaG9jbVZtS1M1MGFHVnVLR1oxYm1OMGFXOXVLRzF2Ym05dFpYSXBlMXh1SUNBZ0lIWmhjaUJzYjJGa1pXUkljbVZtY3lBOUlIdDlPMXh1SUNBZ0lHeHZZV1JsWkVoeVpXWnpXMmh5WldaZElEMGdkSEoxWlR0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmJXVjBZV1JoZEdGVWNtVmxLRzF2Ym05dFpYSXNJR3h2WVdSbFpFaHlaV1p6S1R0Y2JpQWdmUzVpYVc1a0tIUm9hWE1wS1R0Y2JuMDdYRzVjYmtGdVlXeDVlbVZ5TG5CeWIzUnZkSGx3WlM1ZmJXVjBZV1JoZEdGVWNtVmxJRDBnWm5WdVkzUnBiMjRnWDIxbGRHRmtZWFJoVkhKbFpTaG9kRzFzVFc5dWIyMWxjaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNiMkZrWldSSWNtVm1jeWtnZTF4dUlDQnBaaUFvYkc5aFpHVmtTSEpsWm5NZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJR3h2WVdSbFpFaHlaV1p6SUQwZ2UzMDdYRzRnSUgxY2JpQWdjbVYwZFhKdUlHaDBiV3hOYjI1dmJXVnlMbTFsZEdGa1lYUmhURzloWkdWa0xuUm9aVzRvWm5WdVkzUnBiMjRvYldWMFlXUmhkR0VwSUh0Y2JpQWdJQ0J0WlhSaFpHRjBZU0E5SUh0Y2JpQWdJQ0FnSUdWc1pXMWxiblJ6T2lCdFpYUmhaR0YwWVM1bGJHVnRaVzUwY3l4Y2JpQWdJQ0FnSUdabFlYUjFjbVZ6T2lCdFpYUmhaR0YwWVM1bVpXRjBkWEpsY3l4Y2JpQWdJQ0FnSUdoeVpXWTZJR2gwYld4TmIyNXZiV1Z5TG1oeVpXWmNiaUFnSUNCOU8xeHVJQ0FnSUhKbGRIVnliaUJvZEcxc1RXOXViMjFsY2k1a1pYQnpURzloWkdWa0xuUm9aVzRvWm5WdVkzUnBiMjRvYUhKbFpuTXBJSHRjYmlBZ0lDQWdJSFpoY2lCa1pYQk5aWFJoWkdGMFlTQTlJRnRkTzF4dUlDQWdJQ0FnYUhKbFpuTXVabTl5UldGamFDaG1kVzVqZEdsdmJpaG9jbVZtS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ0WlhSaFpHRjBZVkJ5YjIxcGMyVWdQU0JRY205dGFYTmxMbkpsYzI5c2RtVW9kSEoxWlNrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hrWlhCTlpYUmhaR0YwWVM1c1pXNW5kR2dnUGlBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnYldWMFlXUmhkR0ZRY205dGFYTmxJRDBnWkdWd1RXVjBZV1JoZEdGYlpHVndUV1YwWVdSaGRHRXViR1Z1WjNSb0lDMGdNVjA3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2JXVjBZV1JoZEdGUWNtOXRhWE5sSUQwZ2JXVjBZV1JoZEdGUWNtOXRhWE5sTG5Sb1pXNG9ablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLQ0ZzYjJGa1pXUkljbVZtYzF0b2NtVm1YU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiRzloWkdWa1NISmxabk5iYUhKbFpsMGdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdVgyMWxkR0ZrWVhSaFZISmxaU2gwYUdsekxtaDBiV3hiYUhKbFpsMHNJR3h2WVdSbFpFaHlaV1p6S1R0Y2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRkJ5YjIxcGMyVXVjbVZ6YjJ4MlpTaDdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlMbUpwYm1Rb2RHaHBjeWtwTzF4dUlDQWdJQ0FnSUNCa1pYQk5aWFJoWkdGMFlTNXdkWE5vS0cxbGRHRmtZWFJoVUhKdmJXbHpaU2s3WEc0Z0lDQWdJQ0I5TG1KcGJtUW9kR2hwY3lrcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUZCeWIyMXBjMlV1WVd4c0tHUmxjRTFsZEdGa1lYUmhLUzUwYUdWdUtHWjFibU4wYVc5dUtHbHRjRzl5ZEUxbGRHRmtZWFJoS1NCN1hHNGdJQ0FnSUNBZ0lHMWxkR0ZrWVhSaExtbHRjRzl5ZEhNZ1BTQnBiWEJ2Y25STlpYUmhaR0YwWVR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdoMGJXeE5iMjV2YldWeUxtaDBiV3hNYjJGa1pXUXVkR2hsYmlobWRXNWpkR2x2Ymlod1lYSnpaV1JJZEcxc0tTQjdYRzRnSUNBZ0lDQWdJQ0FnYldWMFlXUmhkR0V1YUhSdGJDQTlJSEJoY25ObFpFaDBiV3c3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLRzFsZEdGa1lYUmhMbVZzWlcxbGJuUnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnRaWFJoWkdGMFlTNWxiR1Z0Wlc1MGN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtHVnNaVzFsYm5RcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ1lYUjBZV05vUkc5dFRXOWtkV3hsS0hCaGNuTmxaRWgwYld3c0lHVnNaVzFsYm5RcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ0WlhSaFpHRjBZVHRjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOUxtSnBibVFvZEdocGN5a3BPMXh1SUNCOUxtSnBibVFvZEdocGN5a3BPMXh1ZlR0Y2JseHVablZ1WTNScGIyNGdiV0YwWTJocGJtZEpiWEJ2Y25Rb2FXMXdiM0owUld4bGJXVnVkQ2tnZTF4dUlDQjJZWElnYldGMFkyaGxjMVJoWnlBOUlHUnZiVFV1Y0hKbFpHbGpZWFJsY3k1b1lYTlVZV2RPWVcxbEtHbHRjRzl5ZEVWc1pXMWxiblF1ZEdGblRtRnRaU2s3WEc0Z0lIWmhjaUJ0WVhSamFHVnpTSEpsWmlBOUlHUnZiVFV1Y0hKbFpHbGpZWFJsY3k1b1lYTkJkSFJ5Vm1Gc2RXVW9KMmh5WldZbkxDQmtiMjAxTG1kbGRFRjBkSEpwWW5WMFpTaHBiWEJ2Y25SRmJHVnRaVzUwTENBbmFISmxaaWNwS1R0Y2JpQWdkbUZ5SUcxaGRHTm9aWE5TWld3Z1BTQmtiMjAxTG5CeVpXUnBZMkYwWlhNdWFHRnpRWFIwY2xaaGJIVmxLQ2R5Wld3bkxDQmtiMjAxTG1kbGRFRjBkSEpwWW5WMFpTaHBiWEJ2Y25SRmJHVnRaVzUwTENBbmNtVnNKeWtwTzF4dUlDQnlaWFIxY200Z1pHOXROUzV3Y21Wa2FXTmhkR1Z6TGtGT1JDaHRZWFJqYUdWelZHRm5MQ0J0WVhSamFHVnpTSEpsWml3Z2JXRjBZMmhsYzFKbGJDazdYRzU5WEc1Y2JpOHZJRlJQUkU4b1lXcHZLVG9nVW1WbVlXTjBiM0lnYjNWMElHOW1JSFoxYkdOaGJtbDZaU0JwYm5SdklHUnZiVFV1WEc1MllYSWdjRzlzZVcxbGNrVjRkR1Z5Ym1Gc1UzUjViR1VnUFNCa2IyMDFMbkJ5WldScFkyRjBaWE11UVU1RUtGeHVJQ0JrYjIwMUxuQnlaV1JwWTJGMFpYTXVhR0Z6VkdGblRtRnRaU2duYkdsdWF5Y3BMRnh1SUNCa2IyMDFMbkJ5WldScFkyRjBaWE11YUdGelFYUjBjbFpoYkhWbEtDZHlaV3duTENBbmFXMXdiM0owSnlrc1hHNGdJR1J2YlRVdWNISmxaR2xqWVhSbGN5NW9ZWE5CZEhSeVZtRnNkV1VvSjNSNWNHVW5MQ0FuWTNOekp5bGNiaWs3WEc1Y2JuWmhjaUJsZUhSbGNtNWhiRk5qY21sd2RDQTlJR1J2YlRVdWNISmxaR2xqWVhSbGN5NUJUa1FvWEc0Z0lHUnZiVFV1Y0hKbFpHbGpZWFJsY3k1b1lYTlVZV2RPWVcxbEtDZHpZM0pwY0hRbktTeGNiaUFnWkc5dE5TNXdjbVZrYVdOaGRHVnpMbWhoYzBGMGRISW9KM055WXljcFhHNHBPMXh1WEc1MllYSWdhWE5JZEcxc1NXMXdiM0owVG05a1pTQTlJR1J2YlRVdWNISmxaR2xqWVhSbGN5NUJUa1FvWEc0Z0lHUnZiVFV1Y0hKbFpHbGpZWFJsY3k1b1lYTlVZV2RPWVcxbEtDZHNhVzVySnlrc1hHNGdJR1J2YlRVdWNISmxaR2xqWVhSbGN5NW9ZWE5CZEhSeVZtRnNkV1VvSjNKbGJDY3NJQ2RwYlhCdmNuUW5LU3hjYmlBZ1pHOXROUzV3Y21Wa2FXTmhkR1Z6TGs1UFZDaGNiaUFnSUNCa2IyMDFMbkJ5WldScFkyRjBaWE11YUdGelFYUjBjbFpoYkhWbEtDZDBlWEJsSnl3Z0oyTnpjeWNwWEc0Z0lDbGNiaWs3WEc1Y2JrRnVZV3g1ZW1WeUxuQnliM1J2ZEhsd1pTNWZhVzVzYVc1bFUzUjViR1Z6SUQwZ1puVnVZM1JwYjI0Z1gybHViR2x1WlZOMGVXeGxjeWhoYzNRc0lHaHlaV1lwSUh0Y2JpQWdkbUZ5SUdOemMweHBibXR6SUQwZ1pHOXROUzV4ZFdWeWVVRnNiQ2hoYzNRc0lIQnZiSGx0WlhKRmVIUmxjbTVoYkZOMGVXeGxLVHRjYmlBZ1kzTnpUR2x1YTNNdVptOXlSV0ZqYUNobWRXNWpkR2x2Ymloc2FXNXJLU0I3WEc0Z0lDQWdkbUZ5SUd4cGJtdEljbVZtSUQwZ1pHOXROUzVuWlhSQmRIUnlhV0oxZEdVb2JHbHVheXdnSjJoeVpXWW5LVHRjYmlBZ0lDQjJZWElnZFhKcElEMGdkWEpzTG5KbGMyOXNkbVVvYUhKbFppd2diR2x1YTBoeVpXWXBPMXh1SUNBZ0lIWmhjaUJqYjI1MFpXNTBJRDBnZEdocGN5NWZZMjl1ZEdWdWRGdDFjbWxkTzF4dUlDQWdJSFpoY2lCemRIbHNaU0E5SUdSdmJUVXVZMjl1YzNSeWRXTjBiM0p6TG1Wc1pXMWxiblFvSjNOMGVXeGxKeWs3WEc0Z0lDQWdaRzl0TlM1elpYUlVaWGgwUTI5dWRHVnVkQ2h6ZEhsc1pTd2dKMXhjYmljZ0t5QmpiMjUwWlc1MElDc2dKMXhjYmljcE8xeHVJQ0FnSUdSdmJUVXVjbVZ3YkdGalpTaHNhVzVyTENCemRIbHNaU2s3WEc0Z0lIMHVZbWx1WkNoMGFHbHpLU2s3WEc0Z0lISmxkSFZ5YmlCamMzTk1hVzVyY3k1c1pXNW5kR2dnUGlBd08xeHVmVHRjYmx4dVFXNWhiSGw2WlhJdWNISnZkRzkwZVhCbExsOXBibXhwYm1WVFkzSnBjSFJ6SUQwZ1puVnVZM1JwYjI0Z1gybHViR2x1WlZOamNtbHdkSE1vWVhOMExDQm9jbVZtS1NCN1hHNGdJSFpoY2lCelkzSnBjSFJ6SUQwZ1pHOXROUzV4ZFdWeWVVRnNiQ2hoYzNRc0lHVjRkR1Z5Ym1Gc1UyTnlhWEIwS1R0Y2JpQWdjMk55YVhCMGN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtITmpjbWx3ZENrZ2UxeHVJQ0FnSUhaaGNpQnpZM0pwY0hSSWNtVm1JRDBnWkc5dE5TNW5aWFJCZEhSeWFXSjFkR1VvYzJOeWFYQjBMQ0FuYzNKakp5azdYRzRnSUNBZ2RtRnlJSFZ5YVNBOUlIVnliQzV5WlhOdmJIWmxLR2h5WldZc0lITmpjbWx3ZEVoeVpXWXBPMXh1SUNBZ0lIWmhjaUJqYjI1MFpXNTBJRDBnZEdocGN5NWZZMjl1ZEdWdWRGdDFjbWxkTzF4dUlDQWdJSFpoY2lCcGJteHBibVZrSUQwZ1pHOXROUzVqYjI1emRISjFZM1J2Y25NdVpXeGxiV1Z1ZENnbmMyTnlhWEIwSnlrN1hHNGdJQ0FnWkc5dE5TNXpaWFJVWlhoMFEyOXVkR1Z1ZENocGJteHBibVZrTENBblhGeHVKeUFySUdOdmJuUmxiblFnS3lBblhGeHVKeWs3WEc0Z0lDQWdaRzl0TlM1eVpYQnNZV05sS0hOamNtbHdkQ3dnYVc1c2FXNWxaQ2s3WEc0Z0lIMHVZbWx1WkNoMGFHbHpLU2s3WEc0Z0lISmxkSFZ5YmlCelkzSnBjSFJ6TG14bGJtZDBhQ0ErSURBN1hHNTlPMXh1WEc1QmJtRnNlWHBsY2k1d2NtOTBiM1I1Y0dVdVgybHViR2x1WlVsdGNHOXlkSE1nUFNCbWRXNWpkR2x2YmlCZmFXNXNhVzVsU1cxd2IzSjBjeWhoYzNRc0lHaHlaV1lzSUd4dllXUmxaQ2tnZTF4dUlDQjJZWElnYVcxd2IzSjBjeUE5SUdSdmJUVXVjWFZsY25sQmJHd29ZWE4wTENCcGMwaDBiV3hKYlhCdmNuUk9iMlJsS1R0Y2JpQWdhVzF3YjNKMGN5NW1iM0pGWVdOb0tHWjFibU4wYVc5dUtHaDBiV3hKYlhCdmNuUXBJSHRjYmlBZ0lDQjJZWElnYVcxd2IzSjBTSEpsWmlBOUlHUnZiVFV1WjJWMFFYUjBjbWxpZFhSbEtHaDBiV3hKYlhCdmNuUXNJQ2RvY21WbUp5azdYRzRnSUNBZ2RtRnlJSFZ5YVNBOUlIVnliQzV5WlhOdmJIWmxLR2h5WldZc0lHbHRjRzl5ZEVoeVpXWXBPMXh1SUNBZ0lHbG1JQ2hzYjJGa1pXUmJkWEpwWFNrZ2UxeHVJQ0FnSUNBZ1pHOXROUzV5WlcxdmRtVW9hSFJ0YkVsdGNHOXlkQ2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVJQ0FnSUhaaGNpQmpiMjUwWlc1MElEMGdkR2hwY3k1blpYUk1iMkZrWldSQmMzUW9kWEpwTENCc2IyRmtaV1FwTzF4dUlDQWdJR1J2YlRVdWNtVndiR0ZqWlNob2RHMXNTVzF3YjNKMExDQmpiMjUwWlc1MEtUdGNiaUFnZlM1aWFXNWtLSFJvYVhNcEtUdGNiaUFnY21WMGRYSnVJR2x0Y0c5eWRITXViR1Z1WjNSb0lENGdNRHRjYm4wN1hHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QmhJSEJ5YjIxcGMyVWdjbVZ6YjJ4MmFXNW5JSFJ2SUdFZ1ptOXliU0J2WmlCMGFHVWdRVk5VSUhkcGRHZ2dZV3hzSUd4cGJtdHpJSEpsY0d4aFkyVmtYRzRnS2lCM2FYUm9JSFJvWlNCa2IyTjFiV1Z1ZENCMGFHVjVJR3hwYm1zZ2RHOHVJQzVqYzNNZ1lXNWtJQzV6WTNKcGNIUWdabWxzWlhNZ1ltVmpiMjFsSUNac2REdHpkSGxzWlNabmREc2dZVzVrWEc0Z0tpQW1iSFE3YzJOeWFYQjBKbWQwT3l3Z2NtVnpjR1ZqZEdsMlpXeDVMbHh1SUNwY2JpQXFJRlJvWlNCbGJHVnRaVzUwY3lCcGJpQjBhR1VnYkc5aFpHVmtJR1J2WTNWdFpXNTBJR0Z5WlNCMWJtMXZaR2xtYVdWa0lHWnliMjBnZEdobGFYSWdiM0pwWjJsdVlXeGNiaUFxSUdSdlkzVnRaVzUwY3k1Y2JpQXFYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYUhKbFppQlVhR1VnWkc5amRXMWxiblFnZEc4Z2JHOWhaQzVjYmlBcUlFQndZWEpoYlNCN1QySnFaV04wTGp4emRISnBibWNzWW05dmJHVmhiajQ5ZlNCc2IyRmtaV1FnUVc0Z2IySnFaV04wSUd0bGVXVmtJR0o1SUdGc2NtVmhaSGtnYkc5aFpHVmtJR1J2WTNWdFpXNTBjeTVjYmlBcUlFQnlaWFIxY200Z2UxQnliMjFwYzJVdVBFUnZZM1Z0Wlc1MFFWTlVQbjFjYmlBcUwxeHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbWRsZEV4dllXUmxaRUZ6ZENBOUlHWjFibU4wYVc5dUlHZGxkRXh2WVdSbFpFRnpkQ2hvY21WbUxDQnNiMkZrWldRcElIdGNiaUFnYVdZZ0tDRnNiMkZrWldRcElIdGNiaUFnSUNCc2IyRmtaV1FnUFNCN2ZUdGNiaUFnZlZ4dUlDQnNiMkZrWldSYmFISmxabDBnUFNCMGNuVmxPMXh1SUNCMllYSWdjR0Z5YzJWa1JHOWpkVzFsYm5RZ1BTQjBhR2x6TG5CaGNuTmxaRVJ2WTNWdFpXNTBjMXRvY21WbVhUdGNiaUFnZG1GeUlHRnVZV3g1ZW1Wa1JHOWpkVzFsYm5RZ1BTQjBhR2x6TG1oMGJXeGJhSEpsWmwwN1hHNGdJSFpoY2lCaGMzUkRiM0I1SUQwZ1pHOXROUzV3WVhKelpTaGtiMjAxTG5ObGNtbGhiR2w2WlNod1lYSnpaV1JFYjJOMWJXVnVkQ2twTzF4dUlDQXZMeUJYYUdWdVpYWmxjaUIzWlNCcGJteHBibVVnYzI5dFpYUm9hVzVuTENCeVpYTmxkQ0JwYm14cGJtVmtJSFJ2SUhSeWRXVWdkRzhnYTI1dmR5QjBhR0YwSUdGdWIyRjBhR1Z5WEc0Z0lDOHZJR2x1YkdsdWFXNW5JSEJoYzNNZ2FYTWdibVZsWkdWa08xeHVJQ0IwYUdsekxsOXBibXhwYm1WVGRIbHNaWE1vWVhOMFEyOXdlU3dnYUhKbFppazdYRzRnSUhSb2FYTXVYMmx1YkdsdVpWTmpjbWx3ZEhNb1lYTjBRMjl3ZVN3Z2FISmxaaWs3WEc0Z0lIUm9hWE11WDJsdWJHbHVaVWx0Y0c5eWRITW9ZWE4wUTI5d2VTd2dhSEpsWml3Z2JHOWhaR1ZrS1R0Y2JpQWdjbVYwZFhKdUlHRnpkRU52Y0hrN1hHNTlPMXh1WEc0dktpcGNiaUFxSUVOaGJHeHpJR0JrYjIwMUxtNXZaR1ZYWVd4clFXeHNZQ0J2YmlCbFlXTm9JR1J2WTNWdFpXNTBJSFJvWVhRZ1lFRnVZWGw2YkdWeVlDQm9ZWE1nYkdGdlpHVmtMbHh1SUNvZ1FIQmhjbUZ0SUNCN1QySnFaV04wZlNCd2NtVmthV05oZEdVZ1FTQmtiMjAxSUhCeVpXUnBZMkYwWlM1Y2JpQXFJRUJ5WlhSMWNtNGdlMDlpYW1WamRIMWNiaUFxTDF4dVFXNWhiSGw2WlhJdWNISnZkRzkwZVhCbExtNXZaR1ZYWVd4clJHOWpkVzFsYm5SeklEMGdablZ1WTNScGIyNGdibTlrWlZkaGJHdEViMk4xYldWdWRITW9jSEpsWkdsallYUmxLU0I3WEc0Z0lHWnZjaUFvZG1GeUlHaHlaV1lnYVc0Z2RHaHBjeTV3WVhKelpXUkViMk4xYldWdWRITXBJSHRjYmlBZ0lDQjJZWElnYldGMFkyZ2dQU0JrYjIwMUxtNXZaR1ZYWVd4cktIUm9hWE11Y0dGeWMyVmtSRzlqZFcxbGJuUnpXMmh5WldaZExDQndjbVZrYVdOaGRHVXBPMXh1SUNBZ0lHbG1JQ2h0WVhSamFDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHMWhkR05vTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiblZzYkR0Y2JuMDdYRzVjYmk4cUtseHVJQ29nUTJGc2JITWdZR1J2YlRVdWJtOWtaVmRoYkd0QmJHeGdJRzl1SUdWaFkyZ2daRzlqZFcxbGJuUWdkR2hoZENCZ1FXNWhlWHBzWlhKZ0lHaGhjeUJzWVc5a1pXUXVYRzRnS2lCQWNHRnlZVzBnSUh0UFltcGxZM1I5SUhCeVpXUnBZMkYwWlNCQklHUnZiVFVnY0hKbFpHbGpZWFJsTGx4dUlDb2dRSEpsZEhWeWJpQjdUMkpxWldOMGZWeHVJQ292WEc1QmJtRnNlWHBsY2k1d2NtOTBiM1I1Y0dVdWJtOWtaVmRoYkd0QmJHeEViMk4xYldWdWRITWdQU0JtZFc1amRHbHZiaUJ1YjJSbFYyRnNhMFJ2WTNWdFpXNTBjeWh3Y21Wa2FXTmhkR1VwSUh0Y2JpQWdkbUZ5SUhKbGMzVnNkSE1nUFNCYlhUdGNiaUFnWm05eUlDaDJZWElnYUhKbFppQnBiaUIwYUdsekxuQmhjbk5sWkVSdlkzVnRaVzUwY3lrZ2UxeHVJQ0FnSUhaaGNpQnVaWGRPYjJSbGN5QTlJR1J2YlRVdWJtOWtaVmRoYkd0QmJHd29kR2hwY3k1d1lYSnpaV1JFYjJOMWJXVnVkSE5iYUhKbFpsMHNJSEJ5WldScFkyRjBaU2s3WEc0Z0lDQWdjbVZ6ZFd4MGN5QTlJSEpsYzNWc2RITXVZMjl1WTJGMEtHNWxkMDV2WkdWektUdGNiaUFnZlZ4dUlDQnlaWFIxY200Z2NtVnpkV3gwY3p0Y2JuMDdYRzVjYmk4cUtpQkJibTV2ZEdGMFpYTWdZV3hzSUd4dllXUmxaQ0J0WlhSaFpHRjBZU0IzYVhSb0lHbDBjeUJrYjJOMWJXVnVkR0YwYVc5dUxpQXFMMXh1UVc1aGJIbDZaWEl1Y0hKdmRHOTBlWEJsTG1GdWJtOTBZWFJsSUQwZ1puVnVZM1JwYjI0Z1lXNXViM1JoZEdVb0tTQjdYRzRnSUdsbUlDaDBhR2x6TG1abFlYUjFjbVZ6TG14bGJtZDBhQ0ErSURBcElIdGNiaUFnSUNCMllYSWdabVZoZEhWeVpVVnNJRDBnWkc5amN5NW1aV0YwZFhKbFJXeGxiV1Z1ZENoMGFHbHpMbVpsWVhSMWNtVnpLVHRjYmlBZ0lDQjBhR2x6TG1Wc1pXMWxiblJ6TG5WdWMyaHBablFvWm1WaGRIVnlaVVZzS1R0Y2JpQWdJQ0IwYUdsekxtVnNaVzFsYm5SelFubFVZV2RPWVcxbFcyWmxZWFIxY21WRmJDNXBjMTBnUFNCbVpXRjBkWEpsUld3N1hHNGdJSDFjYmlBZ2RtRnlJR0psYUdGMmFXOXljMEo1VG1GdFpTQTlJSFJvYVhNdVltVm9ZWFpwYjNKelFubE9ZVzFsTzF4dUlDQjJZWElnWld4bGJXVnVkRWhsYkhCbGNpQTlJR1oxYm1OMGFXOXVLR1JsYzJOeWFYQjBiM0lwZTF4dUlDQWdJR1J2WTNNdVlXNXViM1JoZEdWRmJHVnRaVzUwS0dSbGMyTnlhWEIwYjNJc0lHSmxhR0YyYVc5eWMwSjVUbUZ0WlNrN1hHNGdJSDA3WEc0Z0lIUm9hWE11Wld4bGJXVnVkSE11Wm05eVJXRmphQ2hsYkdWdFpXNTBTR1ZzY0dWeUtUdGNiaUFnZEdocGN5NWlaV2hoZG1sdmNuTXVabTl5UldGamFDaGxiR1Z0Wlc1MFNHVnNjR1Z5S1RzZ0x5OGdVMkZ0WlNCemFHRndaUzVjYmlBZ2RHaHBjeTVpWldoaGRtbHZjbk11Wm05eVJXRmphQ2htZFc1amRHbHZiaWhpWldoaGRtbHZjaWw3WEc0Z0lDQWdhV1lnS0dKbGFHRjJhVzl5TG1seklDRTlQU0JpWldoaGRtbHZjaTV6ZVcxaWIyd2dKaVlnWW1Wb1lYWnBiM0l1YzNsdFltOXNLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtSmxhR0YyYVc5eWMwSjVUbUZ0WlZ0aVpXaGhkbWx2Y2k1emVXMWliMnhkSUQwZ2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUgxY2JpQWdmUzVpYVc1a0tIUm9hWE1wS1R0Y2JuMDdYRzVjYm1aMWJtTjBhVzl1SUdGMGRHRmphRVJ2YlUxdlpIVnNaU2h3WVhKelpXUkpiWEJ2Y25Rc0lHVnNaVzFsYm5RcElIdGNiaUFnZG1GeUlHUnZiVTF2WkhWc1pYTWdQU0J3WVhKelpXUkpiWEJ2Y25SYkoyUnZiUzF0YjJSMWJHVW5YVHRjYmlBZ1ptOXlJQ2gyWVhJZ2FTQTlJREFzSUdSdmJVMXZaSFZzWlRzZ2FTQThJR1J2YlUxdlpIVnNaWE11YkdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNCa2IyMU5iMlIxYkdVZ1BTQmtiMjFOYjJSMWJHVnpXMmxkTzF4dUlDQWdJR2xtSUNoa2IyMDFMbWRsZEVGMGRISnBZblYwWlNoa2IyMU5iMlIxYkdVc0lDZHBaQ2NwSUQwOVBTQmxiR1Z0Wlc1MExtbHpLU0I3WEc0Z0lDQWdJQ0JsYkdWdFpXNTBMbVJ2YlUxdlpIVnNaU0E5SUdSdmJVMXZaSFZzWlR0Y2JpQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzRnSUgxY2JuMWNibHh1THlvcUlGSmxiVzkyWlhNZ2NtVmtkVzVrWVc1MElIQnliM0JsY25ScFpYTWdabkp2YlNCMGFHVWdZMjlzYkdWamRHVmtJR1JsYzJOeWFYQjBiM0p6TGlBcUwxeHVRVzVoYkhsNlpYSXVjSEp2ZEc5MGVYQmxMbU5zWldGdUlEMGdablZ1WTNScGIyNGdZMnhsWVc0b0tTQjdYRzRnSUhSb2FYTXVaV3hsYldWdWRITXVabTl5UldGamFDaGtiMk56TG1Oc1pXRnVSV3hsYldWdWRDazdYRzU5TzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlFRnVZV3g1ZW1WeU8xeHVJbDE5IiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZXN1dGlsICAgID0gcmVxdWlyZSgnLi9lc3V0aWwnKTtcbnZhciBhc3RWYWx1ZSA9IHJlcXVpcmUoJy4vYXN0LXZhbHVlJyk7XG5cbnZhciBhbmFseXplUHJvcGVydGllcyA9IGZ1bmN0aW9uKG5vZGUpIHtcblxuICB2YXIgYW5hbHl6ZWRQcm9wcyA9IFtdO1xuXG4gIGlmIChub2RlLnR5cGUgIT0gJ09iamVjdEV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIGFuYWx5emVkUHJvcHM7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHJvcGVydHkgPSBub2RlLnByb3BlcnRpZXNbaV07XG4gICAgdmFyIHByb3AgPSBlc3V0aWwudG9Qcm9wZXJ0eURlc2NyaXB0b3IocHJvcGVydHkpO1xuICAgIHByb3AucHVibGlzaGVkID0gdHJ1ZTtcblxuICAgIGlmIChwcm9wZXJ0eS52YWx1ZS50eXBlID09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgLyoqXG4gICAgICAgKiBQYXJzZSB0aGUgZXhwcmVzc2lvbiBpbnNpZGUgYSBwcm9wZXJ0eSBvYmplY3QgYmxvY2suXG4gICAgICAgKiBwcm9wZXJ0eToge1xuICAgICAgICogICBrZXk6IHtcbiAgICAgICAqICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgKiAgICAgbm90aWZ5OiB0cnVlLFxuICAgICAgICogICAgIHZhbHVlOiAtMSxcbiAgICAgICAqICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgICAqICAgICByZWZsZWN0VG9BdHRyaWJ1dGU6IHRydWVcbiAgICAgICAqICAgfVxuICAgICAgICogfVxuICAgICAgICovXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHByb3BlcnR5LnZhbHVlLnByb3BlcnRpZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHByb3BlcnR5QXJnID0gcHJvcGVydHkudmFsdWUucHJvcGVydGllc1tqXTtcbiAgICAgICAgdmFyIHByb3BlcnR5S2V5ID0gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKHByb3BlcnR5QXJnLmtleSk7XG5cbiAgICAgICAgc3dpdGNoKHByb3BlcnR5S2V5KSB7XG4gICAgICAgICAgY2FzZSAndHlwZSc6IHtcbiAgICAgICAgICAgIHByb3AudHlwZSA9IGVzdXRpbC5vYmplY3RLZXlUb1N0cmluZyhwcm9wZXJ0eUFyZy52YWx1ZSk7XG4gICAgICAgICAgICBpZiAocHJvcC50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIHR5cGUgaW4gcHJvcGVydHkgb2JqZWN0LicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHByb3BlcnR5QXJnLmxvYy5zdGFydFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdub3RpZnknOiB7XG4gICAgICAgICAgICBwcm9wLm5vdGlmeSA9IGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKHByb3BlcnR5QXJnLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wLm5vdGlmeSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBwcm9wLm5vdGlmeSA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnb2JzZXJ2ZXInOiB7XG4gICAgICAgICAgICBwcm9wLm9ic2VydmVyID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcudmFsdWUpO1xuICAgICAgICAgICAgcHJvcC5vYnNlcnZlck5vZGUgPSBwcm9wZXJ0eUFyZy52YWx1ZTtcbiAgICAgICAgICAgIGlmIChwcm9wLm9ic2VydmVyID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHByb3Aub2JzZXJ2ZXIgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3JlYWRPbmx5Jzoge1xuICAgICAgICAgICAgcHJvcC5yZWFkT25seSA9IGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKHByb3BlcnR5QXJnLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wLnJlYWRPbmx5ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHByb3AucmVhZE9ubHkgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3JlZmxlY3RUb0F0dHJpYnV0ZSc6IHtcbiAgICAgICAgICAgIHByb3AucmVmbGVjdFRvQXR0cmlidXRlID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUocHJvcGVydHlBcmcpO1xuICAgICAgICAgICAgaWYgKHByb3AucmVmbGVjdFRvQXR0cmlidXRlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHByb3AucmVmbGVjdFRvQXR0cmlidXRlID0gYXN0VmFsdWUuQ0FOVF9DT05WRVJUO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd2YWx1ZSc6IHtcbiAgICAgICAgICAgIHByb3AuZGVmYXVsdCA9IGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKHByb3BlcnR5QXJnLnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwcm9wLmRlZmF1bHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgcHJvcC5kZWZhdWx0ID0gYXN0VmFsdWUuQ0FOVF9DT05WRVJUO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wLnR5cGUpIHtcbiAgICAgIHRocm93IHtcbiAgICAgICAgbWVzc2FnZTogJ1VuYWJsZSB0byBkZXRlcm1pbmUgbmFtZSBmb3IgcHJvcGVydHkga2V5LicsXG4gICAgICAgIGxvY2F0aW9uOiBub2RlLmxvYy5zdGFydFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhbmFseXplZFByb3BzLnB1c2gocHJvcCk7XG4gIH1cbiAgcmV0dXJuIGFuYWx5emVkUHJvcHM7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gYW5hbHl6ZVByb3BlcnRpZXM7XG5cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcblxuLy8gdXNlZnVsIHRvb2wgdG8gdmlzdWFsaXplIEFTVDogaHR0cDovL2VzcHJpbWEub3JnL2RlbW8vcGFyc2UuaHRtbFxuXG4vKipcbiAqIGNvbnZlcnRzIGxpdGVyYWw6IHtcInR5cGVcIjogXCJMaXRlcmFsXCIsIFwidmFsdWVcIjogNSwgIFwicmF3XCI6IFwiNVwiIH1cbiAqIHRvIHN0cmluZ1xuICovXG5mdW5jdGlvbiBsaXRlcmFsVG9WYWx1ZShsaXRlcmFsKSB7XG4gIHJldHVybiBsaXRlcmFsLnZhbHVlO1xufVxuXG4vKipcbiAqIGNvbnZlcnRzIHVuYXJ5IHRvIHN0cmluZ1xuICogdW5hcnk6IHsgdHlwZTogJ1VuYXJ5RXhwcmVzc2lvbicsIG9wZXJhdG9yOiAnLScsIGFyZ3VtZW50OiB7IC4uLiB9IH1cbiAqL1xuZnVuY3Rpb24gdW5hcnlUb1ZhbHVlKHVuYXJ5KSB7XG4gIHZhciBhcmdWYWx1ZSA9IGV4cHJlc3Npb25Ub1ZhbHVlKHVuYXJ5LmFyZ3VtZW50KTtcbiAgaWYgKGFyZ1ZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuO1xuICByZXR1cm4gdW5hcnkub3BlcmF0b3IgKyBhcmdWYWx1ZTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0cyBpZGVudGlmaWVyIHRvIGl0cyB2YWx1ZVxuICogaWRlbnRpZmllciB7IFwidHlwZVwiOiBcIklkZW50aWZpZXJcIiwgXCJuYW1lXCI6IFwiTnVtYmVyIH1cbiAqL1xuZnVuY3Rpb24gaWRlbnRpZmllclRvVmFsdWUoaWRlbnRpZmllcikge1xuICByZXR1cm4gaWRlbnRpZmllci5uYW1lO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGlzIGEgYmxvY2sgc3RhdGVtZW50LlxuICovXG5mdW5jdGlvbiBmdW5jdGlvbkRlY2xhcmF0aW9uVG9WYWx1ZShmbikge1xuICBpZiAoZm4uYm9keS50eXBlID09IFwiQmxvY2tTdGF0ZW1lbnRcIilcbiAgICByZXR1cm4gYmxvY2tTdGF0ZW1lbnRUb1ZhbHVlKGZuLmJvZHkpO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvbkV4cHJlc3Npb25Ub1ZhbHVlKGZuKSB7XG4gIGlmIChmbi5ib2R5LnR5cGUgPT0gXCJCbG9ja1N0YXRlbWVudFwiKVxuICAgIHJldHVybiBibG9ja1N0YXRlbWVudFRvVmFsdWUoZm4uYm9keSk7XG59XG4vKipcbiAqIEJsb2NrIHN0YXRlbWVudDogZmluZCBsYXN0IHJldHVybiBzdGF0ZW1lbnQsIGFuZCByZXR1cm4gaXRzIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGJsb2NrU3RhdGVtZW50VG9WYWx1ZShibG9jaykge1xuICBmb3IgKHZhciBpPWJsb2NrLmJvZHkubGVuZ3RoIC0gMTsgaT49IDA7IGktLSkge1xuICAgIGlmIChibG9jay5ib2R5W2ldLnR5cGUgPT09IFwiUmV0dXJuU3RhdGVtZW50XCIpXG4gICAgICByZXR1cm4gcmV0dXJuU3RhdGVtZW50VG9WYWx1ZShibG9jay5ib2R5W2ldKTtcbiAgfVxufVxuXG4vKipcbiAqIEV2YWx1YXRlcyByZXR1cm4ncyBhcmd1bWVudFxuICovXG5mdW5jdGlvbiByZXR1cm5TdGF0ZW1lbnRUb1ZhbHVlKHJldCkge1xuICByZXR1cm4gZXhwcmVzc2lvblRvVmFsdWUocmV0LmFyZ3VtZW50KTtcbn1cblxuLyoqXG4gKiBFbmNsb3NlIGNvbnRhaW5pbmcgdmFsdWVzIGluIFtdXG4gKi9cbmZ1bmN0aW9uIGFycmF5RXhwcmVzc2lvblRvVmFsdWUoYXJyeSkge1xuICB2YXIgdmFsdWUgPSAnWyc7XG4gIGZvciAodmFyIGk9MDsgaTxhcnJ5LmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHYgPSBleHByZXNzaW9uVG9WYWx1ZShhcnJ5LmVsZW1lbnRzW2ldKTtcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgY29udGludWU7XG4gICAgaWYgKGkgIT09IDApXG4gICAgICB2YWx1ZSArPSAnLCAnO1xuICAgIHZhbHVlICs9IHY7XG4gIH1cbiAgdmFsdWUgKz0gJ10nO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogTWFrZSBpdCBsb29rIGxpa2UgYW4gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIG9iamVjdEV4cHJlc3Npb25Ub1ZhbHVlKG9iaikge1xuICB2YXIgdmFsdWUgPSAneyc7XG4gIGZvciAodmFyIGk9MDsgaTxvYmoucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrID0gZXhwcmVzc2lvblRvVmFsdWUob2JqLnByb3BlcnRpZXNbaV0ua2V5KTtcbiAgICB2YXIgdiA9IGV4cHJlc3Npb25Ub1ZhbHVlKG9iai5wcm9wZXJ0aWVzW2ldLnZhbHVlKTtcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgY29udGludWU7XG4gICAgaWYgKGkgIT09IDApXG4gICAgICB2YWx1ZSArPSAnLCAnO1xuICAgIHZhbHVlICs9ICdcIicgKyBrICsgJ1wiOiAnICsgdjtcbiAgfVxuICB2YWx1ZSArPSAnfSc7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBNZW1iZXJFeHByZXNzaW9uIHJlZmVyZW5jZXMgYSB2YXJpYWJsZSB3aXRoIG5hbWVcbiAqL1xuZnVuY3Rpb24gbWVtYmVyRXhwcmVzc2lvblRvVmFsdWUobWVtYmVyKSB7XG4gIHJldHVybiBleHByZXNzaW9uVG9WYWx1ZShtZW1iZXIub2JqZWN0KSArIFwiLlwiICsgZXhwcmVzc2lvblRvVmFsdWUobWVtYmVyLnByb3BlcnR5KTtcbn1cblxuLyoqXG4gKiBUcmllcyB0byBnZXQgYSB2YWx1ZSBmcm9tIGV4cHJlc3Npb24uIEhhbmRsZXMgTGl0ZXJhbCwgVW5hcnlFeHByZXNzaW9uXG4gKiByZXR1cm5zIHVuZGVmaW5lZCBvbiBmYWlsdXJlXG4gKiB2YWx1ZUV4cHJlc3Npb24gZXhhbXBsZTpcbiAqIHsgdHlwZTogXCJMaXRlcmFsXCIsXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbikge1xuICBzd2l0Y2godmFsdWVFeHByZXNzaW9uLnR5cGUpIHtcbiAgICBjYXNlICdMaXRlcmFsJzpcbiAgICAgIHJldHVybiBsaXRlcmFsVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ1VuYXJ5RXhwcmVzc2lvbic6XG4gICAgICByZXR1cm4gdW5hcnlUb1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnSWRlbnRpZmllcic6XG4gICAgICByZXR1cm4gaWRlbnRpZmllclRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdGdW5jdGlvbkRlY2xhcmF0aW9uJzpcbiAgICAgIHJldHVybiBmdW5jdGlvbkRlY2xhcmF0aW9uVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ0Z1bmN0aW9uRXhwcmVzc2lvbic6XG4gICAgICByZXR1cm4gZnVuY3Rpb25FeHByZXNzaW9uVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ0FycmF5RXhwcmVzc2lvbic6XG4gICAgICByZXR1cm4gYXJyYXlFeHByZXNzaW9uVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGNhc2UgJ09iamVjdEV4cHJlc3Npb24nOlxuICAgICAgcmV0dXJuIG9iamVjdEV4cHJlc3Npb25Ub1ZhbHVlKHZhbHVlRXhwcmVzc2lvbik7XG4gICAgY2FzZSAnSWRlbnRpZmllcic6XG4gICAgICByZXR1cm4gaWRlbnRpZmllclRvVmFsdWUodmFsdWVFeHByZXNzaW9uKTtcbiAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzpcbiAgICAgIHJldHVybiBtZW1iZXJFeHByZXNzaW9uVG9WYWx1ZSh2YWx1ZUV4cHJlc3Npb24pO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxudmFyIENBTlRfQ09OVkVSVCA9ICdVTktOT1dOJztcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDQU5UX0NPTlZFUlQ6IENBTlRfQ09OVkVSVCxcbiAgZXhwcmVzc2lvblRvVmFsdWU6IGV4cHJlc3Npb25Ub1ZhbHVlXG59O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xudmFyIGVzdHJhdmVyc2UgPSByZXF1aXJlKCdlc3RyYXZlcnNlJyk7XG5cbnZhciBkb2NzICAgPSByZXF1aXJlKCcuL2RvY3MnKTtcbnZhciBlc3V0aWwgPSByZXF1aXJlKCcuL2VzdXRpbCcpO1xudmFyIGpzZG9jICA9IHJlcXVpcmUoJy4vanNkb2MnKTtcbnZhciBhbmFseXplUHJvcGVydGllcyA9IHJlcXVpcmUoJy4vYW5hbHl6ZS1wcm9wZXJ0aWVzJyk7XG52YXIgYXN0VmFsdWUgPSByZXF1aXJlKCcuL2FzdC12YWx1ZS5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJlaGF2aW9yRmluZGVyKCkge1xuICAvKiogQHR5cGUgeyFBcnJheTxCZWhhdmlvckRlc2NyaXB0b3I+fSBUaGUgYmVoYXZpb3JzIHdlJ3ZlIGZvdW5kLiAqL1xuICB2YXIgYmVoYXZpb3JzID0gW107XG5cbiAgdmFyIGN1cnJlbnRCZWhhdmlvciA9IG51bGw7XG5cbiAgLyoqXG4gICAqIHNwZWNpYWwtY2FzZSBwcm9wZXJ0aWVzXG4gICAqL1xuICB2YXIgcHJvcGVydHlIYW5kbGVycyA9IHtcbiAgICBwcm9wZXJ0aWVzOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgcHJvcHMgPSBhbmFseXplUHJvcGVydGllcyhub2RlKTtcblxuICAgICAgZm9yICh2YXIgaT0wOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMucHVzaChwcm9wc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBtZXJnZXMgYmVoYXZpb3Igd2l0aCBwcmVleGlzdGluZyBiZWhhdmlvciB3aXRoIHRoZSBzYW1lIG5hbWUuXG4gICAqIGhlcmUgdG8gc3VwcG9ydCBtdWx0aXBsZSBAcG9seW1lckJlaGF2aW9yIHRhZ3MgcmVmZXJyaW5nXG4gICAqIHRvIHNhbWUgYmVoYXZpb3IuIFNlZSBpcm9uLW11bHRpLXNlbGVjdGFibGUgZm9yIGV4YW1wbGUuXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZUJlaGF2aW9yKG5ld0JlaGF2aW9yKSB7XG4gICAgdmFyIGlzQmVoYXZpb3JJbXBsID0gZnVuY3Rpb24oYikgeyAvLyBmaWx0ZXIgb3V0IEJlaGF2aW9ySW1wbFxuICAgICAgcmV0dXJuIGIuaW5kZXhPZihuZXdCZWhhdmlvci5pcykgPT09IC0xO1xuICAgIH07XG4gICAgZm9yICh2YXIgaT0wOyBpPGJlaGF2aW9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5ld0JlaGF2aW9yLmlzICE9PSBiZWhhdmlvcnNbaV0uaXMpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgLy8gbWVyZ2UgZGVzYywgbG9uZ2VzdCBkZXNjIHdpbnNcbiAgICAgIGlmIChuZXdCZWhhdmlvci5kZXNjKSB7XG4gICAgICAgIGlmIChiZWhhdmlvcnNbaV0uZGVzYykge1xuICAgICAgICAgIGlmIChuZXdCZWhhdmlvci5kZXNjLmxlbmd0aCA+IGJlaGF2aW9yc1tpXS5kZXNjLmxlbmd0aClcbiAgICAgICAgICAgIGJlaGF2aW9yc1tpXS5kZXNjID0gbmV3QmVoYXZpb3IuZGVzYztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBiZWhhdmlvcnNbaV0uZGVzYyA9IG5ld0JlaGF2aW9yLmRlc2M7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIG1lcmdlIGRlbW9zXG4gICAgICBiZWhhdmlvcnNbaV0uZGVtb3MgPSAoYmVoYXZpb3JzW2ldLmRlbW9zIHx8IFtdKS5jb25jYXQobmV3QmVoYXZpb3IuZGVtb3MgfHwgW10pO1xuICAgICAgLy8gbWVyZ2UgZXZlbnRzLFxuICAgICAgYmVoYXZpb3JzW2ldLmV2ZW50cyA9IChiZWhhdmlvcnNbaV0uZXZlbnRzIHx8IFtdKS5jb25jYXQobmV3QmVoYXZpb3IuZXZlbnRzIHx8IFtdKTtcbiAgICAgIC8vIG1lcmdlIHByb3BlcnRpZXNcbiAgICAgIGJlaGF2aW9yc1tpXS5wcm9wZXJ0aWVzID0gKGJlaGF2aW9yc1tpXS5wcm9wZXJ0aWVzIHx8IFtdKS5jb25jYXQobmV3QmVoYXZpb3IucHJvcGVydGllcyB8fCBbXSk7XG4gICAgICAvLyBtZXJnZSBiZWhhdmlvcnNcbiAgICAgIGJlaGF2aW9yc1tpXS5iZWhhdmlvcnMgPVxuICAgICAgICAoYmVoYXZpb3JzW2ldLmJlaGF2aW9ycyB8fCBbXSkuY29uY2F0KG5ld0JlaGF2aW9yLmJlaGF2aW9ycyB8fCBbXSlcbiAgICAgICAgLmZpbHRlcihpc0JlaGF2aW9ySW1wbCk7XG4gICAgICByZXR1cm4gYmVoYXZpb3JzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QmVoYXZpb3I7XG4gIH1cblxuICAvKipcbiAgICogZ2V0cyB0aGUgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgYSBiZWhhdmlvciBmcm9tIGEgbm9kZS5cbiAgICovXG4gIGZ1bmN0aW9uIGJlaGF2aW9yRXhwcmVzc2lvbihub2RlKSB7XG4gICAgc3dpdGNoKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAnRXhwcmVzc2lvblN0YXRlbWVudCc6XG4gICAgICAgIHJldHVybiBub2RlLmV4cHJlc3Npb24ucmlnaHQ7XG4gICAgICBjYXNlICdWYXJpYWJsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgcmV0dXJuIG5vZGUuZGVjbGFyYXRpb25zLmxlbmd0aCA+IDAgPyBub2RlLmRlY2xhcmF0aW9uc1swXS5pbml0IDogbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY2hlY2tzIHdoZXRoZXIgYW4gZXhwcmVzc2lvbiBpcyBhIHNpbXBsZSBhcnJheSBjb250YWluaW5nIG9ubHkgbWVtYmVyXG4gICAqIGV4cHJlc3Npb25zIG9yIGlkZW50aWZpZXJzLlxuICAgKi9cbiAgZnVuY3Rpb24gaXNTaW1wbGVCZWhhdmlvckFycmF5KGV4cHJlc3Npb24pIHtcbiAgICBpZiAoIWV4cHJlc3Npb24gfHwgZXhwcmVzc2lvbi50eXBlICE9PSAnQXJyYXlFeHByZXNzaW9uJykgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGk9MDsgaSA8IGV4cHJlc3Npb24uZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChleHByZXNzaW9uLmVsZW1lbnRzW2ldLnR5cGUgIT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJlxuICAgICAgICAgIGV4cHJlc3Npb24uZWxlbWVudHNbaV0udHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgdGVtcGxhdGl6ZXIgPSBcIlBvbHltZXIuVGVtcGxhdGl6ZXJcIjtcblxuICB2YXIgdmlzaXRvcnMgPSB7XG5cbiAgICAvKipcbiAgICAgKiBMb29rIGZvciBvYmplY3QgZGVjbGFyYXRpb25zIHdpdGggQGJlaGF2aW9yIGluIHRoZSBkb2NzLlxuICAgICAqL1xuICAgIGVudGVyVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24obm9kZSwgcGFyZW50KSB7XG4gICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoICE9PSAxKSByZXR1cm47ICAvLyBBbWJpZ3VvdXMuXG4gICAgICB0aGlzLl9pbml0QmVoYXZpb3Iobm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKG5vZGUuZGVjbGFyYXRpb25zWzBdLmlkKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBMb29rIGZvciBvYmplY3QgYXNzaWdubWVudHMgd2l0aCBAcG9seW1lckJlaGF2aW9yIGluIHRoZSBkb2NzLlxuICAgICAqL1xuICAgIGVudGVyQXNzaWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgdGhpcy5faW5pdEJlaGF2aW9yKHBhcmVudCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKG5vZGUubGVmdCk7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX3BhcnNlQ2hhaW5lZEJlaGF2aW9yczogZnVuY3Rpb24obm9kZSkge1xuICAgICAgLy8gaWYgY3VycmVudCBiZWhhdmlvciBpcyBwYXJ0IG9mIGFuIGFycmF5LCBpdCBnZXRzIGV4dGVuZGVkIGJ5IG90aGVyIGJlaGF2aW9yc1xuICAgICAgLy8gaW5zaWRlIHRoZSBhcnJheS4gRXg6XG4gICAgICAvLyBQb2x5bWVyLklyb25NdWx0aVNlbGVjdGFibGVCZWhhdmlvciA9IFsgey4uLi59LCBQb2x5bWVyLklyb25TZWxlY3RhYmxlQmVoYXZpb3JdXG4gICAgICAvLyBXZSBhZGQgdGhlc2UgdG8gYmVoYXZpb3JzIGFycmF5XG4gICAgICB2YXIgZXhwcmVzc2lvbiA9IGJlaGF2aW9yRXhwcmVzc2lvbihub2RlKTtcbiAgICAgIHZhciBjaGFpbmVkID0gW107XG4gICAgICBpZiAoZXhwcmVzc2lvbiAmJiBleHByZXNzaW9uLnR5cGUgPT09ICdBcnJheUV4cHJlc3Npb24nKSB7XG4gICAgICAgIGZvciAodmFyIGk9MDsgaSA8IGV4cHJlc3Npb24uZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5lbGVtZW50c1tpXS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgfHxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbi5lbGVtZW50c1tpXS50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICAgIGNoYWluZWQucHVzaChhc3RWYWx1ZS5leHByZXNzaW9uVG9WYWx1ZShleHByZXNzaW9uLmVsZW1lbnRzW2ldKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFpbmVkLmxlbmd0aCA+IDApXG4gICAgICAgICAgY3VycmVudEJlaGF2aW9yLmJlaGF2aW9ycyA9IGNoYWluZWQ7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9pbml0QmVoYXZpb3I6IGZ1bmN0aW9uKG5vZGUsIGdldE5hbWUpIHtcbiAgICAgIHZhciBjb21tZW50ID0gZXN1dGlsLmdldEF0dGFjaGVkQ29tbWVudChub2RlKTtcbiAgICAgIHZhciBzeW1ib2wgPSBnZXROYW1lKCk7XG4gICAgICAvLyBRdWlja2x5IGZpbHRlciBkb3duIHRvIHBvdGVudGlhbCBjYW5kaWRhdGVzLlxuICAgICAgaWYgKCFjb21tZW50IHx8IGNvbW1lbnQuaW5kZXhPZignQHBvbHltZXJCZWhhdmlvcicpID09PSAtMSkge1xuICAgICAgICBpZiAoc3ltYm9sICE9PSB0ZW1wbGF0aXplcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG5cbiAgICAgIGN1cnJlbnRCZWhhdmlvciA9IHtcbiAgICAgICAgdHlwZTogJ2JlaGF2aW9yJyxcbiAgICAgICAgZGVzYzogY29tbWVudCxcbiAgICAgICAgZXZlbnRzOiBlc3V0aWwuZ2V0RXZlbnRDb21tZW50cyhub2RlKS5tYXAoIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHsgZGVzYzogZXZlbnR9O1xuICAgICAgICB9KVxuICAgICAgfTtcblxuICAgICAgZG9jcy5hbm5vdGF0ZUJlaGF2aW9yKGN1cnJlbnRCZWhhdmlvcik7XG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBhY3R1YWxseSBwYXJzZWQgYSBiZWhhdmlvciB0YWchXG4gICAgICBpZiAoIWpzZG9jLmhhc1RhZyhjdXJyZW50QmVoYXZpb3IuanNkb2MsICdwb2x5bWVyQmVoYXZpb3InKSAmJlxuICAgICAgICAgIHN5bWJvbCAhPT0gdGVtcGxhdGl6ZXIpIHtcbiAgICAgICAgY3VycmVudEJlaGF2aW9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmFtZSA9IGpzZG9jLmdldFRhZyhjdXJyZW50QmVoYXZpb3IuanNkb2MsICdwb2x5bWVyQmVoYXZpb3InLCAnbmFtZScpO1xuICAgICAgY3VycmVudEJlaGF2aW9yLnN5bWJvbCA9IHN5bWJvbDtcbiAgICAgIGlmICghbmFtZSkge1xuICAgICAgICBuYW1lID0gY3VycmVudEJlaGF2aW9yLnN5bWJvbDtcbiAgICAgIH1cbiAgICAgIGlmICghbmFtZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgbmFtZSBmb3IgQHBvbHltZXJCZWhhdmlvcjonLCBjb21tZW50KTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRCZWhhdmlvci5pcyA9IG5hbWU7XG5cbiAgICAgIHRoaXMuX3BhcnNlQ2hhaW5lZEJlaGF2aW9ycyhub2RlKTtcblxuICAgICAgY3VycmVudEJlaGF2aW9yID0gbWVyZ2VCZWhhdmlvcihjdXJyZW50QmVoYXZpb3IpO1xuXG4gICAgICAvLyBTb21lIGJlaGF2aW9ycyBhcmUganVzdCBsaXN0cyBvZiBvdGhlciBiZWhhdmlvcnMuIElmIHRoaXMgaXMgb25lIHRoZW5cbiAgICAgIC8vIGFkZCBpdCB0byBiZWhhdmlvcnMgcmlnaHQgYXdheS5cbiAgICAgIGlmIChpc1NpbXBsZUJlaGF2aW9yQXJyYXkoYmVoYXZpb3JFeHByZXNzaW9uKG5vZGUpKSkge1xuICAgICAgICAvLyBUT0RPKGFqbyk6IEFkZCBhIHRlc3QgdG8gY29uZmlybSB0aGUgcHJlc2VuY2Ugb2YgYHByb3BlcnRpZXNgLlxuICAgICAgICBpZiAoIWN1cnJlbnRCZWhhdmlvci5wcm9wZXJ0aWVzKSBjdXJyZW50QmVoYXZpb3IucHJvcGVydGllcyA9IFtdO1xuICAgICAgICBpZiAoYmVoYXZpb3JzLmluZGV4T2YoY3VycmVudEJlaGF2aW9yKSA9PT0gLTEpXG4gICAgICAgICAgYmVoYXZpb3JzLnB1c2goY3VycmVudEJlaGF2aW9yKTtcbiAgICAgICAgY3VycmVudEJlaGF2aW9yID0gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2UgYXNzdW1lIHRoYXQgdGhlIG9iamVjdCBleHByZXNzaW9uIGFmdGVyIHN1Y2ggYW4gYXNzaWdubWVudCBpcyB0aGVcbiAgICAgKiBiZWhhdmlvcidzIGRlY2xhcmF0aW9uLiBTZWVtcyB0byBiZSBhIGRlY2VudCBhc3N1bXB0aW9uIGZvciBub3cuXG4gICAgICovXG4gICAgZW50ZXJPYmplY3RFeHByZXNzaW9uOiBmdW5jdGlvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmICghY3VycmVudEJlaGF2aW9yIHx8IGN1cnJlbnRCZWhhdmlvci5wcm9wZXJ0aWVzKSByZXR1cm47XG5cbiAgICAgIGN1cnJlbnRCZWhhdmlvci5wcm9wZXJ0aWVzID0gY3VycmVudEJlaGF2aW9yLnByb3BlcnRpZXMgfHwgW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcCA9IG5vZGUucHJvcGVydGllc1tpXTtcbiAgICAgICAgdmFyIG5hbWUgPSBlc3V0aWwub2JqZWN0S2V5VG9TdHJpbmcocHJvcC5rZXkpO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICBtZXNzYWdlOiAnQ2FudCBkZXRlcm1pbmUgbmFtZSBmb3IgcHJvcGVydHkga2V5LicsXG4gICAgICAgICAgICBsb2NhdGlvbjogbm9kZS5sb2Muc3RhcnRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lIGluIHByb3BlcnR5SGFuZGxlcnMpIHtcbiAgICAgICAgICBwcm9wZXJ0eUhhbmRsZXJzW25hbWVdKHByb3AudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRCZWhhdmlvci5wcm9wZXJ0aWVzLnB1c2goZXN1dGlsLnRvUHJvcGVydHlEZXNjcmlwdG9yKHByb3ApKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYmVoYXZpb3JzLnB1c2goY3VycmVudEJlaGF2aW9yKTtcbiAgICAgIGN1cnJlbnRCZWhhdmlvciA9IG51bGw7XG4gICAgfSxcblxuICB9O1xuXG4gIHJldHVybiB7dmlzaXRvcnM6IHZpc2l0b3JzLCBiZWhhdmlvcnM6IGJlaGF2aW9yc307XG59O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4ndXNlIHN0cmljdCc7XG5cbi8vIGpzaGludCBub2RlOnRydWVcblxudmFyIGpzZG9jID0gcmVxdWlyZSgnLi9qc2RvYycpO1xuXG52YXIgZG9tNSA9IHJlcXVpcmUoJ2RvbTUnKTtcblxuLyoqIFByb3BlcnRpZXMgb24gZWxlbWVudCBwcm90b3R5cGVzIHRoYXQgYXJlIHB1cmVseSBjb25maWd1cmF0aW9uLiAqL1xudmFyIEVMRU1FTlRfQ09ORklHVVJBVElPTiA9IFtcbiAgJ2F0dGFjaGVkJyxcbiAgJ2F0dHJpYnV0ZUNoYW5nZWQnLFxuICAnY29uZmlndXJlJyxcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2NyZWF0ZWQnLFxuICAnZGV0YWNoZWQnLFxuICAnZW5hYmxlQ3VzdG9tU3R5bGVQcm9wZXJ0aWVzJyxcbiAgJ2V4dGVuZHMnLFxuICAnaG9zdEF0dHJpYnV0ZXMnLFxuICAnaXMnLFxuICAnbGlzdGVuZXJzJyxcbiAgJ21peGlucycsXG4gICdwcm9wZXJ0aWVzJyxcbiAgJ3JlYWR5JyxcbiAgJ3JlZ2lzdGVyZWQnXG5dO1xuXG4vKiogVGFncyB1bmRlcnN0b29kIGJ5IHRoZSBhbm5vdGF0aW9uIHByb2Nlc3MsIHRvIGJlIHJlbW92ZWQgZHVyaW5nIGBjbGVhbmAuICovXG52YXIgSEFORExFRF9UQUdTID0gW1xuICAncGFyYW0nLFxuICAncmV0dXJuJyxcbiAgJ3R5cGUnLFxuXTtcblxuLyoqXG4gKiBBbm5vdGF0ZXMgSHlkcm9seXNpcyBkZXNjcmlwdG9ycywgcHJvY2Vzc2luZyBhbnkgYGRlc2NgIHByb3BlcnRpZXMgYXMgSlNEb2MuXG4gKlxuICogWW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIGEgbW9yZSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIHRoaXMsIHN1Y2ggYXNcbiAqIGBhbm5vdGF0ZUVsZW1lbnRgLlxuICpcbiAqIFByb2Nlc3NlZCBKU0RvYyB2YWx1ZXMgd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSB2aWEgdGhlIGBqc2RvY2AgcHJvcGVydHkgb24gYVxuICogZGVzY3JpcHRvciBub2RlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIFRoZSBkZXNjcmlwdG9yIG5vZGUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIGRlc2NyaXB0b3IgdGhhdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlKGRlc2NyaXB0b3IpIHtcbiAgaWYgKCFkZXNjcmlwdG9yIHx8IGRlc2NyaXB0b3IuanNkb2MpIHJldHVybiBkZXNjcmlwdG9yO1xuXG4gIGlmICh0eXBlb2YgZGVzY3JpcHRvci5kZXNjID09PSAnc3RyaW5nJykge1xuICAgIGRlc2NyaXB0b3IuanNkb2MgPSBqc2RvYy5wYXJzZUpzZG9jKGRlc2NyaXB0b3IuZGVzYyk7XG4gICAgLy8gV2Ugd2FudCB0byBwcmVzZW50IHRoZSBub3JtYWxpemVkIGZvcm0gb2YgYSBkZXNjcmlwdG9yLlxuICAgIGRlc2NyaXB0b3IuanNkb2Mub3JpZyA9IGRlc2NyaXB0b3IuZGVzYztcbiAgICBkZXNjcmlwdG9yLmRlc2MgICAgICAgPSBkZXNjcmlwdG9yLmpzZG9jLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIEBldmVudCwgQGhlcm8sICYgQGRlbW8gdGFnc1xuICovXG5mdW5jdGlvbiBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIoZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5ldmVudHMpIHtcbiAgICBkZXNjcmlwdG9yLmV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBfYW5ub3RhdGVFdmVudChldmVudCk7XG4gICAgfSk7XG4gICAgZGVzY3JpcHRvci5ldmVudHMuc29ydCggZnVuY3Rpb24oYSxiKSB7XG4gICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgICB9KTtcbiAgfVxuICBkZXNjcmlwdG9yLmRlbW9zID0gW107XG4gIGlmIChkZXNjcmlwdG9yLmpzZG9jICYmIGRlc2NyaXB0b3IuanNkb2MudGFncykge1xuICAgIGRlc2NyaXB0b3IuanNkb2MudGFncy5mb3JFYWNoKCBmdW5jdGlvbih0YWcpIHtcbiAgICAgIHN3aXRjaCh0YWcudGFnKSB7XG4gICAgICAgIGNhc2UgJ2hlcm8nOlxuICAgICAgICAgIGRlc2NyaXB0b3IuaGVybyA9IHRhZy5uYW1lIHx8ICdoZXJvLnBuZyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RlbW8nOlxuICAgICAgICAgIGRlc2NyaXB0b3IuZGVtb3MucHVzaCh7XG4gICAgICAgICAgICBkZXNjOiB0YWcuZGVzY3JpcHRpb24gfHwgJ2RlbW8nLFxuICAgICAgICAgICAgcGF0aDogdGFnLm5hbWUgfHwgJ2RlbW8vaW5kZXguaHRtbCdcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXRjaEJ5TmFtZShwcm9wYSwgcHJvcGIpIHtcbiAgcmV0dXJuIHByb3BhLm5hbWUgPT0gcHJvcGIubmFtZTtcbn1cblxuZnVuY3Rpb24gY29weVByb3BlcnRpZXMoZnJvbSwgdG8sIGJlaGF2aW9yc0J5TmFtZSkge1xuICBpZiAoZnJvbS5wcm9wZXJ0aWVzKSB7XG4gICAgZnJvbS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24oZnJvbVByb3Ape1xuICAgICAgZm9yICh2YXIgdG9Qcm9wLCBpID0gMDsgaSA8IHRvLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdG9Qcm9wID0gdG8ucHJvcGVydGllc1tpXTtcbiAgICAgICAgaWYgKGZyb21Qcm9wLm5hbWUgPT09IHRvUHJvcC5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgbmV3UHJvcCA9IHtfX2Zyb21CZWhhdmlvcjogZnJvbS5pc307XG4gICAgICBpZiAoZnJvbVByb3AuX19mcm9tQmVoYXZpb3IpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmtleXMoZnJvbVByb3ApLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHlGaWVsZCl7XG4gICAgICAgIG5ld1Byb3BbcHJvcGVydHlGaWVsZF0gPSBmcm9tUHJvcFtwcm9wZXJ0eUZpZWxkXTtcbiAgICAgIH0pO1xuICAgICAgdG8ucHJvcGVydGllcy5wdXNoKG5ld1Byb3ApO1xuICAgIH0pO1xuICAgIGZyb20uZXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZnJvbUV2ZW50KXtcbiAgICAgIGZvciAodmFyIHRvRXZlbnQsIGkgPSAwOyBpIDwgdG8uZXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRvRXZlbnQgPSB0by5ldmVudHNbaV07XG4gICAgICAgIGlmIChmcm9tRXZlbnQubmFtZSA9PT0gdG9FdmVudC5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZnJvbUV2ZW50Ll9fZnJvbUJlaGF2aW9yKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdFdmVudCA9IE9iamVjdC5jcmVhdGUoZnJvbUV2ZW50KTtcbiAgICAgIG5ld0V2ZW50Ll9fZnJvbUJlaGF2aW9yID0gZnJvbS5pcztcbiAgICAgIHRvLmV2ZW50cy5wdXNoKG5ld0V2ZW50KTtcbiAgICB9KTtcbiAgfVxuICBpZiAoIWZyb20uYmVoYXZpb3JzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZyb20uYmVoYXZpb3JzLmZvckVhY2goZnVuY3Rpb24oYmVoYXZpb3Ipe1xuICAgIHZhciBkZWZpbmVkQmVoYXZpb3IgPSBiZWhhdmlvcnNCeU5hbWVbYmVoYXZpb3JdIHx8IGJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvci5zeW1ib2xdO1xuICAgIGlmICghZGVmaW5lZEJlaGF2aW9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvcHlQcm9wZXJ0aWVzKGRlZmluZWRCZWhhdmlvciwgdG8sIGJlaGF2aW9yc0J5TmFtZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtaXhpbkJlaGF2aW9ycyhkZXNjcmlwdG9yLCBiZWhhdmlvcnNCeU5hbWUpIHtcbiAgaWYgKGRlc2NyaXB0b3IuYmVoYXZpb3JzKSB7XG4gICAgZGVzY3JpcHRvci5iZWhhdmlvcnMuZm9yRWFjaChmdW5jdGlvbihiZWhhdmlvcil7XG4gICAgICBpZiAoIWJlaGF2aW9yc0J5TmFtZVtiZWhhdmlvcl0pIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiQmVoYXZpb3IgXCIgKyBiZWhhdmlvciArIFwiIG5vdCBmb3VuZCFcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBkZWZpbmVkQmVoYXZpb3IgPSBiZWhhdmlvcnNCeU5hbWVbYmVoYXZpb3JdO1xuICAgICAgY29weVByb3BlcnRpZXMoZGVmaW5lZEJlaGF2aW9yLCBkZXNjcmlwdG9yLCBiZWhhdmlvcnNCeU5hbWUpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIGRvY3VtZW50YXRpb24gZm91bmQgd2l0aGluIGEgSHlkcm9seXNpcyBlbGVtZW50IGRlc2NyaXB0b3IuIEFsc29cbiAqIHN1cHBvcnRzIGJlaGF2aW9ycy5cbiAqXG4gKiBJZiB0aGUgZWxlbWVudCB3YXMgcHJvY2Vzc2VkIHZpYSBgaHlkcm9saXplYCwgdGhlIGVsZW1lbnQncyBkb2N1bWVudGF0aW9uXG4gKiB3aWxsIGFsc28gYmUgZXh0cmFjdGVkIHZpYSBpdHMgPGRvbS1tb2R1bGU+LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIFRoZSBlbGVtZW50IGRlc2NyaXB0b3IuXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBkZXNjcmlwdG9yIHRoYXQgd2FzIGdpdmVuLlxuICovXG5mdW5jdGlvbiBhbm5vdGF0ZUVsZW1lbnQoZGVzY3JpcHRvciwgYmVoYXZpb3JzQnlOYW1lKSB7XG4gIGlmICghZGVzY3JpcHRvci5kZXNjICYmIGRlc2NyaXB0b3IudHlwZSA9PT0gJ2VsZW1lbnQnKSB7XG4gICAgZGVzY3JpcHRvci5kZXNjID0gX2ZpbmRFbGVtZW50RG9jcyhkZXNjcmlwdG9yLmlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5kb21Nb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNjcmlwdEVsZW1lbnQpO1xuICB9XG4gIGFubm90YXRlKGRlc2NyaXB0b3IpO1xuXG4gIC8vIFRoZSBgPGRvbS1tb2R1bGU+YCBpcyB0b28gbG93IGxldmVsIGZvciBtb3N0IG5lZWRzLCBhbmQgaXQgaXMgX25vdF9cbiAgLy8gc2VyaWFsaXphYmxlLiBTbyB3ZSBkcm9wIGl0IG5vdyB0aGF0IHdlJ3ZlIGV4dHJhY3RlZCBhbGwgdGhlIHVzZWZ1bCBiaXRzXG4gIC8vIGZyb20gaXQuXG4gIC8vIFRPRE86IERvbid0IHdvcnJ5IGFib3V0IHNlcmlhbGl6YWJpbGl0eSBoZXJlLCBwcm92aWRlIGFuIEFQSSB0byBnZXQgSlNPTi5cbiAgZGVsZXRlIGRlc2NyaXB0b3IuZG9tTW9kdWxlO1xuXG4gIG1peGluQmVoYXZpb3JzKGRlc2NyaXB0b3IsIGJlaGF2aW9yc0J5TmFtZSk7XG5cbiAgLy8gRGVzY3JpcHRvcnMgdGhhdCBzaG91bGQgaGF2ZSB0aGVpciBgZGVzY2AgcHJvcGVydGllcyBwYXJzZWQgYXMgSlNEb2MuXG4gIGRlc2NyaXB0b3IucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KSB7XG4gICAgLy8gRmVhdHVyZSBwcm9wZXJ0aWVzIGFyZSBzcGVjaWFsLCBjb25maWd1cmF0aW9uIGlzIHJlYWxseSBqdXN0IGEgbWF0dGVyIG9mXG4gICAgLy8gaW5oZXJpdGFuY2UuLi5cbiAgICBhbm5vdGF0ZVByb3BlcnR5KHByb3BlcnR5LCBkZXNjcmlwdG9yLmFic3RyYWN0KTtcbiAgfSk7XG5cbiAgLy8gSXQgbWF5IHNlZW0gbGlrZSBvdmVya2lsbCB0byBhbHdheXMgc29ydCwgYnV0IHdlIGhhdmUgYW4gYXNzdW1wdGlvbiB0aGF0XG4gIC8vIHRoZXNlIHByb3BlcnRpZXMgYXJlIHR5cGljYWxseSBiZWluZyBjb25zdW1lZCBieSB1c2VyLXZpc2libGUgdG9vbGluZy5cbiAgLy8gQXMgc3VjaCwgaXQncyBnb29kIHRvIGhhdmUgY29uc2lzdGVudCBvdXRwdXQvb3JkZXJpbmcgdG8gYWlkIHRoZSB1c2VyLlxuICBkZXNjcmlwdG9yLnByb3BlcnRpZXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgLy8gUHJpdmF0ZSBwcm9wZXJ0aWVzIGFyZSBhbHdheXMgbGFzdC5cbiAgICBpZiAoYS5wcml2YXRlICYmICFiLnByaXZhdGUpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoIWEucHJpdmF0ZSAmJiBiLnByaXZhdGUpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGp1c3Qgc29ydGluZyBhbHBoYWJldGljYWxseS5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gICAgfVxuICB9KTtcblxuICBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIoZGVzY3JpcHRvcik7XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIGJlaGF2aW9yIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge09iamVjdH0gZGVzY3JpcHRvciBiZWhhdmlvciBkZXNjcmlwdG9yXG4gKiBAcmV0dXJuIHtPYmplY3R9IGRlc2NyaXB0b3IgcGFzc2VkIGluIGFzIHBhcmFtXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlQmVoYXZpb3IoZGVzY3JpcHRvciwgYmVoYXZpb3JzQnlOYW1lKSB7XG4gIGFubm90YXRlKGRlc2NyaXB0b3IpO1xuICBhbm5vdGF0ZUVsZW1lbnRIZWFkZXIoZGVzY3JpcHRvcik7XG5cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59XG5cbi8qKlxuICogQW5ub3RhdGVzIGV2ZW50IGRvY3VtZW50YXRpb25cbiAqL1xuZnVuY3Rpb24gX2Fubm90YXRlRXZlbnQoZGVzY3JpcHRvcikge1xuICBhbm5vdGF0ZShkZXNjcmlwdG9yKTtcbiAgLy8gcHJvY2VzcyBAZXZlbnRcbiAgdmFyIGV2ZW50VGFnID0ganNkb2MuZ2V0VGFnKGRlc2NyaXB0b3IuanNkb2MsICdldmVudCcpO1xuICBkZXNjcmlwdG9yLm5hbWUgPSBldmVudFRhZyA/IGV2ZW50VGFnLmRlc2NyaXB0aW9uIDogXCJOL0FcIjtcblxuICAvLyBwcm9jZXNzIEBwYXJhbXNcbiAgZGVzY3JpcHRvci5wYXJhbXMgPSAoZGVzY3JpcHRvci5qc2RvYy50YWdzIHx8IFtdKVxuICAgIC5maWx0ZXIoIGZ1bmN0aW9uKHRhZykge1xuICAgICAgcmV0dXJuIHRhZy50YWcgPT09ICdwYXJhbSc7XG4gICAgfSlcbiAgICAubWFwKCBmdW5jdGlvbih0YWcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHRhZy50eXBlIHx8IFwiTi9BXCIsXG4gICAgICAgIGRlc2M6IHRhZy5kZXNjcmlwdGlvbixcbiAgICAgICAgbmFtZTogdGFnLm5hbWUgfHwgXCJOL0FcIlxuICAgICAgfTtcbiAgICB9KTtcbiAgLy8gcHJvY2VzcyBAcGFyYW1zXG4gIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG4vKipcbiAqIEFubm90YXRlcyBkb2N1bWVudGF0aW9uIGZvdW5kIGFib3V0IGEgSHlkcm9seXNpcyBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yIFRoZSBwcm9wZXJ0eSBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtib29sZWFufSBpZ25vcmVDb25maWd1cmF0aW9uIElmIHRydWUsIGBjb25maWd1cmF0aW9uYCBpcyBub3Qgc2V0LlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgZGVzY3JpcHRpb3IgdGhhdCB3YXMgZ2l2ZW4uXG4gKi9cbmZ1bmN0aW9uIGFubm90YXRlUHJvcGVydHkoZGVzY3JpcHRvciwgaWdub3JlQ29uZmlndXJhdGlvbikge1xuICBhbm5vdGF0ZShkZXNjcmlwdG9yKTtcbiAgaWYgKGRlc2NyaXB0b3IubmFtZVswXSA9PT0gJ18nIHx8IGpzZG9jLmhhc1RhZyhkZXNjcmlwdG9yLmpzZG9jLCAncHJpdmF0ZScpKSB7XG4gICAgZGVzY3JpcHRvci5wcml2YXRlID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaWdub3JlQ29uZmlndXJhdGlvbiAmJiBFTEVNRU5UX0NPTkZJR1VSQVRJT04uaW5kZXhPZihkZXNjcmlwdG9yLm5hbWUpICE9PSAtMSkge1xuICAgIGRlc2NyaXB0b3IucHJpdmF0ZSAgICAgICA9IHRydWU7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmF0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIEB0eXBlIEpTRG9jIHdpbnNcbiAgZGVzY3JpcHRvci50eXBlID0ganNkb2MuZ2V0VGFnKGRlc2NyaXB0b3IuanNkb2MsICd0eXBlJywgJ3R5cGUnKSB8fCBkZXNjcmlwdG9yLnR5cGU7XG5cbiAgaWYgKGRlc2NyaXB0b3IudHlwZS5tYXRjaCgvXmZ1bmN0aW9uL2kpKSB7XG4gICAgX2Fubm90YXRlRnVuY3Rpb25Qcm9wZXJ0eShkZXNjcmlwdG9yKTtcbiAgfVxuXG4gIC8vIEBkZWZhdWx0IEpTRG9jIHdpbnNcbiAgdmFyIGRlZmF1bHRUYWcgPSBqc2RvYy5nZXRUYWcoZGVzY3JpcHRvci5qc2RvYywgJ2RlZmF1bHQnKTtcbiAgaWYgKGRlZmF1bHRUYWcgIT09IG51bGwpIHtcbiAgICB2YXIgbmV3RGVmYXVsdCA9IChkZWZhdWx0VGFnLm5hbWUgfHwgJycpICsgKGRlZmF1bHRUYWcuZGVzY3JpcHRpb24gfHwgJycpO1xuICAgIGlmIChuZXdEZWZhdWx0ICE9PSAnJykge1xuICAgICAgZGVzY3JpcHRvci5kZWZhdWx0ID0gbmV3RGVmYXVsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuLyoqIEBwYXJhbSB7T2JqZWN0fSBkZXNjcmlwdG9yICovXG5mdW5jdGlvbiBfYW5ub3RhdGVGdW5jdGlvblByb3BlcnR5KGRlc2NyaXB0b3IpIHtcbiAgZGVzY3JpcHRvci5mdW5jdGlvbiA9IHRydWU7XG5cbiAgdmFyIHJldHVyblRhZyA9IGpzZG9jLmdldFRhZyhkZXNjcmlwdG9yLmpzZG9jLCAncmV0dXJuJyk7XG4gIGlmIChyZXR1cm5UYWcpIHtcbiAgICBkZXNjcmlwdG9yLnJldHVybiA9IHtcbiAgICAgIHR5cGU6IHJldHVyblRhZy50eXBlLFxuICAgICAgZGVzYzogcmV0dXJuVGFnLmRlc2NyaXB0aW9uLFxuICAgIH07XG4gIH1cblxuICB2YXIgcGFyYW1zQnlOYW1lID0ge307XG4gIChkZXNjcmlwdG9yLnBhcmFtcyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihwYXJhbSkge1xuICAgIHBhcmFtc0J5TmFtZVtwYXJhbS5uYW1lXSA9IHBhcmFtO1xuICB9KTtcbiAgKGRlc2NyaXB0b3IuanNkb2MgJiYgZGVzY3JpcHRvci5qc2RvYy50YWdzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHRhZykge1xuICAgIGlmICh0YWcudGFnICE9PSAncGFyYW0nKSByZXR1cm47XG4gICAgdmFyIHBhcmFtID0gcGFyYW1zQnlOYW1lW3RhZy5uYW1lXTtcbiAgICBpZiAoIXBhcmFtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFyYW0udHlwZSA9IHRhZy50eXBlIHx8IHBhcmFtLnR5cGU7XG4gICAgcGFyYW0uZGVzYyA9IHRhZy5kZXNjcmlwdGlvbjtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgcmF3IGZlYXR1cmVzIGludG8gYW4gYWJzdHJhY3QgYFBvbHltZXIuQmFzZWAgZWxlbWVudC5cbiAqXG4gKiBOb3RlIHRoYXQgZG9jcyBvbiB0aGlzIGVsZW1lbnQgX2FyZSBub3QgcHJvY2Vzc2VkXy4gWW91IG11c3QgY2FsbFxuICogYGFubm90YXRlRWxlbWVudGAgb24gaXQgeW91cnNlbGYgaWYgeW91IHdpc2ggdGhhdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PEZlYXR1cmVEZXNjcmlwdG9yPn0gZmVhdHVyZXNcbiAqIEByZXR1cm4ge0VsZW1lbnREZXNjcmlwdG9yfVxuICovXG5mdW5jdGlvbiBmZWF0dXJlRWxlbWVudChmZWF0dXJlcykge1xuICB2YXIgcHJvcGVydGllcyA9IGZlYXR1cmVzLnJlZHVjZShmdW5jdGlvbihyZXN1bHQsIGZlYXR1cmUpIHtcbiAgICByZXR1cm4gcmVzdWx0LmNvbmNhdChmZWF0dXJlLnByb3BlcnRpZXMpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAgICAgICAnZWxlbWVudCcsXG4gICAgaXM6ICAgICAgICAgJ1BvbHltZXIuQmFzZScsXG4gICAgYWJzdHJhY3Q6ICAgdHJ1ZSxcbiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuICAgIGRlc2M6ICdgUG9seW1lci5CYXNlYCBhY3RzIGFzIGEgYmFzZSBwcm90b3R5cGUgZm9yIGFsbCBQb2x5bWVyICcgK1xuICAgICAgICAgICdlbGVtZW50cy4gSXQgaXMgY29tcG9zZWQgdmlhIHZhcmlvdXMgY2FsbHMgdG8gJyArXG4gICAgICAgICAgJ2BQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoKWAuXFxuJyArXG4gICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICdUaGUgcHJvcGVydGllcyByZWZsZWN0ZWQgaGVyZSBhcmUgdGhlIGNvbWJpbmVkIHZpZXcgb2YgYWxsICcgK1xuICAgICAgICAgICdmZWF0dXJlcyBmb3VuZCBpbiB0aGlzIGxpYnJhcnkuIFRoZXJlIG1heSBiZSBtb3JlIHByb3BlcnRpZXMgJyArXG4gICAgICAgICAgJ2FkZGVkIHZpYSBvdGhlciBsaWJyYXJpZXMsIGFzIHdlbGwuJyxcbiAgfTtcbn1cblxuLyoqXG4gKiBDbGVhbnMgcmVkdW5kYW50IHByb3BlcnRpZXMgZnJvbSBhIGRlc2NyaXB0b3IsIGFzc3VtaW5nIHRoYXQgeW91IGhhdmUgYWxyZWFkeVxuICogY2FsbGVkIGBhbm5vdGF0ZWAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlc2NyaXB0b3JcbiAqL1xuZnVuY3Rpb24gY2xlYW4oZGVzY3JpcHRvcikge1xuICBpZiAoIWRlc2NyaXB0b3IuanNkb2MpIHJldHVybjtcbiAgLy8gVGhlIGRvY3RleHQgd2FzIHdyaXR0ZW4gdG8gYGRlc2NyaXB0b3IuZGVzY2BcbiAgZGVsZXRlIGRlc2NyaXB0b3IuanNkb2MuZGVzY3JpcHRpb247XG4gIGRlbGV0ZSBkZXNjcmlwdG9yLmpzZG9jLm9yaWc7XG5cbiAgdmFyIGNsZWFuVGFncyA9IFtdO1xuICAoZGVzY3JpcHRvci5qc2RvYy50YWdzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHRhZykge1xuICAgIC8vIERyb3AgYW55IHRhZ3Mgd2UndmUgY29uc3VtZWQuXG4gICAgaWYgKEhBTkRMRURfVEFHUy5pbmRleE9mKHRhZy50YWcpICE9PSAtMSkgcmV0dXJuO1xuICAgIGNsZWFuVGFncy5wdXNoKHRhZyk7XG4gIH0pO1xuXG4gIGlmIChjbGVhblRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gTm8gdGFncz8gbm8gZG9jcyBsZWZ0IVxuICAgIGRlbGV0ZSBkZXNjcmlwdG9yLmpzZG9jO1xuICB9IGVsc2Uge1xuICAgIGRlc2NyaXB0b3IuanNkb2MudGFncyA9IGNsZWFuVGFncztcbiAgfVxufVxuXG4vKipcbiAqIENsZWFucyByZWR1bmRhbnQgcHJvcGVydGllcyBmcm9tIGFuIGVsZW1lbnQsIGFzc3VtaW5nIHRoYXQgeW91IGhhdmUgYWxyZWFkeVxuICogY2FsbGVkIGBhbm5vdGF0ZUVsZW1lbnRgLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudERlc2NyaXB0b3J8QmVoYXZpb3JEZXNjcmlwdG9yfSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGNsZWFuRWxlbWVudChlbGVtZW50KSB7XG4gIGNsZWFuKGVsZW1lbnQpO1xuICBlbGVtZW50LnByb3BlcnRpZXMuZm9yRWFjaChjbGVhblByb3BlcnR5KTtcbn1cblxuLyoqXG4gKiBDbGVhbnMgcmVkdW5kYW50IHByb3BlcnRpZXMgZnJvbSBhIHByb3BlcnR5LCBhc3N1bWluZyB0aGF0IHlvdSBoYXZlIGFscmVhZHlcbiAqIGNhbGxlZCBgYW5ub3RhdGVQcm9wZXJ0eWAuXG4gKlxuICogQHBhcmFtIHtQcm9wZXJ0eURlc2NyaXB0b3J9IHByb3BlcnR5XG4gKi9cbmZ1bmN0aW9uIGNsZWFuUHJvcGVydHkocHJvcGVydHkpIHtcbiAgY2xlYW4ocHJvcGVydHkpO1xufVxuXG4vKipcbiAqIFBhcnNlIGVsZW1lbnRzIGRlZmluZWQgb25seSBpbiBjb21tZW50cy5cbiAqIEBwYXJhbSAge2NvbW1lbnRzfSBBcnJheTxzdHJpbmc+IEEgbGlzdCBvZiBjb21tZW50cyB0byBwYXJzZS5cbiAqIEByZXR1cm4ge0VsZW1lbnREZXNjcmlwdG9yfSAgICAgIEEgbGlzdCBvZiBwc2V1ZG8tZWxlbWVudHMuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHNldWRvRWxlbWVudHMoY29tbWVudHMpIHtcbiAgdmFyIGVsZW1lbnRzID0gW107XG4gIGNvbW1lbnRzLmZvckVhY2goZnVuY3Rpb24oY29tbWVudCkge1xuICAgIHZhciBwYXJzZWQgPSBqc2RvYy5wYXJzZUpzZG9jKGNvbW1lbnQpO1xuICAgIHZhciBwc2V1ZG9UYWcgPSBqc2RvYy5nZXRUYWcocGFyc2VkLCAncHNldWRvRWxlbWVudCcsICduYW1lJyk7XG4gICAgaWYgKHBzZXVkb1RhZykge1xuICAgICAgcGFyc2VkLmlzID0gcHNldWRvVGFnO1xuICAgICAgcGFyc2VkLmpzZG9jID0ge2Rlc2NyaXB0aW9uOiBwYXJzZWQuZGVzY3JpcHRpb24sIHRhZ3M6IHBhcnNlZC50YWdzfTtcbiAgICAgIHBhcnNlZC5wcm9wZXJ0aWVzID0gW107XG4gICAgICBwYXJzZWQuZGVzYyA9IHBhcnNlZC5kZXNjcmlwdGlvbjtcbiAgICAgIHBhcnNlZC5kZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHBhcnNlZC50YWdzID0gdW5kZWZpbmVkO1xuICAgICAgYW5ub3RhdGVFbGVtZW50SGVhZGVyKHBhcnNlZCk7XG4gICAgICBlbGVtZW50cy5wdXNoKHBhcnNlZCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbGVtZW50SWRcbiAqIEBwYXJhbSB7RG9jdW1lbnRBU1R9IGRvbU1vZHVsZVxuICogQHBhcmFtIHtEb2N1bWVudEFTVH0gc2NyaXB0RWxlbWVudCBUaGUgc2NyaXB0IHRoYXQgdGhlIGVsZW1lbnQgd2FzIGRlZmluZWQgaW4uXG4gKi9cbmZ1bmN0aW9uIF9maW5kRWxlbWVudERvY3MoZWxlbWVudElkLCBkb21Nb2R1bGUsIHNjcmlwdEVsZW1lbnQpIHtcbiAgLy8gTm90ZSB0aGF0IHdlIGNvbmNhdGVuYXRlIGRvY3MgZnJvbSBhbGwgc291cmNlcyBpZiB3ZSBmaW5kIHRoZW0uXG4gIC8vIGVsZW1lbnQgY2FuIGJlIGRlZmluZWQgaW46XG4gIC8vIGh0bWwgY29tbWVudCByaWdodCBiZWZvcmUgZG9tLW1vZHVsZVxuICAvLyBodG1sIGNvbW1uZXQgcmlnaHQgYmVmb3JlIHNjcmlwdCBkZWZpbmluZyB0aGUgbW9kdWxlLCBpZiBkb20tbW9kdWxlIGlzIGVtcHR5XG5cbiAgdmFyIGZvdW5kID0gW107XG5cbiAgLy8gRG8gd2UgaGF2ZSBhIEhUTUwgY29tbWVudCBvbiB0aGUgYDxkb20tbW9kdWxlPmAgb3IgYDxzY3JpcHQ+YD9cbiAgLy9cbiAgLy8gQ29uZnVzaW5nbHksIHdpdGggb3VyIGN1cnJlbnQgc3R5bGUsIHRoZSBjb21tZW50IHdpbGwgYmUgYXR0YWNoZWQgdG9cbiAgLy8gYDxoZWFkPmAsIHJhdGhlciB0aGFuIGJlaW5nIGEgc2libGluZyB0byB0aGUgYDxkb20tbW9kdWxlPmBcbiAgdmFyIHNlYXJjaFJvb3QgPSBkb21Nb2R1bGUgfHwgc2NyaXB0RWxlbWVudDtcbiAgdmFyIHBhcmVudHMgPSBkb201Lm5vZGVXYWxrQWxsUHJpb3Ioc2VhcmNoUm9vdCwgZG9tNS5pc0NvbW1lbnROb2RlKTtcbiAgdmFyIGNvbW1lbnQgPSBwYXJlbnRzLmxlbmd0aCA+IDAgPyBwYXJlbnRzWzBdIDogbnVsbDtcbiAgaWYgKGNvbW1lbnQgJiYgY29tbWVudC5kYXRhKSB7XG4gICAgZm91bmQucHVzaChjb21tZW50LmRhdGEpO1xuICB9XG4gIGlmIChmb3VuZC5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICByZXR1cm4gZm91bmRcbiAgICAuZmlsdGVyKGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgICAgIC8vIHNraXAgQGxpY2Vuc2UgY29tbWVudHNcbiAgICAgIGlmIChjb21tZW50ICYmIGNvbW1lbnQuaW5kZXhPZignQGxpY2Vuc2UnID09PSAtMSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pXG4gICAgLm1hcChqc2RvYy51bmluZGVudCkuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIF9maW5kTGFzdENoaWxkTmFtZWQobmFtZSwgcGFyZW50KSB7XG4gIHZhciBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZE5vZGVzO1xuICBmb3IgKHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMSwgY2hpbGQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICBpZiAoY2hpbGQubm9kZU5hbWUgPT09IG5hbWUpIHJldHVybiBjaGlsZDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gVE9ETyhuZXZpcik6IHBhcnNlNS11dGlscyFcbmZ1bmN0aW9uIF9nZXROb2RlQXR0cmlidXRlKG5vZGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGF0dHI7IGkgPCBub2RlLmF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgYXR0ciA9IG5vZGUuYXR0cnNbaV07XG4gICAgaWYgKGF0dHIubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIGF0dHIudmFsdWU7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhbm5vdGF0ZTogICAgICAgIGFubm90YXRlLFxuICBhbm5vdGF0ZUVsZW1lbnQ6IGFubm90YXRlRWxlbWVudCxcbiAgYW5ub3RhdGVCZWhhdmlvcjogYW5ub3RhdGVCZWhhdmlvcixcbiAgY2xlYW46ICAgICAgICAgICBjbGVhbixcbiAgY2xlYW5FbGVtZW50OiAgICBjbGVhbkVsZW1lbnQsXG4gIGZlYXR1cmVFbGVtZW50OiAgZmVhdHVyZUVsZW1lbnQsXG4gIHBhcnNlUHNldWRvRWxlbWVudHM6IHBhcnNlUHNldWRvRWxlbWVudHNcbn07XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cbi8vIGpzaGludCBub2RlOiB0cnVlXG4ndXNlIHN0cmljdCc7XG52YXIgZXN0cmF2ZXJzZSA9IHJlcXVpcmUoJ2VzdHJhdmVyc2UnKTtcblxudmFyIGVzdXRpbCAgICA9IHJlcXVpcmUoJy4vZXN1dGlsJyk7XG52YXIgZmluZEFsaWFzID0gcmVxdWlyZSgnLi9maW5kLWFsaWFzJyk7XG52YXIgYW5hbHl6ZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuL2FuYWx5emUtcHJvcGVydGllcycpO1xudmFyIGFzdFZhbHVlID0gcmVxdWlyZSgnLi9hc3QtdmFsdWUnKTtcblxudmFyIGVsZW1lbnRGaW5kZXIgPSBmdW5jdGlvbiBlbGVtZW50RmluZGVyKCkge1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgZWxlbWVudHMgZXhwb3J0ZWQgYnkgZWFjaCB0cmF2ZXJzZWQgc2NyaXB0LlxuICAgKi9cbiAgdmFyIGVsZW1lbnRzID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IGJlaW5nIGJ1aWx0IGR1cmluZyBhIHRyYXZlcnNhbDtcbiAgICovXG4gIHZhciBlbGVtZW50O1xuXG4gIC8qKlxuICAgKiBhIHNldCBvZiBzcGVjaWFsIGNhc2UgcHJvcGVydGllcy4gdGhlc2Ugc2hvdWxkIG9ubHkgYmUgY2FsbGVkXG4gICAqIHdoZW4gd2Uga25vdyB3ZSdyZSBpbnNpZGUgYW4gZWxlbWVudCBkZWZpbml0aW9uLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgdmFyIHByb3BlcnR5SGFuZGxlcnMgPSB7XG4gICAgaXM6IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLnR5cGUgPT0gJ0xpdGVyYWwnKSB7XG4gICAgICAgIGVsZW1lbnQuaXMgPSBub2RlLnZhbHVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvcGVydGllczogZnVuY3Rpb24obm9kZSkge1xuXG4gICAgICB2YXIgcHJvcHMgPSBhbmFseXplUHJvcGVydGllcyhub2RlKTtcblxuICAgICAgZm9yICh2YXIgaT0wOyBpPHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsZW1lbnQucHJvcGVydGllcy5wdXNoKHByb3BzW2ldKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGJlaGF2aW9yczogZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKG5vZGUudHlwZSAhPSAnQXJyYXlFeHByZXNzaW9uJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGk9MDsgaTxub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB2ID0gYXN0VmFsdWUuZXhwcmVzc2lvblRvVmFsdWUobm9kZS5lbGVtZW50c1tpXSk7XG4gICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgdiA9IGFzdFZhbHVlLkNBTlRfQ09OVkVSVDtcbiAgICAgICAgZWxlbWVudC5iZWhhdmlvcnMucHVzaCh2KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9ic2VydmVyczogZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKG5vZGUudHlwZSAhPSAnQXJyYXlFeHByZXNzaW9uJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpPTA7IGk8bm9kZS5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgdiA9IGFzdFZhbHVlLmV4cHJlc3Npb25Ub1ZhbHVlKG5vZGUuZWxlbWVudHNbaV0pO1xuICAgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHYgPSBhc3RWYWx1ZS5DQU5UX0NPTlZFUlQ7XG4gICAgICAgIGVsZW1lbnQub2JzZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgIGphdmFzY3JpcHROb2RlOiBub2RlLmVsZW1lbnRzW2ldLFxuICAgICAgICAgIGV4cHJlc3Npb246IHZcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciB2aXNpdG9ycyA9IHtcbiAgICBlbnRlckNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBlbnRlckNhbGxFeHByZXNzaW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgdmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICAgICAgaWYgKGNhbGxlZS50eXBlID09ICdJZGVudGlmaWVyJykge1xuXG4gICAgICAgIGlmIChjYWxsZWUubmFtZSA9PSAnUG9seW1lcicpIHtcbiAgICAgICAgICBlbGVtZW50ID0ge1xuICAgICAgICAgICAgdHlwZTogJ2VsZW1lbnQnLFxuICAgICAgICAgICAgZGVzYzogZXN1dGlsLmdldEF0dGFjaGVkQ29tbWVudChwYXJlbnQpLFxuICAgICAgICAgICAgZXZlbnRzOiBlc3V0aWwuZ2V0RXZlbnRDb21tZW50cyhwYXJlbnQpLm1hcCggZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtkZXNjOiBldmVudH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGxlYXZlQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIGxlYXZlQ2FsbEV4cHJlc3Npb24obm9kZSwgcGFyZW50KSB7XG4gICAgICB2YXIgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG4gICAgICBpZiAoY2FsbGVlLnR5cGUgPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgIGlmIChjYWxsZWUubmFtZSA9PSAnUG9seW1lcicpIHtcbiAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBlbnRlck9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uIGVudGVyT2JqZWN0RXhwcmVzc2lvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmIChlbGVtZW50ICYmICFlbGVtZW50LnByb3BlcnRpZXMpIHtcbiAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzID0gW107XG4gICAgICAgIGVsZW1lbnQuYmVoYXZpb3JzID0gW107XG4gICAgICAgIGVsZW1lbnQub2JzZXJ2ZXJzID0gW107XG4gICAgICAgIHZhciBnZXR0ZXJzID0ge307XG4gICAgICAgIHZhciBzZXR0ZXJzID0ge307XG4gICAgICAgIHZhciBkZWZpbmVkUHJvcGVydGllcyA9IHt9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBwcm9wID0gbm9kZS5wcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgIHZhciBuYW1lID0gZXN1dGlsLm9iamVjdEtleVRvU3RyaW5nKHByb3Aua2V5KTtcbiAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0NhbnQgZGV0ZXJtaW5lIG5hbWUgZm9yIHByb3BlcnR5IGtleS4nLFxuICAgICAgICAgICAgICBsb2NhdGlvbjogbm9kZS5sb2Muc3RhcnRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5hbWUgaW4gcHJvcGVydHlIYW5kbGVycykge1xuICAgICAgICAgICAgcHJvcGVydHlIYW5kbGVyc1tuYW1lXShwcm9wLnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGVzdXRpbC50b1Byb3BlcnR5RGVzY3JpcHRvcihwcm9wKTtcbiAgICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXIpIHtcbiAgICAgICAgICAgIGdldHRlcnNbZGVzY3JpcHRvci5uYW1lXSA9IGRlc2NyaXB0b3I7XG4gICAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLnNldHRlcikge1xuICAgICAgICAgICAgc2V0dGVyc1tkZXNjcmlwdG9yLm5hbWVdID0gZGVzY3JpcHRvcjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzLnB1c2goZXN1dGlsLnRvUHJvcGVydHlEZXNjcmlwdG9yKHByb3ApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXMoZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbihnZXR0ZXIpIHtcbiAgICAgICAgICB2YXIgZ2V0ID0gZ2V0dGVyc1tnZXR0ZXJdO1xuICAgICAgICAgIGRlZmluZWRQcm9wZXJ0aWVzW2dldC5uYW1lXSA9IGdldDtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHNldHRlcnMpLmZvckVhY2goZnVuY3Rpb24oc2V0dGVyKSB7XG4gICAgICAgICAgdmFyIHNldCA9IHNldHRlcnNbc2V0dGVyXTtcbiAgICAgICAgICBpZiAoIShzZXQubmFtZSBpbiBkZWZpbmVkUHJvcGVydGllcykpIHtcbiAgICAgICAgICAgIGRlZmluZWRQcm9wZXJ0aWVzW3NldC5uYW1lXSA9IHNldDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVmaW5lZFByb3BlcnRpZXNbc2V0Lm5hbWVdLnNldHRlciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmtleXMoZGVmaW5lZFByb3BlcnRpZXMpLmZvckVhY2goZnVuY3Rpb24ocCl7XG4gICAgICAgICAgdmFyIHByb3AgPSBkZWZpbmVkUHJvcGVydGllc1twXTtcbiAgICAgICAgICBlbGVtZW50LnByb3BlcnRpZXMucHVzaChwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlc3RyYXZlcnNlLlZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiB7dmlzaXRvcnM6IHZpc2l0b3JzLCBlbGVtZW50czogZWxlbWVudHN9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbGVtZW50RmluZGVyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xudmFyIGVzdHJhdmVyc2UgPSByZXF1aXJlKFwiZXN0cmF2ZXJzZVwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYW4gRXNwcmVlIG5vZGUgbWF0Y2hlcyBhIHBhcnRpY3VsYXIgb2JqZWN0IHBhdGguXG4gKlxuICogZS5nLiB5b3UgaGF2ZSBhIE1lbWJlckV4cHJlc3Npb24gbm9kZSwgYW5kIHdhbnQgdG8gc2VlIHdoZXRoZXIgaXQgcmVwcmVzZW50c1xuICogYEZvby5CYXIuQmF6YDpcbiAqXG4gKiAgICAgbWF0Y2hlc0NhbGxFeHByZXNzaW9uKG5vZGUsIFsnRm9vJywgJ0JhcicsICdCYXonXSlcbiAqXG4gKiBAcGFyYW0ge05vZGV9IGV4cHJlc3Npb24gVGhlIEVzcHJlZSBub2RlIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHBhdGggVGhlIHBhdGggdG8gbG9vayBmb3IuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNDYWxsRXhwcmVzc2lvbihleHByZXNzaW9uLCBwYXRoKSB7XG4gIGlmICghZXhwcmVzc2lvbi5wcm9wZXJ0eSB8fCAhZXhwcmVzc2lvbi5vYmplY3QpIHJldHVybjtcbiAgY29uc29sZS5hc3NlcnQocGF0aC5sZW5ndGggPj0gMik7XG5cbiAgLy8gVW5yYXZlbCBiYWNrd2FyZHMsIG1ha2Ugc3VyZSBwcm9wZXJ0aWVzIG1hdGNoIGVhY2ggc3RlcCBvZiB0aGUgd2F5LlxuICBpZiAoZXhwcmVzc2lvbi5wcm9wZXJ0eS5uYW1lICE9PSBwYXRoW3BhdGgubGVuZ3RoIC0gMV0pIHJldHVybiBmYWxzZTtcbiAgLy8gV2UndmUgZ290IG91cnNlbHZlcyBhIGZpbmFsIG1lbWJlciBleHByZXNzaW9uLlxuICBpZiAocGF0aC5sZW5ndGggPT0gMiAmJiBleHByZXNzaW9uLm9iamVjdC50eXBlID09PSAnSWRlbnRpZmllcicpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vYmplY3QubmFtZSA9PT0gcGF0aFswXTtcbiAgfVxuICAvLyBOZXN0ZWQgZXhwcmVzc2lvbnMuXG4gIGlmIChwYXRoLmxlbmd0aCA+IDIgJiYgZXhwcmVzc2lvbi5vYmplY3QudHlwZSA9PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICByZXR1cm4gbWF0Y2hlc0NhbGxFeHByZXNzaW9uKGV4cHJlc3Npb24ub2JqZWN0LCBwYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoIC0gMSkpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0ga2V5IFRoZSBub2RlIHJlcHJlc2VudGluZyBhbiBvYmplY3Qga2V5IG9yIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1lIG9mIHRoYXQga2V5LlxuICovXG5mdW5jdGlvbiBvYmplY3RLZXlUb1N0cmluZyhrZXkpIHtcbiAgaWYgKGtleS50eXBlID09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiBrZXkubmFtZTtcbiAgfVxuICBpZiAoa2V5LnR5cGUgPT0gJ0xpdGVyYWwnKSB7XG4gICAgcmV0dXJuIGtleS52YWx1ZTtcbiAgfVxuICBpZiAoa2V5LnR5cGUgPT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIG9iamVjdEtleVRvU3RyaW5nKGtleS5vYmplY3QpICsgJy4nICsgb2JqZWN0S2V5VG9TdHJpbmcoa2V5LnByb3BlcnR5KTtcbiAgfVxufVxuXG52YXIgQ0xPU1VSRV9DT05TVFJVQ1RPUl9NQVAgPSB7XG4gICdCb29sZWFuJzogJ2Jvb2xlYW4nLFxuICAnTnVtYmVyJzogICdudW1iZXInLFxuICAnU3RyaW5nJzogICdzdHJpbmcnLFxufTtcblxuLyoqXG4gKiBBU1QgZXhwcmVzc2lvbiAtPiBDbG9zdXJlIHR5cGUuXG4gKlxuICogQWNjZXB0cyBsaXRlcmFsIHZhbHVlcywgYW5kIG5hdGl2ZSBjb25zdHJ1Y3RvcnMuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlIEFuIEVzcHJlZSBleHByZXNzaW9uIG5vZGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0eXBlIG9mIHRoYXQgZXhwcmVzc2lvbiwgaW4gQ2xvc3VyZSB0ZXJtcy5cbiAqL1xuZnVuY3Rpb24gY2xvc3VyZVR5cGUobm9kZSkge1xuICBpZiAobm9kZS50eXBlLm1hdGNoKC9FeHByZXNzaW9uJC8pKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZS5zdWJzdHIoMCwgbm9kZS50eXBlLmxlbmd0aCAtIDEwKTtcbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdMaXRlcmFsJykge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS52YWx1ZTtcbiAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgIHJldHVybiBDTE9TVVJFX0NPTlNUUlVDVE9SX01BUFtub2RlLm5hbWVdIHx8IG5vZGUubmFtZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB7XG4gICAgICBtZXNzYWdlOiAnVW5rbm93biBDbG9zdXJlIHR5cGUgZm9yIG5vZGU6ICcgKyBub2RlLnR5cGUsXG4gICAgICBsb2NhdGlvbjogbm9kZS5sb2Muc3RhcnQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0QXR0YWNoZWRDb21tZW50KG5vZGUpIHtcbiAgdmFyIGNvbW1lbnRzID0gZ2V0TGVhZGluZ0NvbW1lbnRzKG5vZGUpIHx8IGdldExlYWRpbmdDb21tZW50cyhub2RlLmtleSk7XG4gIGlmICghY29tbWVudHMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIGNvbW1lbnRzW2NvbW1lbnRzLmxlbmd0aCAtIDFdO1xufVxuXG4vKipcbiAqIFJldHVybnMgYWxsIGNvbW1lbnRzIGZyb20gYSB0cmVlIGRlZmluZWQgd2l0aCBAZXZlbnQuXG4gKiBAcGFyYW0gIHtOb2RlfSBub2RlIFtkZXNjcmlwdGlvbl1cbiAqIEByZXR1cm4ge1t0eXBlXX0gICAgICBbZGVzY3JpcHRpb25dXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50Q29tbWVudHMobm9kZSkge1xuICB2YXIgZXZlbnRDb21tZW50cyA9IFtdO1xuICBlc3RyYXZlcnNlLnRyYXZlcnNlKG5vZGUsIHtcbiAgICBlbnRlcjogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBjb21tZW50cyA9IChub2RlLmxlYWRpbmdDb21tZW50cyB8fCBbXSkuY29uY2F0KG5vZGUudHJhaWxpbmdDb21tZW50cyB8fCBbXSlcbiAgICAgICAgLm1hcCggZnVuY3Rpb24oY29tbWVudEFTVCkge1xuICAgICAgICAgIHJldHVybiBjb21tZW50QVNULnZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKCBmdW5jdGlvbihjb21tZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1lbnQuaW5kZXhPZihcIkBldmVudFwiKSAhPSAtMTtcbiAgICAgICAgfSk7XG4gICAgICBldmVudENvbW1lbnRzID0gZXZlbnRDb21tZW50cy5jb25jYXQoY29tbWVudHMpO1xuICAgIH1cbiAgfSk7XG4gIC8vIGRlZHVwXG4gIHJldHVybiBldmVudENvbW1lbnRzLmZpbHRlciggZnVuY3Rpb24oZWwsIGluZGV4LCBhcnJheSkge1xuICAgIHJldHVybiBhcnJheS5pbmRleE9mKGVsKSA9PT0gaW5kZXg7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHBhcmFtXG4gKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZ2V0TGVhZGluZ0NvbW1lbnRzKG5vZGUpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjb21tZW50cyA9IG5vZGUubGVhZGluZ0NvbW1lbnRzO1xuICBpZiAoIWNvbW1lbnRzIHx8IGNvbW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICByZXR1cm4gY29tbWVudHMubWFwKGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgICByZXR1cm4gY29tbWVudC52YWx1ZTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBwYXJzZTUgUHJvcGVydHkgQVNUIG5vZGUgaW50byBpdHMgSHlkcm9seXNpcyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEByZXR1cm4ge1Byb3BlcnR5RGVzY3JpcHRvcn1cbiAqL1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eURlc2NyaXB0b3Iobm9kZSkge1xuICB2YXIgdHlwZSA9IGNsb3N1cmVUeXBlKG5vZGUudmFsdWUpO1xuICBpZiAodHlwZSA9PSBcIkZ1bmN0aW9uXCIpIHtcbiAgICBpZiAobm9kZS5raW5kID09PSBcImdldFwiIHx8IG5vZGUua2luZCA9PT0gXCJzZXRcIikge1xuICAgICAgdHlwZSA9ICcnO1xuICAgICAgbm9kZVtub2RlLmtpbmQrXCJ0ZXJcIl0gPSB0cnVlO1xuICAgIH1cbiAgfVxuICB2YXIgcmVzdWx0ID0ge1xuICAgIG5hbWU6IG9iamVjdEtleVRvU3RyaW5nKG5vZGUua2V5KSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGRlc2M6IGdldEF0dGFjaGVkQ29tbWVudChub2RlKSxcbiAgICBqYXZhc2NyaXB0Tm9kZTogbm9kZVxuICB9O1xuXG4gIGlmICh0eXBlID09PSAnRnVuY3Rpb24nKSB7XG4gICAgcmVzdWx0LnBhcmFtcyA9IChub2RlLnZhbHVlLnBhcmFtcyB8fCBbXSkubWFwKGZ1bmN0aW9uKHBhcmFtKSB7XG4gICAgICByZXR1cm4ge25hbWU6IHBhcmFtLm5hbWV9O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNsb3N1cmVUeXBlOiAgICAgICAgICAgY2xvc3VyZVR5cGUsXG4gIGdldEF0dGFjaGVkQ29tbWVudDogICAgZ2V0QXR0YWNoZWRDb21tZW50LFxuICBnZXRFdmVudENvbW1lbnRzOiAgICAgIGdldEV2ZW50Q29tbWVudHMsXG4gIG1hdGNoZXNDYWxsRXhwcmVzc2lvbjogbWF0Y2hlc0NhbGxFeHByZXNzaW9uLFxuICBvYmplY3RLZXlUb1N0cmluZzogICAgIG9iamVjdEtleVRvU3RyaW5nLFxuICB0b1Byb3BlcnR5RGVzY3JpcHRvcjogIHRvUHJvcGVydHlEZXNjcmlwdG9yLFxufTtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBlc3RyYXZlcnNlID0gcmVxdWlyZSgnZXN0cmF2ZXJzZScpO1xuXG52YXIgZXN1dGlsID0gcmVxdWlyZSgnLi9lc3V0aWwnKTtcblxudmFyIG51bUZlYXR1cmVzID0gMDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmZWF0dXJlRmluZGVyKCkge1xuICAvKiogQHR5cGUgeyFBcnJheTxGZWF0dXJlRGVzY3JpcHRvcj59IFRoZSBmZWF0dXJlcyB3ZSd2ZSBmb3VuZC4gKi9cbiAgdmFyIGZlYXR1cmVzID0gW107XG5cbiAgdmFyIHZpc2l0b3JzID0ge1xuXG4gICAgZW50ZXJDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gZW50ZXJDYWxsRXhwcmVzc2lvbihub2RlLCBwYXJlbnQpIHtcbiAgICAgIGlmICghZXN1dGlsLm1hdGNoZXNDYWxsRXhwcmVzc2lvbihub2RlLmNhbGxlZSwgWydQb2x5bWVyJywgJ0Jhc2UnLCAnX2FkZEZlYXR1cmUnXSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLyoqIEB0eXBlIHshRmVhdHVyZURlc2NyaXB0b3J9ICovXG4gICAgICB2YXIgZmVhdHVyZSA9IHt9O1xuICAgICAgdGhpcy5fZXh0cmFjdERlc2MoZmVhdHVyZSwgbm9kZSwgcGFyZW50KTtcbiAgICAgIHRoaXMuX2V4dHJhY3RQcm9wZXJ0aWVzKGZlYXR1cmUsIG5vZGUsIHBhcmVudCk7XG5cbiAgICAgIGZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XG4gICAgfSxcblxuICAgIF9leHRyYWN0RGVzYzogZnVuY3Rpb24gX2V4dHJhY3REZXNjKGZlYXR1cmUsIG5vZGUsIHBhcmVudCkge1xuICAgICAgZmVhdHVyZS5kZXNjID0gZXN1dGlsLmdldEF0dGFjaGVkQ29tbWVudChwYXJlbnQpO1xuICAgIH0sXG5cbiAgICBfZXh0cmFjdFByb3BlcnRpZXM6IGZ1bmN0aW9uIF9leHRyYWN0UHJvcGVydGllcyhmZWF0dXJlLCBub2RlLCBwYXJlbnQpIHtcbiAgICAgIHZhciBmZWF0dXJlTm9kZSA9IG5vZGUuYXJndW1lbnRzWzBdO1xuICAgICAgaWYgKGZlYXR1cmVOb2RlLnR5cGUgIT09ICdPYmplY3RFeHByZXNzaW9uJykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAnRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gUG9seW1lci5CYXNlLl9hZGRGZWF0dXJlIHRvIGJlIGFuIG9iamVjdC4nLFxuICAgICAgICAgICAgJ0dvdCcsIGZlYXR1cmVOb2RlLnR5cGUsICdpbnN0ZWFkLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIWZlYXR1cmVOb2RlLnByb3BlcnRpZXMpIHJldHVybjtcblxuICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzID0gZmVhdHVyZU5vZGUucHJvcGVydGllcy5tYXAoZXN1dGlsLnRvUHJvcGVydHlEZXNjcmlwdG9yKTtcbiAgICB9LFxuXG4gIH07XG5cbiAgcmV0dXJuIHt2aXNpdG9yczogdmlzaXRvcnMsIGZlYXR1cmVzOiBmZWF0dXJlc307XG59O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xudmFyIGZpbmRBbGlhcyA9IGZ1bmN0aW9uIGZpbmRBbGlhcyhuYW1lcywgYWxpYXNlcywgbmFtZSkge1xuICBpZiAoIW5hbWVzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGFsaWFzZXNbbmFtZXMuaW5kZXhPZihuYW1lKV07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbmRBbGlhcztcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBkb201ID0gcmVxdWlyZSgnZG9tNScpO1xuXG52YXIgcCA9IGRvbTUucHJlZGljYXRlcztcblxudmFyIGlzSHRtbEltcG9ydE5vZGUgPSBwLkFORChcbiAgcC5oYXNUYWdOYW1lKCdsaW5rJyksXG4gIHAuaGFzQXR0clZhbHVlKCdyZWwnLCAnaW1wb3J0JyksXG4gIHAuTk9UKFxuICAgIHAuaGFzQXR0clZhbHVlKCd0eXBlJywgJ2NzcycpXG4gIClcbik7XG5cbnZhciBpc1N0eWxlTm9kZSA9IHAuT1IoXG4gIC8vIGlubGluZSBzdHlsZVxuICBwLmhhc1RhZ05hbWUoJ3N0eWxlJyksXG4gIC8vIGV4dGVybmFsIHN0eWxlc2hlZXRcbiAgcC5BTkQoXG4gICAgcC5oYXNUYWdOYW1lKCdsaW5rJyksXG4gICAgcC5oYXNBdHRyVmFsdWUoJ3JlbCcsICdzdHlsZXNoZWV0JylcbiAgKSxcbiAgLy8gcG9seW1lciBzcGVjaWZpYyBleHRlcm5hbCBzdHlsZXNoZWV0XG4gIHAuQU5EKFxuICAgIHAuaGFzVGFnTmFtZSgnbGluaycpLFxuICAgIHAuaGFzQXR0clZhbHVlKCdyZWwnLCAnaW1wb3J0JyksXG4gICAgcC5oYXNBdHRyVmFsdWUoJ3R5cGUnLCAnY3NzJylcbiAgKVxuKTtcblxudmFyIGlzSlNTY3JpcHROb2RlID0gcC5BTkQoXG4gIHAuaGFzVGFnTmFtZSgnc2NyaXB0JyksXG4gIHAuT1IoXG4gICAgcC5OT1QocC5oYXNBdHRyKCd0eXBlJykpLFxuICAgIHAuaGFzQXR0clZhbHVlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpLFxuICAgIHAuaGFzQXR0clZhbHVlKCd0eXBlJywgJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnKVxuICApXG4pO1xuXG5mdW5jdGlvbiBhZGROb2RlKG5vZGUsIHJlZ2lzdHJ5KSB7XG4gIGlmIChpc0h0bWxJbXBvcnROb2RlKG5vZGUpKSB7XG4gICAgcmVnaXN0cnkuaW1wb3J0LnB1c2gobm9kZSk7XG4gIH0gZWxzZSBpZiAoaXNTdHlsZU5vZGUobm9kZSkpIHtcbiAgICByZWdpc3RyeS5zdHlsZS5wdXNoKG5vZGUpO1xuICB9IGVsc2UgaWYgKGlzSlNTY3JpcHROb2RlKG5vZGUpKSB7XG4gICAgcmVnaXN0cnkuc2NyaXB0LnB1c2gobm9kZSk7XG4gIH0gZWxzZSBpZiAobm9kZS50YWdOYW1lID09PSAnYmFzZScpIHtcbiAgICByZWdpc3RyeS5iYXNlLnB1c2gobm9kZSk7XG4gIH0gZWxzZSBpZiAobm9kZS50YWdOYW1lID09PSAndGVtcGxhdGUnKSB7XG4gICAgcmVnaXN0cnkudGVtcGxhdGUucHVzaChub2RlKTtcbiAgfSBlbHNlIGlmIChub2RlLnRhZ05hbWUgPT09ICdkb20tbW9kdWxlJykge1xuICAgIHJlZ2lzdHJ5Wydkb20tbW9kdWxlJ10ucHVzaChub2RlKTtcbiAgfSBlbHNlIGlmIChkb201LmlzQ29tbWVudE5vZGUobm9kZSkpIHtcbiAgICByZWdpc3RyeS5jb21tZW50LnB1c2gobm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TGluZUFuZENvbHVtbihzdHJpbmcsIGNoYXJOdW1iZXIpIHtcbiAgaWYgKGNoYXJOdW1iZXIgPiBzdHJpbmcubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUT0RPKGFqbyk6IENhY2hpbmcgdGhlIGxpbmUgbGVuZ3RocyBvZiBlYWNoIGRvY3VtZW50IGNvdWxkIGJlIG11Y2ggZmFzdGVyLlxuICB2YXIgc2xpY2VkID0gc3RyaW5nLnNsaWNlKDAsY2hhck51bWJlcisxKTtcbiAgdmFyIHNwbGl0ID0gc2xpY2VkLnNwbGl0KCdcXG4nKTtcbiAgdmFyIGxpbmUgPSBzcGxpdC5sZW5ndGg7XG4gIHZhciBjb2x1bW4gPSBzcGxpdFtzcGxpdC5sZW5ndGggLSAxXS5sZW5ndGg7XG4gIHJldHVybiB7bGluZTogbGluZSwgY29sdW1uOiBjb2x1bW59O1xufVxuXG4vKipcbiogUGFyc2U1J3MgcmVwcmVzZW50YXRpb24gb2YgYSBwYXJzZWQgaHRtbCBkb2N1bWVudC5cbiogQHR5cGVkZWYge09iamVjdH0gRG9jdW1lbnRBU1RcbiovXG5cbi8qKlxuKiBUaGUgQVNUcyBvZiB0aGUgSFRNTCBlbGVtZW50cyBuZWVkZWQgdG8gcmVwcmVzZW50IFBvbHltZXIgZWxlbWVudHMuXG4qIEB0eXBlZGVmIHtPYmplY3R9IFBhcnNlZEltcG9ydFxuKiBAcHJvcGVydHkge0FycmF5PERvY3VtZW50QVNUPn0gdGVtcGxhdGUgVGhlIGVudHJ5IHBvaW50cyB0byB0aGUgQVNUIGF0IGVhY2ggb3V0ZXJtb3N0IHRlbXBsYXRlIHRhZy5cbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IHNjcmlwdCBUaGUgZW50cnkgcG9pbnRzIHRvIHRoZSBBU1QgYXQgZWFjaCBzY3JpcHQgdGFnIG5vdCBpbnNpZGUgYSB0ZW1wbGF0ZS5cbiogQHByb3BlcnR5IHtBcnJheTxEb2N1bWVudEFTVD59IHN0eWxlIFRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIEFTVCBhdCBzdHlsZSB0YWcgb3V0c2lkZSBhIHRlbXBsYXRlLlxuKiBAcHJvcGVydHkge0FycmF5PERvY3VtZW50QVNUPn0gZG9tLW1vZHVsZSBUaGUgZW50cnkgcG9pbnRzIHRvIHRoZSBBU1QgYXQgZWFjaCBvdXRlcm1vc3QgZG9tLW1vZHVsZSBlbGVtZW50LlxuKiBAcHJvcGVydHkge0RvY3VtZW50QVNUfSBhc3QgVGhlIGZ1bGwgcGFyc2U1IGFzdCBmb3IgdGhlIGRvY3VtZW50LlxuKi9cblxuLyoqXG4qIFBhcnNlIGh0bWwgaW50byBBU1RzLlxuKiBAcGFyYW0ge3N0cmluZ30gaHRtbFN0cmluZyBBIHV0ZjgsIGh0bWw1IGRvY3VtZW50IGNvbnRhaW5pbmcgcG9seW1lciBlbGVtZW50IG9yIG1vZHVsZSBkZWZpbml0b25zLlxuKiBAcGFyYW0ge3N0cmluZ30gaHJlZiAgICAgICBUaGUgcGF0aCBvZiB0aGUgZG9jdW1lbnQuXG4qIEByZXR1cm4ge1BhcnNlZEltcG9ydH1cbiovXG52YXIgaW1wb3J0UGFyc2UgPSBmdW5jdGlvbiBpbXBvcnRQYXJzZShodG1sU3RyaW5nLCBocmVmKSB7XG4gIHZhciBkb2M7XG4gIHRyeSB7XG4gICAgZG9jID0gZG9tNS5wYXJzZShodG1sU3RyaW5nLCB7bG9jYXRpb25JbmZvOiB0cnVlfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBBZGQgbGluZS9jb2x1bW4gaW5mb3JtYXRpb25cbiAgZG9tNS50cmVlTWFwKGRvYywgZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlLl9fbG9jYXRpb24gJiYgbm9kZS5fX2xvY2F0aW9uLnN0YXJ0ID49IDApIHtcbiAgICAgIG5vZGUuX19sb2NhdGlvbkRldGFpbCA9IGdldExpbmVBbmRDb2x1bW4oaHRtbFN0cmluZywgbm9kZS5fX2xvY2F0aW9uLnN0YXJ0KTtcbiAgICAgIGlmIChocmVmKSB7XG4gICAgICAgIG5vZGUuX19vd25lckRvY3VtZW50ID0gaHJlZjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHZhciByZWdpc3RyeSA9IHtcbiAgICAgIGJhc2U6IFtdLFxuICAgICAgdGVtcGxhdGU6IFtdLFxuICAgICAgc2NyaXB0OiBbXSxcbiAgICAgIHN0eWxlOiBbXSxcbiAgICAgIGltcG9ydDogW10sXG4gICAgICAnZG9tLW1vZHVsZSc6IFtdLFxuICAgICAgY29tbWVudDogW119O1xuXG4gIHZhciBxdWV1ZSA9IFtdLmNvbmNhdChkb2MuY2hpbGROb2Rlcyk7XG4gIHZhciBuZXh0Tm9kZTtcbiAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICBuZXh0Tm9kZSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKG5leHROb2RlKSB7XG4gICAgICBxdWV1ZSA9IHF1ZXVlLmNvbmNhdChuZXh0Tm9kZS5jaGlsZE5vZGVzKTtcbiAgICAgIGFkZE5vZGUobmV4dE5vZGUsIHJlZ2lzdHJ5KTtcbiAgICB9XG4gIH1cbiAgcmVnaXN0cnkuYXN0ID0gZG9jO1xuICByZXR1cm4gcmVnaXN0cnk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGltcG9ydFBhcnNlO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vKipcbiogRmluZHMgYW5kIGFubm90YXRlcyB0aGUgUG9seW1lcigpIGFuZCBtb2R1bGF0ZSgpIGNhbGxzIGluIGphdmFzY3JpcHQuXG4qL1xuLy8ganNoaW50IG5vZGU6IHRydWVcbid1c2Ugc3RyaWN0JztcbnZhciBlc3ByZWUgPSByZXF1aXJlKCdlc3ByZWUnKTtcbnZhciBlc3RyYXZlcnNlID0gcmVxdWlyZSgnZXN0cmF2ZXJzZScpO1xuXG52YXIgYmVoYXZpb3JGaW5kZXIgPSByZXF1aXJlKCcuL2JlaGF2aW9yLWZpbmRlcicpO1xudmFyIGVsZW1lbnRGaW5kZXIgID0gcmVxdWlyZSgnLi9lbGVtZW50LWZpbmRlcicpO1xudmFyIGZlYXR1cmVGaW5kZXIgID0gcmVxdWlyZSgnLi9mZWF0dXJlLWZpbmRlcicpO1xuXG5mdW5jdGlvbiB0cmF2ZXJzZSh2aXNpdG9yUmVnaXN0cmllcykge1xuICB2YXIgdmlzaXRvcjtcbiAgZnVuY3Rpb24gYXBwbHlWaXNpdG9ycyhuYW1lLCBub2RlLCBwYXJlbnQpIHtcbiAgICB2YXIgcmV0dXJuVmFsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzaXRvclJlZ2lzdHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChuYW1lIGluIHZpc2l0b3JSZWdpc3RyaWVzW2ldKSB7XG4gICAgICAgIHJldHVyblZhbCA9IHZpc2l0b3JSZWdpc3RyaWVzW2ldW25hbWVdKG5vZGUsIHBhcmVudCk7XG4gICAgICAgIGlmIChyZXR1cm5WYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgZW50ZXI6IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgdmlzaXRvciA9ICdlbnRlcicgKyBub2RlLnR5cGU7XG4gICAgICByZXR1cm4gYXBwbHlWaXNpdG9ycyh2aXNpdG9yLCBub2RlLCBwYXJlbnQpO1xuICAgIH0sXG4gICAgbGVhdmU6IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkge1xuICAgICAgdmlzaXRvciA9ICdsZWF2ZScgKyBub2RlLnR5cGU7XG4gICAgICByZXR1cm4gYXBwbHlWaXNpdG9ycyh2aXNpdG9yLCBub2RlLCBwYXJlbnQpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIGpzUGFyc2UgPSBmdW5jdGlvbiBqc1BhcnNlKGpzU3RyaW5nKSB7XG4gIHZhciBzY3JpcHQgPSBlc3ByZWUucGFyc2UoanNTdHJpbmcsIHtcbiAgICBhdHRhY2hDb21tZW50OiB0cnVlLFxuICAgIGNvbW1lbnQ6IHRydWUsXG4gICAgbG9jOiB0cnVlLFxuICAgIGVjbWFGZWF0dXJlczoge1xuICAgICAgYXJyb3dGdW5jdGlvbnM6IHRydWUsXG4gICAgICBibG9ja0JpbmRpbmdzOiB0cnVlLFxuICAgICAgZGVzdHJ1Y3R1cmluZzogdHJ1ZSxcbiAgICAgIHJlZ2V4WUZsYWc6IHRydWUsXG4gICAgICByZWdleFVGbGFnOiB0cnVlLFxuICAgICAgdGVtcGxhdGVTdHJpbmdzOiB0cnVlLFxuICAgICAgYmluYXJ5TGl0ZXJhbHM6IHRydWUsXG4gICAgICB1bmljb2RlQ29kZVBvaW50RXNjYXBlczogdHJ1ZSxcbiAgICAgIGRlZmF1bHRQYXJhbXM6IHRydWUsXG4gICAgICByZXN0UGFyYW1zOiB0cnVlLFxuICAgICAgZm9yT2Y6IHRydWUsXG4gICAgICBvYmplY3RMaXRlcmFsQ29tcHV0ZWRQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgb2JqZWN0TGl0ZXJhbFNob3J0aGFuZE1ldGhvZHM6IHRydWUsXG4gICAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kUHJvcGVydGllczogdHJ1ZSxcbiAgICAgIG9iamVjdExpdGVyYWxEdXBsaWNhdGVQcm9wZXJ0aWVzOiB0cnVlLFxuICAgICAgZ2VuZXJhdG9yczogdHJ1ZSxcbiAgICAgIHNwcmVhZDogdHJ1ZSxcbiAgICAgIGNsYXNzZXM6IHRydWUsXG4gICAgICBtb2R1bGVzOiB0cnVlLFxuICAgICAganN4OiB0cnVlLFxuICAgICAgZ2xvYmFsUmV0dXJuOiB0cnVlLFxuICAgIH1cbiAgfSk7XG5cbiAgdmFyIGZlYXR1cmVJbmZvID0gZmVhdHVyZUZpbmRlcigpO1xuICB2YXIgYmVoYXZpb3JJbmZvID0gYmVoYXZpb3JGaW5kZXIoKTtcbiAgdmFyIGVsZW1lbnRJbmZvID0gZWxlbWVudEZpbmRlcigpO1xuXG4gIHZhciB2aXNpdG9ycyA9IFtmZWF0dXJlSW5mbywgYmVoYXZpb3JJbmZvLCBlbGVtZW50SW5mb10ubWFwKGZ1bmN0aW9uKGluZm8pIHtcbiAgICByZXR1cm4gaW5mby52aXNpdG9ycztcbiAgfSk7XG4gIGVzdHJhdmVyc2UudHJhdmVyc2Uoc2NyaXB0LCB0cmF2ZXJzZSh2aXNpdG9ycykpO1xuXG4gIHJldHVybiB7XG4gICAgYmVoYXZpb3JzOiBiZWhhdmlvckluZm8uYmVoYXZpb3JzLFxuICAgIGVsZW1lbnRzOiAgZWxlbWVudEluZm8uZWxlbWVudHMsXG4gICAgZmVhdHVyZXM6ICBmZWF0dXJlSW5mby5mZWF0dXJlcyxcbiAgICBwYXJzZWRTY3JpcHQ6IHNjcmlwdFxuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBqc1BhcnNlO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZG9jdHJpbmUgPSByZXF1aXJlKCdkb2N0cmluZScpO1xuXG4vKipcbiAqIEFuIGFubm90YXRlZCBKU0RvYyBibG9jayB0YWcsIGFsbCBmaWVsZHMgYXJlIG9wdGlvbmFsbHkgcHJvY2Vzc2VkIGV4Y2VwdCBmb3JcbiAqIHRoZSB0YWc6XG4gKlxuICogICAgIEBUQUcge1RZUEV9IE5BTUUgREVTQ1xuICpcbiAqIGBsaW5lYCBhbmQgYGNvbGAgaW5kaWNhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGV4dCB0aGF0XG4gKiB0aGUgdGFnIHdhcyBleHRyYWN0ZWQgZnJvbSAtIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGNvbW1lbnRcbiAqIGNvbnRlbnRzIChlLmcuIHRoZSB2YWx1ZSBvZiBgZGVzY2Agb24gYSBkZXNjcmlwdG9yIG5vZGUpLiBMaW5lcyBhcmVcbiAqIDEtaW5kZXhlZC5cbiAqXG4gKiBAdHlwZWRlZiB7e1xuICogICB0YWc6ICAgc3RyaW5nLFxuICogICB0eXBlOiA/c3RyaW5nLFxuICogICBuYW1lOiA/c3RyaW5nLFxuICogICBkZXNjcmlwdGlvbjogP3N0cmluZyxcbiAqIH19XG4gKi9cbnZhciBKc2RvY1RhZztcblxuLyoqXG4gKiBUaGUgcGFyc2VkIHJlcHJlc2VudGF0aW9uIG9mIGEgSlNEb2MgY29tbWVudC5cbiAqXG4gKiBAdHlwZWRlZiB7e1xuICogICBkZXNjcmlwdGlvbjogP3N0cmluZyxcbiAqICAgdGFnczogQXJyYXk8SnNkb2NUYWc+LFxuICogfX1cbiAqL1xudmFyIEpzZG9jQW5ub3RhdGlvbjtcblxuLyoqXG4gKiBkb2N0cmluZSBjb25maWd1cmF0aW9uLFxuICogQ1VSUkVOVExZIFVOVVNFRCBCRUNBVVNFIFBSSVZBVEVcbiAqL1xuLy8gZnVuY3Rpb24gY29uZmlndXJlRG9jdHJpbmUoKSB7XG5cbi8vICAgLy8gQGhlcm8gW3BhdGgvdG8vaW1hZ2VdXG4vLyAgIGRvY3RyaW5lLlJ1bGVzWydoZXJvJ10gPSBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXTtcblxuLy8gICAvLyAvLyBAZGVtbyBbcGF0aC90by9kZW1vXSBbRGVtbyB0aXRsZV1cbi8vICAgZG9jdHJpbmUuUnVsZXNbJ2RlbW8nXSA9IFsncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ3BhcnNlRGVzY3JpcHRpb24nLCAnZW5zdXJlRW5kJ107XG5cbi8vICAgLy8gLy8gQHBvbHltZXJCZWhhdmlvciBbUG9seW1lci5CZWhhdmlvck5hbWVdXG4vLyAgIGRvY3RyaW5lLlJ1bGVzWydwb2x5bWVyQmVoYXZpb3InXSA9IFsncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddO1xuLy8gfVxuLy8gY29uZmlndXJlRG9jdHJpbmUoKTtcblxuLy8gQGRlbW8gW3BhdGhdIFt0aXRsZV1cbmZ1bmN0aW9uIHBhcnNlRGVtbyh0YWcpIHtcbiAgdmFyIG1hdGNoID0gKHRhZy5kZXNjcmlwdGlvbiB8fCBcIlwiKS5tYXRjaCgvXlxccyooXFxTKilcXHMqKC4qKSQvKTtcbiAgcmV0dXJuIHtcbiAgICB0YWc6ICdkZW1vJyxcbiAgICB0eXBlOiBudWxsLFxuICAgIG5hbWU6IG1hdGNoID8gbWF0Y2hbMV0gOiBudWxsLFxuICAgIGRlc2NyaXB0aW9uOiBtYXRjaCA/IG1hdGNoWzJdIDogbnVsbFxuICB9O1xufVxuXG4vLyBAaGVybyBbcGF0aF1cbmZ1bmN0aW9uIHBhcnNlSGVybyh0YWcpIHtcbiAgcmV0dXJuIHtcbiAgICB0YWc6ICB0YWcudGl0bGUsXG4gICAgdHlwZTogbnVsbCxcbiAgICBuYW1lOiB0YWcuZGVzY3JpcHRpb24sXG4gICAgZGVzY3JpcHRpb246IG51bGxcbiAgfTtcbn1cblxuLy8gQHBvbHltZXJCZWhhdmlvciBbbmFtZV1cbmZ1bmN0aW9uIHBhcnNlUG9seW1lckJlaGF2aW9yKHRhZykge1xuICByZXR1cm4ge1xuICAgIHRhZzogIHRhZy50aXRsZSxcbiAgICB0eXBlOiBudWxsLFxuICAgIG5hbWU6IHRhZy5kZXNjcmlwdGlvbixcbiAgICBkZXNjcmlwdGlvbjogbnVsbFxuICB9O1xufVxuXG4vLyBAcHNldWRvRWxlbWVudCBuYW1lXG5mdW5jdGlvbiBwYXJzZVBzZXVkb0VsZW1lbnQodGFnKSB7XG4gIHJldHVybiB7XG4gICAgdGFnOiAgdGFnLnRpdGxlLFxuICAgIHR5cGU6IG51bGwsXG4gICAgbmFtZTogdGFnLmRlc2NyaXB0aW9uLFxuICAgIGRlc2NyaXB0aW9uOiBudWxsXG4gIH07XG59XG5cbnZhciBDVVNUT01fVEFHUyA9IHtcbiAgZGVtbzogcGFyc2VEZW1vLFxuICBoZXJvOiBwYXJzZUhlcm8sXG4gIHBvbHltZXJCZWhhdmlvcjogcGFyc2VQb2x5bWVyQmVoYXZpb3IsXG4gIHBzZXVkb0VsZW1lbnQ6IHBhcnNlUHNldWRvRWxlbWVudFxufTtcblxuLyoqXG4gKiBDb252ZXJ0IGRvY3RyaW5lIHRhZ3MgdG8gaHlkcm9seXNpcyB0YWcgZm9ybWF0XG4gKi9cbmZ1bmN0aW9uIF90YWdzVG9IeWRyb1RhZ3ModGFncykge1xuICBpZiAoIXRhZ3MpXG4gICAgcmV0dXJuIG51bGw7XG4gIHJldHVybiB0YWdzLm1hcCggZnVuY3Rpb24odGFnKSB7XG4gICAgaWYgKHRhZy50aXRsZSBpbiBDVVNUT01fVEFHUykge1xuICAgICAgcmV0dXJuIENVU1RPTV9UQUdTW3RhZy50aXRsZV0odGFnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YWc6ICB0YWcudGl0bGUsXG4gICAgICAgIHR5cGU6IHRhZy50eXBlID8gZG9jdHJpbmUudHlwZS5zdHJpbmdpZnkodGFnLnR5cGUpIDogbnVsbCxcbiAgICAgICAgbmFtZTogdGFnLm5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0YWcuZGVzY3JpcHRpb24sXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogcmVtb3ZlcyBsZWFkaW5nICosIGFuZCBhbnkgc3BhY2UgYmVmb3JlIGl0XG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gLS0ganMgZG9jIGRlc2NyaXB0aW9uXG4gKi9cbmZ1bmN0aW9uIF9yZW1vdmVMZWFkaW5nQXN0ZXJpc2tzKGRlc2NyaXB0aW9uKSB7XG4gIGlmICgodHlwZW9mIGRlc2NyaXB0aW9uKSAhPT0gJ3N0cmluZycpXG4gICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xuXG4gIHJldHVybiBkZXNjcmlwdGlvblxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKCBmdW5jdGlvbihsaW5lKSB7XG4gICAgICAvLyByZW1vdmUgbGVhZGluZyAnXFxzKicgZnJvbSBlYWNoIGxpbmVcbiAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL15bXFxzXSpcXCpcXHM/KC4qKSQvKTtcbiAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogbGluZTtcbiAgICB9KVxuICAgIC5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIEpTRG9jIHN0cmluZyAobWludXMgb3BlbmluZy9jbG9zaW5nIGNvbW1lbnQgZGVsaW1pdGVycyksIGV4dHJhY3QgaXRzXG4gKiBkZXNjcmlwdGlvbiBhbmQgdGFncy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG9jc1xuICogQHJldHVybiB7P0pzZG9jQW5ub3RhdGlvbn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VKc2RvYyhkb2NzKSB7XG4gIGRvY3MgPSBfcmVtb3ZlTGVhZGluZ0FzdGVyaXNrcyhkb2NzKTtcbiAgdmFyIGQgPSBkb2N0cmluZS5wYXJzZShkb2NzLCB7XG4gICAgdW53cmFwOiBmYWxzZSxcbiAgICBsaW5lTnVtYmVyOiB0cnVlLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZTogdHJ1ZVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBkZXNjcmlwdGlvbjogZC5kZXNjcmlwdGlvbixcbiAgICB0YWdzOiBfdGFnc1RvSHlkcm9UYWdzKGQudGFncylcbiAgfTtcbn1cblxuLy8gVXRpbGl0eVxuXG4vKipcbiAqIEBwYXJhbSB7SnNkb2NBbm5vdGF0aW9ufSBqc2RvY1xuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc1RhZyhqc2RvYywgdGFnTmFtZSkge1xuICBpZiAoIWpzZG9jIHx8ICFqc2RvYy50YWdzKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBqc2RvYy50YWdzLnNvbWUoZnVuY3Rpb24odGFnKSB7IHJldHVybiB0YWcudGFnID09PSB0YWdOYW1lOyB9KTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgSlNEb2MgdGFnIG1hdGNoaW5nIGBuYW1lYCBhbmQgcmV0dXJucyBpdHMgdmFsdWUgYXQgYGtleWAuXG4gKlxuICogQHBhcmFtIHtKc2RvY0Fubm90YXRpb259IGpzZG9jXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHBhcmFtIHtzdHJpbmc9fSBrZXkgSWYgb21pdHRlZCwgdGhlIGVudGlyZSB0YWcgb2JqZWN0IGlzIHJldHVybmVkLlxuICogQHJldHVybiB7P3N0cmluZ3xPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldFRhZyhqc2RvYywgdGFnTmFtZSwga2V5KSB7XG4gIGlmICghanNkb2MgfHwgIWpzZG9jLnRhZ3MpIHJldHVybiBmYWxzZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc2RvYy50YWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHRhZyA9IGpzZG9jLnRhZ3NbaV07XG4gICAgaWYgKHRhZy50YWcgPT09IHRhZ05hbWUpIHtcbiAgICAgIHJldHVybiBrZXkgPyB0YWdba2V5XSA6IHRhZztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHs/c3RyaW5nfSB0ZXh0XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5mdW5jdGlvbiB1bmluZGVudCh0ZXh0KSB7XG4gIGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XG4gIHZhciBsaW5lcyAgPSB0ZXh0LnJlcGxhY2UoL1xcdC9nLCAnICAnKS5zcGxpdCgnXFxuJyk7XG4gIHZhciBpbmRlbnQgPSBsaW5lcy5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgbGluZSkge1xuICAgIGlmICgvXlxccyokLy50ZXN0KGxpbmUpKSByZXR1cm4gcHJldjsgIC8vIENvbXBsZXRlbHkgaWdub3JlIGJsYW5rIGxpbmVzLlxuXG4gICAgdmFyIGxpbmVJbmRlbnQgPSBsaW5lLm1hdGNoKC9eKFxccyopLylbMF0ubGVuZ3RoO1xuICAgIGlmIChwcmV2ID09PSBudWxsKSByZXR1cm4gbGluZUluZGVudDtcbiAgICByZXR1cm4gbGluZUluZGVudCA8IHByZXYgPyBsaW5lSW5kZW50IDogcHJldjtcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihsKSB7IHJldHVybiBsLnN1YnN0cihpbmRlbnQpOyB9KS5qb2luKCdcXG4nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFRhZzogICAgIGdldFRhZyxcbiAgaGFzVGFnOiAgICAgaGFzVGFnLFxuICBwYXJzZUpzZG9jOiBwYXJzZUpzZG9jLFxuICB1bmluZGVudDogICB1bmluZGVudFxufTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsKXtcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG4ndXNlIHN0cmljdCc7XG5cbi8vIGpzaGludCAtVzA3OVxuLy8gUHJvbWlzZSBwb2x5ZmlsbFxudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZSB8fCByZXF1aXJlKCdlczYtcHJvbWlzZScpLlByb21pc2U7XG4vLyBqc2hpbnQgK1cwNzlcblxuZnVuY3Rpb24gRGVmZXJyZWQoKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgc2VsZi5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICBzZWxmLnJlamVjdCA9IHJlamVjdDtcbiAgfSk7XG59XG5cbi8qKlxuICogQW4gb2JqZWN0IHRoYXQga25vd3MgaG93IHRvIHJlc29sdmUgcmVzb3VyY2VzLlxuICogQHR5cGVkZWYge09iamVjdH0gUmVzb2x2ZXJcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKHN0cmluZywgRGVmZXJyZWQpOiBib29sZWFufSBhY2NlcHQgQXR0ZW1wdCB0byByZXNvbHZlXG4gKiAgICAgYGRlZmVycmVkYCB3aXRoIHRoZSBjb250ZW50cyB0aGUgc3BlY2lmaWVkIFVSTC4gUmV0dXJucyBmYWxzZSBpZiB0aGVcbiAqICAgICBSZXNvbHZlciBpcyB1bmFibGUgdG8gcmVzb2x2ZSB0aGUgVVJMLlxuICovXG5cblxuLyoqXG4gKiBBIEZpbGVMb2FkZXIgbGV0cyB5b3UgcmVzb2x2ZSBVUkxzIHdpdGggYSBzZXQgb2YgcG90ZW50aWFsIHJlc29sdmVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqL1xuZnVuY3Rpb24gRmlsZUxvYWRlcigpIHtcbiAgdGhpcy5yZXNvbHZlcnMgPSBbXTtcbiAgLy8gbWFwIHVybCAtPiBEZWZlcnJlZFxuICB0aGlzLnJlcXVlc3RzID0ge307XG59XG5GaWxlTG9hZGVyLnByb3RvdHlwZSA9IHtcblxuICAvKipcbiAgICogQWRkIGFuIGluc3RhbmNlIG9mIGEgUmVzb2x2ZXIgY2xhc3MgdG8gdGhlIGxpc3Qgb2YgdXJsIHJlc29sdmVyc1xuICAgKlxuICAgKiBPcmRlcmluZyBvZiByZXNvbHZlcnMgaXMgbW9zdCB0byBsZWFzdCByZWNlbnRseSBhZGRlZFxuICAgKiBUaGUgZmlyc3QgcmVzb2x2ZXIgdG8gXCJhY2NlcHRcIiB0aGUgdXJsIHdpbnMuXG4gICAqIEBwYXJhbSB7UmVzb2x2ZXJ9IHJlc29sdmVyIFRoZSByZXNvbHZlciB0byBhZGQuXG4gICAqL1xuICBhZGRSZXNvbHZlcjogZnVuY3Rpb24ocmVzb2x2ZXIpIHtcbiAgICB0aGlzLnJlc29sdmVycy5wdXNoKHJlc29sdmVyKTtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJuIGEgcHJvbWlzZSBmb3IgYW4gYWJzb2x1dGUgdXJsXG4gICAqXG4gICAqIFVybCByZXF1ZXN0cyBhcmUgZGVkdXBsaWNhdGVkIGJ5IHRoZSBsb2FkZXIsIHJldHVybmluZyB0aGUgc2FtZSBQcm9taXNlIGZvclxuICAgKiBpZGVudGljYWwgdXJsc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsICAgICAgICBUaGUgYWJzb2x1dGUgdXJsIHRvIHJlcXVlc3QuXG4gICAqIEByZXR1cm4ge1Byb21pc2UuPHN0cmluZz59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgVVJMLlxuICAgKi9cbiAgcmVxdWVzdDogZnVuY3Rpb24odXJpKSB7XG4gICAgdmFyIHByb21pc2U7XG5cbiAgICBpZiAoISh1cmkgaW4gdGhpcy5yZXF1ZXN0cykpIHtcbiAgICAgIHZhciBoYW5kbGVkID0gZmFsc2U7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcbiAgICAgIHRoaXMucmVxdWVzdHNbdXJpXSA9IGRlZmVycmVkO1xuXG4gICAgICAvLyBsb29wIGJhY2t3YXJkcyB0aHJvdWdoIHJlc29sdmVycyB1bnRpbCBvbmUgXCJhY2NlcHRzXCIgdGhlIHJlcXVlc3RcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnJlc29sdmVycy5sZW5ndGggLSAxLCByOyBpID49IDA7IGktLSkge1xuICAgICAgICByID0gdGhpcy5yZXNvbHZlcnNbaV07XG4gICAgICAgIGlmIChyLmFjY2VwdCh1cmksIGRlZmVycmVkKSkge1xuICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFuZGxlZCkge1xuICAgICAgICBkZWZlcnJlZC5yZWplY3QobmV3IEVycm9yKCdubyByZXNvbHZlciBmb3VuZCBmb3IgJyArIHVyaSkpO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlID0gZGVmZXJyZWQucHJvbWlzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZSA9IHRoaXMucmVxdWVzdHNbdXJpXS5wcm9taXNlO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZpbGVMb2FkZXI7XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW14cFlpOXNiMkZrWlhJdlptbHNaUzFzYjJGa1pYSXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQklpd2labWxzWlNJNkltZGxibVZ5WVhSbFpDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lwY2JpQXFJRUJzYVdObGJuTmxYRzRnS2lCRGIzQjVjbWxuYUhRZ0tHTXBJREl3TVRVZ1ZHaGxJRkJ2YkhsdFpYSWdVSEp2YW1WamRDQkJkWFJvYjNKekxpQkJiR3dnY21sbmFIUnpJSEpsYzJWeWRtVmtMbHh1SUNvZ1ZHaHBjeUJqYjJSbElHMWhlU0J2Ym14NUlHSmxJSFZ6WldRZ2RXNWtaWElnZEdobElFSlRSQ0J6ZEhsc1pTQnNhV05sYm5ObElHWnZkVzVrSUdGMElHaDBkSEE2THk5d2IyeDViV1Z5TG1kcGRHaDFZaTVwYnk5TVNVTkZUbE5GTG5SNGRGeHVJQ29nVkdobElHTnZiWEJzWlhSbElITmxkQ0J2WmlCaGRYUm9iM0p6SUcxaGVTQmlaU0JtYjNWdVpDQmhkQ0JvZEhSd09pOHZjRzlzZVcxbGNpNW5hWFJvZFdJdWFXOHZRVlZVU0U5U1V5NTBlSFJjYmlBcUlGUm9aU0JqYjIxd2JHVjBaU0J6WlhRZ2IyWWdZMjl1ZEhKcFluVjBiM0p6SUcxaGVTQmlaU0JtYjNWdVpDQmhkQ0JvZEhSd09pOHZjRzlzZVcxbGNpNW5hWFJvZFdJdWFXOHZRMDlPVkZKSlFsVlVUMUpUTG5SNGRGeHVJQ29nUTI5a1pTQmthWE4wY21saWRYUmxaQ0JpZVNCSGIyOW5iR1VnWVhNZ2NHRnlkQ0J2WmlCMGFHVWdjRzlzZVcxbGNpQndjbTlxWldOMElHbHpJR0ZzYzI5Y2JpQXFJSE4xWW1wbFkzUWdkRzhnWVc0Z1lXUmthWFJwYjI1aGJDQkpVQ0J5YVdkb2RITWdaM0poYm5RZ1ptOTFibVFnWVhRZ2FIUjBjRG92TDNCdmJIbHRaWEl1WjJsMGFIVmlMbWx2TDFCQlZFVk9WRk11ZEhoMFhHNGdLaTljYmx4dUx5OGdhbk5vYVc1MElHNXZaR1U2ZEhKMVpWeHVKM1Z6WlNCemRISnBZM1FuTzF4dVhHNHZMeUJxYzJocGJuUWdMVmN3TnpsY2JpOHZJRkJ5YjIxcGMyVWdjRzlzZVdacGJHeGNiblpoY2lCUWNtOXRhWE5sSUQwZ1oyeHZZbUZzTGxCeWIyMXBjMlVnZkh3Z2NtVnhkV2x5WlNnblpYTTJMWEJ5YjIxcGMyVW5LUzVRY205dGFYTmxPMXh1THk4Z2FuTm9hVzUwSUN0WE1EYzVYRzVjYm1aMWJtTjBhVzl1SUVSbFptVnljbVZrS0NrZ2UxeHVJQ0IyWVhJZ2MyVnNaaUE5SUhSb2FYTTdYRzRnSUhSb2FYTXVjSEp2YldselpTQTlJRzVsZHlCUWNtOXRhWE5sS0daMWJtTjBhVzl1S0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnZTF4dUlDQWdJSE5sYkdZdWNtVnpiMngyWlNBOUlISmxjMjlzZG1VN1hHNGdJQ0FnYzJWc1ppNXlaV3BsWTNRZ1BTQnlaV3BsWTNRN1hHNGdJSDBwTzF4dWZWeHVYRzR2S2lwY2JpQXFJRUZ1SUc5aWFtVmpkQ0IwYUdGMElHdHViM2R6SUdodmR5QjBieUJ5WlhOdmJIWmxJSEpsYzI5MWNtTmxjeTVjYmlBcUlFQjBlWEJsWkdWbUlIdFBZbXBsWTNSOUlGSmxjMjlzZG1WeVhHNGdLaUJBYldWdFltVnliMllnYUhsa2NtOXNlWE5wYzF4dUlDb2dRSEJ5YjNCbGNuUjVJSHRtZFc1amRHbHZiaWh6ZEhKcGJtY3NJRVJsWm1WeWNtVmtLVG9nWW05dmJHVmhibjBnWVdOalpYQjBJRUYwZEdWdGNIUWdkRzhnY21WemIyeDJaVnh1SUNvZ0lDQWdJR0JrWldabGNuSmxaR0FnZDJsMGFDQjBhR1VnWTI5dWRHVnVkSE1nZEdobElITndaV05wWm1sbFpDQlZVa3d1SUZKbGRIVnlibk1nWm1Gc2MyVWdhV1lnZEdobFhHNGdLaUFnSUNBZ1VtVnpiMngyWlhJZ2FYTWdkVzVoWW14bElIUnZJSEpsYzI5c2RtVWdkR2hsSUZWU1RDNWNiaUFxTDF4dVhHNWNiaThxS2x4dUlDb2dRU0JHYVd4bFRHOWhaR1Z5SUd4bGRITWdlVzkxSUhKbGMyOXNkbVVnVlZKTWN5QjNhWFJvSUdFZ2MyVjBJRzltSUhCdmRHVnVkR2xoYkNCeVpYTnZiSFpsY25NdVhHNGdLaUJBWTI5dWMzUnlkV04wYjNKY2JpQXFJRUJ0WlcxaVpYSnZaaUJvZVdSeWIyeDVjMmx6WEc0Z0tpOWNibVoxYm1OMGFXOXVJRVpwYkdWTWIyRmtaWElvS1NCN1hHNGdJSFJvYVhNdWNtVnpiMngyWlhKeklEMGdXMTA3WEc0Z0lDOHZJRzFoY0NCMWNtd2dMVDRnUkdWbVpYSnlaV1JjYmlBZ2RHaHBjeTV5WlhGMVpYTjBjeUE5SUh0OU8xeHVmVnh1Um1sc1pVeHZZV1JsY2k1d2NtOTBiM1I1Y0dVZ1BTQjdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFRmtaQ0JoYmlCcGJuTjBZVzVqWlNCdlppQmhJRkpsYzI5c2RtVnlJR05zWVhOeklIUnZJSFJvWlNCc2FYTjBJRzltSUhWeWJDQnlaWE52YkhabGNuTmNiaUFnSUNwY2JpQWdJQ29nVDNKa1pYSnBibWNnYjJZZ2NtVnpiMngyWlhKeklHbHpJRzF2YzNRZ2RHOGdiR1ZoYzNRZ2NtVmpaVzUwYkhrZ1lXUmtaV1JjYmlBZ0lDb2dWR2hsSUdacGNuTjBJSEpsYzI5c2RtVnlJSFJ2SUZ3aVlXTmpaWEIwWENJZ2RHaGxJSFZ5YkNCM2FXNXpMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UxSmxjMjlzZG1WeWZTQnlaWE52YkhabGNpQlVhR1VnY21WemIyeDJaWElnZEc4Z1lXUmtMbHh1SUNBZ0tpOWNiaUFnWVdSa1VtVnpiMngyWlhJNklHWjFibU4wYVc5dUtISmxjMjlzZG1WeUtTQjdYRzRnSUNBZ2RHaHBjeTV5WlhOdmJIWmxjbk11Y0hWemFDaHlaWE52YkhabGNpazdYRzRnSUgwc1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUZKbGRIVnliaUJoSUhCeWIyMXBjMlVnWm05eUlHRnVJR0ZpYzI5c2RYUmxJSFZ5YkZ4dUlDQWdLbHh1SUNBZ0tpQlZjbXdnY21WeGRXVnpkSE1nWVhKbElHUmxaSFZ3YkdsallYUmxaQ0JpZVNCMGFHVWdiRzloWkdWeUxDQnlaWFIxY201cGJtY2dkR2hsSUhOaGJXVWdVSEp2YldselpTQm1iM0pjYmlBZ0lDb2dhV1JsYm5ScFkyRnNJSFZ5YkhOY2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlIVnliQ0FnSUNBZ0lDQWdWR2hsSUdGaWMyOXNkWFJsSUhWeWJDQjBieUJ5WlhGMVpYTjBMbHh1SUNBZ0tpQkFjbVYwZFhKdUlIdFFjbTl0YVhObExqeHpkSEpwYm1jK2ZTQkJJSEJ5YjIxcGMyVWdkR2hoZENCeVpYTnZiSFpsY3lCMGJ5QjBhR1VnWTI5dWRHVnVkSE1nYjJZZ2RHaGxJRlZTVEM1Y2JpQWdJQ292WEc0Z0lISmxjWFZsYzNRNklHWjFibU4wYVc5dUtIVnlhU2tnZTF4dUlDQWdJSFpoY2lCd2NtOXRhWE5sTzF4dVhHNGdJQ0FnYVdZZ0tDRW9kWEpwSUdsdUlIUm9hWE11Y21WeGRXVnpkSE1wS1NCN1hHNGdJQ0FnSUNCMllYSWdhR0Z1Wkd4bFpDQTlJR1poYkhObE8xeHVJQ0FnSUNBZ2RtRnlJR1JsWm1WeWNtVmtJRDBnYm1WM0lFUmxabVZ5Y21Wa0tDazdYRzRnSUNBZ0lDQjBhR2x6TG5KbGNYVmxjM1J6VzNWeWFWMGdQU0JrWldabGNuSmxaRHRjYmx4dUlDQWdJQ0FnTHk4Z2JHOXZjQ0JpWVdOcmQyRnlaSE1nZEdoeWIzVm5hQ0J5WlhOdmJIWmxjbk1nZFc1MGFXd2diMjVsSUZ3aVlXTmpaWEIwYzF3aUlIUm9aU0J5WlhGMVpYTjBYRzRnSUNBZ0lDQm1iM0lnS0haaGNpQnBJRDBnZEdocGN5NXlaWE52YkhabGNuTXViR1Z1WjNSb0lDMGdNU3dnY2pzZ2FTQStQU0F3T3lCcExTMHBJSHRjYmlBZ0lDQWdJQ0FnY2lBOUlIUm9hWE11Y21WemIyeDJaWEp6VzJsZE8xeHVJQ0FnSUNBZ0lDQnBaaUFvY2k1aFkyTmxjSFFvZFhKcExDQmtaV1psY25KbFpDa3BJSHRjYmlBZ0lDQWdJQ0FnSUNCb1lXNWtiR1ZrSUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCcFppQW9JV2hoYm1Sc1pXUXBJSHRjYmlBZ0lDQWdJQ0FnWkdWbVpYSnlaV1F1Y21WcVpXTjBLRzVsZHlCRmNuSnZjaWduYm04Z2NtVnpiMngyWlhJZ1ptOTFibVFnWm05eUlDY2dLeUIxY21rcEtUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdjSEp2YldselpTQTlJR1JsWm1WeWNtVmtMbkJ5YjIxcGMyVTdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhCeWIyMXBjMlVnUFNCMGFHbHpMbkpsY1hWbGMzUnpXM1Z5YVYwdWNISnZiV2x6WlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjSEp2YldselpUdGNiaUFnZlZ4dWZUdGNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JHYVd4bFRHOWhaR1Z5TzF4dUlsMTkiLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4gKi9cblxuLy8ganNoaW50IG5vZGU6dHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgcGF0aElzQWJzb2x1dGUgPSByZXF1aXJlKCdwYXRoLWlzLWFic29sdXRlJyk7XG52YXIgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5cbmZ1bmN0aW9uIGdldEZpbGUoZmlsZVBhdGgsIGRlZmVycmVkLCBzZWNvbmRQYXRoKSB7XG4gIGZzLnJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnLCBmdW5jdGlvbihlcnIsIGNvbnRlbnQpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBpZiAoc2Vjb25kUGF0aCkge1xuICAgICAgICBnZXRGaWxlKHNlY29uZFBhdGgsIGRlZmVycmVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRVJST1IgZmluZGluZyBcIiArIGZpbGVQYXRoKTtcbiAgICAgICAgZGVmZXJyZWQucmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmVycmVkLnJlc29sdmUoY29udGVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHBhdGhhYCBpcyBhIHNpYmxpbmcgb3IgYXVudCBvZiBgcGF0aGJgLlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTaWJsaW5nT3JBdW50KHBhdGhhLCBwYXRoYikge1xuICB2YXIgcGFyZW50ID0gcGF0aC5kaXJuYW1lKHBhdGhhKTtcbiAgaWYgKHBhdGhiLmluZGV4T2YocGF0aGEpID09PSAtMSAmJiBwYXRoYi5pbmRleE9mKHBhcmVudCkgPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hhbmdlIGBsb2NhbFBhdGhgIGZyb20gYSBzaWJsaW5nIG9mIGBiYXNlUGF0aGAgdG8gYmUgYSBjaGlsZCBvZlxuICogYGJhc2VQYXRoYCBqb2luZWQgd2l0aCBgcmVkaXJlY3RgLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiByZWRpcmVjdFNpYmxpbmcoYmFzZVBhdGgsIGxvY2FsUGF0aCwgcmVkaXJlY3QpIHtcbiAgdmFyIHBhcmVudCA9IHBhdGguZGlybmFtZShiYXNlUGF0aCk7XG4gIHZhciByZWRpcmVjdGVkID0gcGF0aC5qb2luKGJhc2VQYXRoLCByZWRpcmVjdCwgbG9jYWxQYXRoLnNsaWNlKHBhcmVudC5sZW5ndGgpKTtcbiAgcmV0dXJuIHJlZGlyZWN0ZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgcmVxdWVzdHMgdmlhIHRoZSBmaWxlIHN5c3RlbS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcuaG9zdCBIb3N0bmFtZSB0byBtYXRjaCBmb3IgYWJzb2x1dGUgdXJscy5cbiAqICAgICBNYXRjaGVzIFwiL1wiIGJ5IGRlZmF1bHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcuYmFzZVBhdGggUHJlZml4IGRpcmVjdG9yeSBmb3IgY29tcG9uZW50cyBpbiB1cmwuXG4gKiAgICAgRGVmYXVsdHMgdG8gXCIvXCIuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnJvb3QgRmlsZXN5c3RlbSByb290IHRvIHNlYXJjaC4gRGVmYXVsdHMgdG8gdGhlXG4gKiAgICAgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcucmVkaXJlY3QgV2hlcmUgdG8gcmVkaXJlY3QgbG9va3VwcyB0byBzaWJsaW5ncy5cbiAqL1xuZnVuY3Rpb24gRlNSZXNvbHZlcihjb25maWcpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWcgfHwge307XG59XG5GU1Jlc29sdmVyLnByb3RvdHlwZSA9IHtcbiAgYWNjZXB0OiBmdW5jdGlvbih1cmksIGRlZmVycmVkKSB7XG4gICAgdmFyIHBhcnNlZCA9IHVybC5wYXJzZSh1cmkpO1xuICAgIHZhciBob3N0ID0gdGhpcy5jb25maWcuaG9zdDtcbiAgICB2YXIgYmFzZSA9IHRoaXMuY29uZmlnLmJhc2VQYXRoICYmIGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLmNvbmZpZy5iYXNlUGF0aCk7XG4gICAgdmFyIHJvb3QgPSB0aGlzLmNvbmZpZy5yb290ICYmIHBhdGgubm9ybWFsaXplKHRoaXMuY29uZmlnLnJvb3QpO1xuICAgIHZhciByZWRpcmVjdCA9IHRoaXMuY29uZmlnLnJlZGlyZWN0O1xuXG4gICAgdmFyIGxvY2FsO1xuXG4gICAgaWYgKCFwYXJzZWQuaG9zdG5hbWUgfHwgcGFyc2VkLmhvc3RuYW1lID09PSBob3N0KSB7XG4gICAgICBsb2NhbCA9IHBhcnNlZC5wYXRobmFtZTtcbiAgICB9XG4gICAgaWYgKGxvY2FsKSB7XG4gICAgICAvLyB1bi1lc2NhcGUgSFRNTCBlc2NhcGVzXG4gICAgICBsb2NhbCA9IGRlY29kZVVSSUNvbXBvbmVudChsb2NhbCk7XG5cbiAgICAgIGlmIChiYXNlKSB7XG4gICAgICAgIGxvY2FsID0gcGF0aC5yZWxhdGl2ZShiYXNlLCBsb2NhbCk7XG4gICAgICB9XG4gICAgICBpZiAocm9vdCkge1xuICAgICAgICBsb2NhbCA9IHBhdGguam9pbihyb290LCBsb2NhbCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBiYWNrdXA7XG4gICAgICBpZiAocmVkaXJlY3QgJiYgaXNTaWJsaW5nT3JBdW50KHJvb3QsIGxvY2FsKSkge1xuICAgICAgICBiYWNrdXAgPSByZWRpcmVjdFNpYmxpbmcocm9vdCwgbG9jYWwsIHJlZGlyZWN0KTtcbiAgICAgIH1cblxuICAgICAgZ2V0RmlsZShsb2NhbCwgZGVmZXJyZWQsIGJhY2t1cCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRlNSZXNvbHZlcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQSByZXNvbHZlciB0aGF0IHJlc29sdmVzIHRvIG51bGwgYW55IHVyaSBtYXRjaGluZyBjb25maWcuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBtZW1iZXJvZiBoeWRyb2x5c2lzXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnIFRoZSB1cmwgdG8gYGFjY2VwdGAuXG4gKi9cbmZ1bmN0aW9uIE5vb3BSZXNvbHZlcihjb25maWcpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG59XG5cbk5vb3BSZXNvbHZlci5wcm90b3R5cGUgPSB7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAgICB1cmkgICAgICBUaGUgYWJzb2x1dGUgVVJJIGJlaW5nIHJlcXVlc3RlZC5cbiAgICogQHBhcmFtIHshRGVmZXJyZWR9IGRlZmVycmVkIFRoZSBkZWZlcnJlZCBwcm9taXNlIHRoYXQgc2hvdWxkIGJlIHJlc29sdmVkIGlmXG4gICAqICAgICB0aGlzIHJlc29sdmVyIGhhbmRsZXMgdGhlIFVSSS5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgVVJJIGlzIGhhbmRsZWQgYnkgdGhpcyByZXNvbHZlci5cbiAgICovXG4gIGFjY2VwdDogZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICAgIGlmICghdGhpcy5jb25maWcudGVzdCkge1xuICAgICAgaWYgKHVyaS5zZWFyY2godGhpcy5jb25maWcpID09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLmNvbmZpZy50ZXN0KHVyaSkpIHJldHVybiBmYWxzZTtcblxuICAgIGRlZmVycmVkLnJlc29sdmUoJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5vb3BSZXNvbHZlcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG4ndXNlIHN0cmljdCc7XG5cbnZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciB1cmwgPSByZXF1aXJlKCd1cmwnKTtcblxudmFyIEZTUmVzb2x2ZXIgPSByZXF1aXJlKCcuL2ZzLXJlc29sdmVyJyk7XG5cbi8qKlxuICogQSBzaW5nbGUgcmVkaXJlY3QgY29uZmlndXJhdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAgICAgICAgICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnByb3RvY29sICAgICBUaGUgcHJvdG9jb2wgdGhpcyByZWRpcmVjdCBtYXRjaGVzLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5ob3N0bmFtZSAgICAgVGhlIGhvc3QgbmFtZSB0aGlzIHJlZGlyZWN0IG1hdGNoZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnBhdGggICAgICAgICBUaGUgcGFydCBvZiB0aGUgcGF0aCB0byBtYXRjaCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2Ugd2l0aCAncmVkaXJlY3RQYXRoJ1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5yZWRpcmVjdFBhdGggVGhlIGxvY2FsIGZpbGVzeXN0ZW0gcGF0aCB0aGF0IHNob3VsZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZSBcInByb3RvY29sOi8vaG9zbmFtZS9wYXRoL1wiXG4gKi9cbmZ1bmN0aW9uIFByb3RvY29sUmVkaXJlY3QoY29uZmlnKXtcbiAgdGhpcy5wcm90b2NvbCA9IGNvbmZpZy5wcm90b2NvbDtcbiAgdGhpcy5ob3N0bmFtZSA9IGNvbmZpZy5ob3N0bmFtZTtcbiAgdGhpcy5wYXRoID0gY29uZmlnLnBhdGg7XG4gIHRoaXMucmVkaXJlY3RQYXRoID0gY29uZmlnLnJlZGlyZWN0UGF0aDtcbn1cblxuUHJvdG9jb2xSZWRpcmVjdC5wcm90b3R5cGUgPSB7XG4gIC8qKlxuICAgKiBUaGUgcHJvdG9jb2wgdGhpcyByZWRpcmVjdCBtYXRjaGVzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgcHJvdG9jb2w6IG51bGwsXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBuYW1lIHRoaXMgcmVkaXJlY3QgbWF0Y2hlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG4gIGhvc3RuYW1lOiBudWxsLFxuXG4gIC8qKlxuICAgKiBUaGUgcGFydCBvZiB0aGUgcGF0aCB0byBtYXRjaCBhbmQgcmVwbGFjZSB3aXRoICdyZWRpcmVjdFBhdGgnXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBwYXRoOiBudWxsLFxuXG4gIC8qKlxuICAgKiBUaGUgbG9jYWwgZmlsZXN5c3RlbSBwYXRoIHRoYXQgc2hvdWxkIHJlcGxhY2UgXCJwcm90b2NvbDovL2hvc25hbWUvcGF0aC9cIlxuICAgKiBAdHlwZSB7W3R5cGVdfVxuICAgKi9cbiAgcmVkaXJlY3RQYXRoOiBudWxsLFxuXG4gIHJlZGlyZWN0OiBmdW5jdGlvbiByZWRpcmVjdCh1cmkpIHtcbiAgICB2YXIgcGFyc2VkID0gdXJsLnBhcnNlKHVyaSk7XG4gICAgaWYgKHRoaXMucHJvdG9jb2wgIT09IHBhcnNlZC5wcm90b2NvbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lICE9PSBwYXJzZWQuaG9zdG5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkLnBhdGhuYW1lLmluZGV4T2YodGhpcy5wYXRoKSAhPT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5yZWRpcmVjdFBhdGgsXG4gICAgICBwYXJzZWQucGF0aG5hbWUuc2xpY2UodGhpcy5wYXRoLmxlbmd0aCkpO1xuICB9XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHByb3RvY29sOi8vaG9zdG5hbWUvcGF0aCB0byB0aGUgbG9jYWwgZmlsZXN5c3RlbS5cbiAqIEBjb25zdHJ1Y3RvclxuICogQG1lbWJlcm9mIGh5ZHJvbHlzaXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWcucm9vdCBGaWxlc3lzdGVtIHJvb3QgdG8gc2VhcmNoLiBEZWZhdWx0cyB0byB0aGVcbiAqICAgICBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICogQHBhcmFtIHtBcnJheS48UHJvdG9jb2xSZWRpcmVjdD59IHJlZGlyZWN0cyBBIGxpc3Qgb2YgcHJvdG9jb2wgcmVkaXJlY3RzXG4gKiAgICAgZm9yIHRoZSByZXNvbHZlci4gVGhleSBhcmUgY2hlY2tlZCBmb3IgbWF0Y2hpbmcgZmlyc3QtdG8tbGFzdC5cbiAqL1xuZnVuY3Rpb24gUmVkaXJlY3RSZXNvbHZlcihjb25maWcpIHtcbiAgRlNSZXNvbHZlci5jYWxsKHRoaXMsIGNvbmZpZyk7XG4gIHRoaXMucmVkaXJlY3RzID0gY29uZmlnLnJlZGlyZWN0cyB8fCBbXTtcbn1cblxuUmVkaXJlY3RSZXNvbHZlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEZTUmVzb2x2ZXIucHJvdG90eXBlKTtcblxuUmVkaXJlY3RSZXNvbHZlci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmVkaXJlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHJlZGlyZWN0ZWQgPSB0aGlzLnJlZGlyZWN0c1tpXS5yZWRpcmVjdCh1cmkpO1xuICAgIGlmIChyZWRpcmVjdGVkKSB7XG4gICAgICByZXR1cm4gRlNSZXNvbHZlci5wcm90b3R5cGUuYWNjZXB0LmNhbGwodGhpcywgcmVkaXJlY3RlZCwgZGVmZXJyZWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5SZWRpcmVjdFJlc29sdmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlZGlyZWN0UmVzb2x2ZXI7XG5SZWRpcmVjdFJlc29sdmVyLlByb3RvY29sUmVkaXJlY3QgPSBQcm90b2NvbFJlZGlyZWN0O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RSZXNvbHZlcjtcbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTp0cnVlXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGdldEZpbGUodXJsLCBkZWZlcnJlZCwgY29uZmlnKSB7XG4gIC8qIGdsb2JhbCBYTUxIdHRwUmVxdWVzdDpmYWxzZSAqL1xuICB2YXIgeCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICB4Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGF0dXMgPSB4LnN0YXR1cyB8fCAwO1xuICAgIGlmIChzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCkge1xuICAgICAgZGVmZXJyZWQucmVzb2x2ZSh4LnJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmZXJyZWQucmVqZWN0KCd4aHIgc3RhdHVzOiAnICsgc3RhdHVzKTtcbiAgICB9XG4gIH07XG4gIHgub25lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICBkZWZlcnJlZC5yZWplY3QoZSk7XG4gIH07XG4gIHgub3BlbignR0VUJywgdXJsLCB0cnVlKTtcbiAgaWYgKGNvbmZpZyAmJiBjb25maWcucmVzcG9uc2VUeXBlKSB7XG4gICAgeC5yZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICB9XG4gIHguc2VuZCgpO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhIHJlc29sdmVyIHRoYXQgcmVxdWVzdHMgcmVzb3VyY2VzIG92ZXIgWEhSLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAbWVtYmVyb2YgaHlkcm9seXNpc1xuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBhcmd1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlnLnJlc3BvbnNlVHlwZSBUeXBlIG9mIG9iamVjdCB0byBiZSByZXR1cm5lZCBieSB0aGVcbiAqICAgICBYSFIuIERlZmF1bHRzIHRvICd0ZXh0JywgYWNjZXB0cyAnZG9jdW1lbnQnLCAnYXJyYXlidWZmZXInLCBhbmQgJ2pzb24nLlxuICovXG5mdW5jdGlvbiBYSFJSZXNvbHZlcihjb25maWcpIHtcbiAgdGhpcy5jb25maWcgPSBjb25maWc7XG59XG5YSFJSZXNvbHZlci5wcm90b3R5cGUgPSB7XG4gIGFjY2VwdDogZnVuY3Rpb24odXJpLCBkZWZlcnJlZCkge1xuICAgIGdldEZpbGUodXJpLCBkZWZlcnJlZCwgdGhpcy5jb25maWcpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFhIUlJlc29sdmVyO1xuIixudWxsLCIvLyBodHRwOi8vd2lraS5jb21tb25qcy5vcmcvd2lraS9Vbml0X1Rlc3RpbmcvMS4wXG4vL1xuLy8gVEhJUyBJUyBOT1QgVEVTVEVEIE5PUiBMSUtFTFkgVE8gV09SSyBPVVRTSURFIFY4IVxuLy9cbi8vIE9yaWdpbmFsbHkgZnJvbSBuYXJ3aGFsLmpzIChodHRwOi8vbmFyd2hhbGpzLm9yZylcbi8vIENvcHlyaWdodCAoYykgMjAwOSBUaG9tYXMgUm9iaW5zb24gPDI4MG5vcnRoLmNvbT5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAnU29mdHdhcmUnKSwgdG9cbi8vIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOXG4vLyBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OXG4vLyBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gd2hlbiB1c2VkIGluIG5vZGUsIHRoaXMgd2lsbCBhY3R1YWxseSBsb2FkIHRoZSB1dGlsIG1vZHVsZSB3ZSBkZXBlbmQgb25cbi8vIHZlcnN1cyBsb2FkaW5nIHRoZSBidWlsdGluIHV0aWwgbW9kdWxlIGFzIGhhcHBlbnMgb3RoZXJ3aXNlXG4vLyB0aGlzIGlzIGEgYnVnIGluIG5vZGUgbW9kdWxlIGxvYWRpbmcgYXMgZmFyIGFzIEkgYW0gY29uY2VybmVkXG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwvJyk7XG5cbnZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLy8gMS4gVGhlIGFzc2VydCBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIHRoYXQgdGhyb3dcbi8vIEFzc2VydGlvbkVycm9yJ3Mgd2hlbiBwYXJ0aWN1bGFyIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQuIFRoZVxuLy8gYXNzZXJ0IG1vZHVsZSBtdXN0IGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBpbnRlcmZhY2UuXG5cbnZhciBhc3NlcnQgPSBtb2R1bGUuZXhwb3J0cyA9IG9rO1xuXG4vLyAyLiBUaGUgQXNzZXJ0aW9uRXJyb3IgaXMgZGVmaW5lZCBpbiBhc3NlcnQuXG4vLyBuZXcgYXNzZXJ0LkFzc2VydGlvbkVycm9yKHsgbWVzc2FnZTogbWVzc2FnZSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWw6IGFjdHVhbCxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWQgfSlcblxuYXNzZXJ0LkFzc2VydGlvbkVycm9yID0gZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3Iob3B0aW9ucykge1xuICB0aGlzLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InO1xuICB0aGlzLmFjdHVhbCA9IG9wdGlvbnMuYWN0dWFsO1xuICB0aGlzLmV4cGVjdGVkID0gb3B0aW9ucy5leHBlY3RlZDtcbiAgdGhpcy5vcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3I7XG4gIGlmIChvcHRpb25zLm1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2U7XG4gICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5tZXNzYWdlID0gZ2V0TWVzc2FnZSh0aGlzKTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSB0cnVlO1xuICB9XG4gIHZhciBzdGFja1N0YXJ0RnVuY3Rpb24gPSBvcHRpb25zLnN0YWNrU3RhcnRGdW5jdGlvbiB8fCBmYWlsO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gc3RhY2tTdGFydEZ1bmN0aW9uLm5hbWU7XG4gICAgICB2YXIgaWR4ID0gb3V0LmluZGV4T2YoJ1xcbicgKyBmbl9uYW1lKTtcbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAvLyBvbmNlIHdlIGhhdmUgbG9jYXRlZCB0aGUgZnVuY3Rpb24gZnJhbWVcbiAgICAgICAgLy8gd2UgbmVlZCB0byBzdHJpcCBvdXQgZXZlcnl0aGluZyBiZWZvcmUgaXQgKGFuZCBpdHMgbGluZSlcbiAgICAgICAgdmFyIG5leHRfbGluZSA9IG91dC5pbmRleE9mKCdcXG4nLCBpZHggKyAxKTtcbiAgICAgICAgb3V0ID0gb3V0LnN1YnN0cmluZyhuZXh0X2xpbmUgKyAxKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFjayA9IG91dDtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGFzc2VydC5Bc3NlcnRpb25FcnJvciBpbnN0YW5jZW9mIEVycm9yXG51dGlsLmluaGVyaXRzKGFzc2VydC5Bc3NlcnRpb25FcnJvciwgRXJyb3IpO1xuXG5mdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gIGlmICh1dGlsLmlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiAnJyArIHZhbHVlO1xuICB9XG4gIGlmICh1dGlsLmlzTnVtYmVyKHZhbHVlKSAmJiAhaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHV0aWwuaXNGdW5jdGlvbih2YWx1ZSkgfHwgdXRpbC5pc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHRydW5jYXRlKHMsIG4pIHtcbiAgaWYgKHV0aWwuaXNTdHJpbmcocykpIHtcbiAgICByZXR1cm4gcy5sZW5ndGggPCBuID8gcyA6IHMuc2xpY2UoMCwgbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZShzZWxmKSB7XG4gIHJldHVybiB0cnVuY2F0ZShKU09OLnN0cmluZ2lmeShzZWxmLmFjdHVhbCwgcmVwbGFjZXIpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoc2VsZi5leHBlY3RlZCwgcmVwbGFjZXIpLCAxMjgpO1xufVxuXG4vLyBBdCBwcmVzZW50IG9ubHkgdGhlIHRocmVlIGtleXMgbWVudGlvbmVkIGFib3ZlIGFyZSB1c2VkIGFuZFxuLy8gdW5kZXJzdG9vZCBieSB0aGUgc3BlYy4gSW1wbGVtZW50YXRpb25zIG9yIHN1YiBtb2R1bGVzIGNhbiBwYXNzXG4vLyBvdGhlciBrZXlzIHRvIHRoZSBBc3NlcnRpb25FcnJvcidzIGNvbnN0cnVjdG9yIC0gdGhleSB3aWxsIGJlXG4vLyBpZ25vcmVkLlxuXG4vLyAzLiBBbGwgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbXVzdCB0aHJvdyBhbiBBc3NlcnRpb25FcnJvclxuLy8gd2hlbiBhIGNvcnJlc3BvbmRpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQsIHdpdGggYSBtZXNzYWdlIHRoYXRcbi8vIG1heSBiZSB1bmRlZmluZWQgaWYgbm90IHByb3ZpZGVkLiAgQWxsIGFzc2VydGlvbiBtZXRob2RzIHByb3ZpZGVcbi8vIGJvdGggdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgdmFsdWVzIHRvIHRoZSBhc3NlcnRpb24gZXJyb3IgZm9yXG4vLyBkaXNwbGF5IHB1cnBvc2VzLlxuXG5mdW5jdGlvbiBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yLCBzdGFja1N0YXJ0RnVuY3Rpb24pIHtcbiAgdGhyb3cgbmV3IGFzc2VydC5Bc3NlcnRpb25FcnJvcih7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBhY3R1YWw6IGFjdHVhbCxcbiAgICBleHBlY3RlZDogZXhwZWN0ZWQsXG4gICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgIHN0YWNrU3RhcnRGdW5jdGlvbjogc3RhY2tTdGFydEZ1bmN0aW9uXG4gIH0pO1xufVxuXG4vLyBFWFRFTlNJT04hIGFsbG93cyBmb3Igd2VsbCBiZWhhdmVkIGVycm9ycyBkZWZpbmVkIGVsc2V3aGVyZS5cbmFzc2VydC5mYWlsID0gZmFpbDtcblxuLy8gNC4gUHVyZSBhc3NlcnRpb24gdGVzdHMgd2hldGhlciBhIHZhbHVlIGlzIHRydXRoeSwgYXMgZGV0ZXJtaW5lZFxuLy8gYnkgISFndWFyZC5cbi8vIGFzc2VydC5vayhndWFyZCwgbWVzc2FnZV9vcHQpO1xuLy8gVGhpcyBzdGF0ZW1lbnQgaXMgZXF1aXZhbGVudCB0byBhc3NlcnQuZXF1YWwodHJ1ZSwgISFndWFyZCxcbi8vIG1lc3NhZ2Vfb3B0KTsuIFRvIHRlc3Qgc3RyaWN0bHkgZm9yIHRoZSB2YWx1ZSB0cnVlLCB1c2Vcbi8vIGFzc2VydC5zdHJpY3RFcXVhbCh0cnVlLCBndWFyZCwgbWVzc2FnZV9vcHQpOy5cblxuZnVuY3Rpb24gb2sodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09JywgYXNzZXJ0Lm9rKTtcbn1cbmFzc2VydC5vayA9IG9rO1xuXG4vLyA1LiBUaGUgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHNoYWxsb3csIGNvZXJjaXZlIGVxdWFsaXR5IHdpdGhcbi8vID09LlxuLy8gYXNzZXJ0LmVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmVxdWFsID0gZnVuY3Rpb24gZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5lcXVhbCk7XG59O1xuXG4vLyA2LiBUaGUgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igd2hldGhlciB0d28gb2JqZWN0cyBhcmUgbm90IGVxdWFsXG4vLyB3aXRoICE9IGFzc2VydC5ub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RFcXVhbCA9IGZ1bmN0aW9uIG5vdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9JywgYXNzZXJ0Lm5vdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gNy4gVGhlIGVxdWl2YWxlbmNlIGFzc2VydGlvbiB0ZXN0cyBhIGRlZXAgZXF1YWxpdHkgcmVsYXRpb24uXG4vLyBhc3NlcnQuZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0LmRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmICghX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBFcXVhbCcsIGFzc2VydC5kZWVwRXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGFjdHVhbCkgJiYgdXRpbC5pc0J1ZmZlcihleHBlY3RlZCkpIHtcbiAgICBpZiAoYWN0dWFsLmxlbmd0aCAhPSBleHBlY3RlZC5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYWN0dWFsW2ldICE9PSBleHBlY3RlZFtpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIC8vIDcuMi4gSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgRGF0ZSBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgRGF0ZSBvYmplY3QgdGhhdCByZWZlcnMgdG8gdGhlIHNhbWUgdGltZS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzRGF0ZShhY3R1YWwpICYmIHV0aWwuaXNEYXRlKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zIElmIHRoZSBleHBlY3RlZCB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIHRoZSBhY3R1YWwgdmFsdWUgaXNcbiAgLy8gZXF1aXZhbGVudCBpZiBpdCBpcyBhbHNvIGEgUmVnRXhwIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNvdXJjZSBhbmRcbiAgLy8gcHJvcGVydGllcyAoYGdsb2JhbGAsIGBtdWx0aWxpbmVgLCBgbGFzdEluZGV4YCwgYGlnbm9yZUNhc2VgKS5cbiAgfSBlbHNlIGlmICh1dGlsLmlzUmVnRXhwKGFjdHVhbCkgJiYgdXRpbC5pc1JlZ0V4cChleHBlY3RlZCkpIHtcbiAgICByZXR1cm4gYWN0dWFsLnNvdXJjZSA9PT0gZXhwZWN0ZWQuc291cmNlICYmXG4gICAgICAgICAgIGFjdHVhbC5nbG9iYWwgPT09IGV4cGVjdGVkLmdsb2JhbCAmJlxuICAgICAgICAgICBhY3R1YWwubXVsdGlsaW5lID09PSBleHBlY3RlZC5tdWx0aWxpbmUgJiZcbiAgICAgICAgICAgYWN0dWFsLmxhc3RJbmRleCA9PT0gZXhwZWN0ZWQubGFzdEluZGV4ICYmXG4gICAgICAgICAgIGFjdHVhbC5pZ25vcmVDYXNlID09PSBleHBlY3RlZC5pZ25vcmVDYXNlO1xuXG4gIC8vIDcuNC4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgfSBlbHNlIGlmICghdXRpbC5pc09iamVjdChhY3R1YWwpICYmICF1dGlsLmlzT2JqZWN0KGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gNy41IEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYikge1xuICBpZiAodXRpbC5pc051bGxPclVuZGVmaW5lZChhKSB8fCB1dGlsLmlzTnVsbE9yVW5kZWZpbmVkKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIC8vIGlmIG9uZSBpcyBhIHByaW1pdGl2ZSwgdGhlIG90aGVyIG11c3QgYmUgc2FtZVxuICBpZiAodXRpbC5pc1ByaW1pdGl2ZShhKSB8fCB1dGlsLmlzUHJpbWl0aXZlKGIpKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH1cbiAgdmFyIGFJc0FyZ3MgPSBpc0FyZ3VtZW50cyhhKSxcbiAgICAgIGJJc0FyZ3MgPSBpc0FyZ3VtZW50cyhiKTtcbiAgaWYgKChhSXNBcmdzICYmICFiSXNBcmdzKSB8fCAoIWFJc0FyZ3MgJiYgYklzQXJncykpXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAoYUlzQXJncykge1xuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIF9kZWVwRXF1YWwoYSwgYik7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKSxcbiAgICAgIGtiID0gb2JqZWN0S2V5cyhiKSxcbiAgICAgIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghX2RlZXBFcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnbm90RGVlcEVxdWFsJywgYXNzZXJ0Lm5vdERlZXBFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDkuIFRoZSBzdHJpY3QgZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIHN0cmljdCBlcXVhbGl0eSwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQuc3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBzdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT09JywgYXNzZXJ0LnN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuLy8gMTAuIFRoZSBzdHJpY3Qgbm9uLWVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBmb3Igc3RyaWN0IGluZXF1YWxpdHksIGFzXG4vLyBkZXRlcm1pbmVkIGJ5ICE9PS4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5ub3RTdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIG5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPT0nLCBhc3NlcnQubm90U3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSB7XG4gIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZXhwZWN0ZWQpID09ICdbb2JqZWN0IFJlZ0V4cF0nKSB7XG4gICAgcmV0dXJuIGV4cGVjdGVkLnRlc3QoYWN0dWFsKTtcbiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gX3Rocm93cyhzaG91bGRUaHJvdywgYmxvY2ssIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIHZhciBhY3R1YWw7XG5cbiAgaWYgKHV0aWwuaXNTdHJpbmcoZXhwZWN0ZWQpKSB7XG4gICAgbWVzc2FnZSA9IGV4cGVjdGVkO1xuICAgIGV4cGVjdGVkID0gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGFjdHVhbCA9IGU7XG4gIH1cblxuICBtZXNzYWdlID0gKGV4cGVjdGVkICYmIGV4cGVjdGVkLm5hbWUgPyAnICgnICsgZXhwZWN0ZWQubmFtZSArICcpLicgOiAnLicpICtcbiAgICAgICAgICAgIChtZXNzYWdlID8gJyAnICsgbWVzc2FnZSA6ICcuJyk7XG5cbiAgaWYgKHNob3VsZFRocm93ICYmICFhY3R1YWwpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTtcbiAgfVxuXG4gIGlmICghc2hvdWxkVGhyb3cgJiYgZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdHb3QgdW53YW50ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgaWYgKChzaG91bGRUaHJvdyAmJiBhY3R1YWwgJiYgZXhwZWN0ZWQgJiZcbiAgICAgICFleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHwgKCFzaG91bGRUaHJvdyAmJiBhY3R1YWwpKSB7XG4gICAgdGhyb3cgYWN0dWFsO1xuICB9XG59XG5cbi8vIDExLiBFeHBlY3RlZCB0byB0aHJvdyBhbiBlcnJvcjpcbi8vIGFzc2VydC50aHJvd3MoYmxvY2ssIEVycm9yX29wdCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQudGhyb3dzID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MuYXBwbHkodGhpcywgW3RydWVdLmNvbmNhdChwU2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG59O1xuXG4vLyBFWFRFTlNJT04hIFRoaXMgaXMgYW5ub3lpbmcgdG8gd3JpdGUgb3V0c2lkZSB0aGlzIG1vZHVsZS5cbmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovbWVzc2FnZSkge1xuICBfdGhyb3dzLmFwcGx5KHRoaXMsIFtmYWxzZV0uY29uY2F0KHBTbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcbn07XG5cbmFzc2VydC5pZkVycm9yID0gZnVuY3Rpb24oZXJyKSB7IGlmIChlcnIpIHt0aHJvdyBlcnI7fX07XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKGhhc093bi5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59O1xuIiwiaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8vIHJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCBhcnJheSB3aXRoIGRpcmVjdG9yeSBuYW1lcyB0aGVyZVxuLy8gbXVzdCBiZSBubyBzbGFzaGVzLCBlbXB0eSBlbGVtZW50cywgb3IgZGV2aWNlIG5hbWVzIChjOlxcKSBpbiB0aGUgYXJyYXlcbi8vIChzbyBhbHNvIG5vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgLSBpdCBkb2VzIG5vdCBkaXN0aW5ndWlzaFxuLy8gcmVsYXRpdmUgYW5kIGFic29sdXRlIHBhdGhzKVxuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBsYXN0ID0gcGFydHNbaV07XG4gICAgaWYgKGxhc3QgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBwYXJ0cy51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0cztcbn1cblxuLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb25cbi8vICdyb290JyBpcyBqdXN0IGEgc2xhc2gsIG9yIG5vdGhpbmcuXG52YXIgc3BsaXRQYXRoUmUgPVxuICAgIC9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvO1xudmFyIHNwbGl0UGF0aCA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gIHJldHVybiBzcGxpdFBhdGhSZS5leGVjKGZpbGVuYW1lKS5zbGljZSgxKTtcbn07XG5cbi8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcmVzb2x2ZWRQYXRoID0gJycsXG4gICAgICByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICB2YXIgcGF0aCA9IChpID49IDApID8gYXJndW1lbnRzW2ldIDogcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIFNraXAgZW1wdHkgYW5kIGludmFsaWQgZW50cmllc1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzJyk7XG4gICAgfSBlbHNlIGlmICghcGF0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzb2x2ZWRQYXRoID0gcGF0aCArICcvJyArIHJlc29sdmVkUGF0aDtcbiAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQXQoMCkgPT09ICcvJztcbiAgfVxuXG4gIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBhdGggc2hvdWxkIGJlIHJlc29sdmVkIHRvIGEgZnVsbCBhYnNvbHV0ZSBwYXRoLCBidXRcbiAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIHJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KGZpbHRlcihyZXNvbHZlZFBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhcmVzb2x2ZWRBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIHJldHVybiAoKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGgpIHx8ICcuJztcbn07XG5cbi8vIHBhdGgubm9ybWFsaXplKHBhdGgpXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCksXG4gICAgICB0cmFpbGluZ1NsYXNoID0gc3Vic3RyKHBhdGgsIC0xKSA9PT0gJy8nO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICBwYXRoID0gbm9ybWFsaXplQXJyYXkoZmlsdGVyKHBhdGguc3BsaXQoJy8nKSwgZnVuY3Rpb24ocCkge1xuICAgIHJldHVybiAhIXA7XG4gIH0pLCAhaXNBYnNvbHV0ZSkuam9pbignLycpO1xuXG4gIGlmICghcGF0aCAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHBhdGggPSAnLic7XG4gIH1cbiAgaWYgKHBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGggKz0gJy8nO1xuICB9XG5cbiAgcmV0dXJuIChpc0Fic29sdXRlID8gJy8nIDogJycpICsgcGF0aDtcbn07XG5cbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG4vLyBwb3NpeCB2ZXJzaW9uXG5leHBvcnRzLmpvaW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBhdGhzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgcmV0dXJuIGV4cG9ydHMubm9ybWFsaXplKGZpbHRlcihwYXRocywgZnVuY3Rpb24ocCwgaW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSkuam9pbignLycpKTtcbn07XG5cblxuLy8gcGF0aC5yZWxhdGl2ZShmcm9tLCB0bylcbi8vIHBvc2l4IHZlcnNpb25cbmV4cG9ydHMucmVsYXRpdmUgPSBmdW5jdGlvbihmcm9tLCB0bykge1xuICBmcm9tID0gZXhwb3J0cy5yZXNvbHZlKGZyb20pLnN1YnN0cigxKTtcbiAgdG8gPSBleHBvcnRzLnJlc29sdmUodG8pLnN1YnN0cigxKTtcblxuICBmdW5jdGlvbiB0cmltKGFycikge1xuICAgIHZhciBzdGFydCA9IDA7XG4gICAgZm9yICg7IHN0YXJ0IDwgYXJyLmxlbmd0aDsgc3RhcnQrKykge1xuICAgICAgaWYgKGFycltzdGFydF0gIT09ICcnKSBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gYXJyLmxlbmd0aCAtIDE7XG4gICAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgICAgaWYgKGFycltlbmRdICE9PSAnJykgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZShzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTtcbiAgfVxuXG4gIHZhciBmcm9tUGFydHMgPSB0cmltKGZyb20uc3BsaXQoJy8nKSk7XG4gIHZhciB0b1BhcnRzID0gdHJpbSh0by5zcGxpdCgnLycpKTtcblxuICB2YXIgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICB2YXIgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKHZhciBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn07XG5cbmV4cG9ydHMuc2VwID0gJy8nO1xuZXhwb3J0cy5kZWxpbWl0ZXIgPSAnOic7XG5cbmV4cG9ydHMuZGlybmFtZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgdmFyIHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKSxcbiAgICAgIHJvb3QgPSByZXN1bHRbMF0sXG4gICAgICBkaXIgPSByZXN1bHRbMV07XG5cbiAgaWYgKCFyb290ICYmICFkaXIpIHtcbiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXJcbiAgICByZXR1cm4gJy4nO1xuICB9XG5cbiAgaWYgKGRpcikge1xuICAgIC8vIEl0IGhhcyBhIGRpcm5hbWUsIHN0cmlwIHRyYWlsaW5nIHNsYXNoXG4gICAgZGlyID0gZGlyLnN1YnN0cigwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn07XG5cblxuZXhwb3J0cy5iYXNlbmFtZSA9IGZ1bmN0aW9uKHBhdGgsIGV4dCkge1xuICB2YXIgZiA9IHNwbGl0UGF0aChwYXRoKVsyXTtcbiAgLy8gVE9ETzogbWFrZSB0aGlzIGNvbXBhcmlzb24gY2FzZS1pbnNlbnNpdGl2ZSBvbiB3aW5kb3dzP1xuICBpZiAoZXh0ICYmIGYuc3Vic3RyKC0xICogZXh0Lmxlbmd0aCkgPT09IGV4dCkge1xuICAgIGYgPSBmLnN1YnN0cigwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufTtcblxuXG5leHBvcnRzLmV4dG5hbWUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHJldHVybiBzcGxpdFBhdGgocGF0aClbM107XG59O1xuXG5mdW5jdGlvbiBmaWx0ZXIgKHhzLCBmKSB7XG4gICAgaWYgKHhzLmZpbHRlcikgcmV0dXJuIHhzLmZpbHRlcihmKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZih4c1tpXSwgaSwgeHMpKSByZXMucHVzaCh4c1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbi8vIFN0cmluZy5wcm90b3R5cGUuc3Vic3RyIC0gbmVnYXRpdmUgaW5kZXggZG9uJ3Qgd29yayBpbiBJRThcbnZhciBzdWJzdHIgPSAnYWInLnN1YnN0cigtMSkgPT09ICdiJ1xuICAgID8gZnVuY3Rpb24gKHN0ciwgc3RhcnQsIGxlbikgeyByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKSB9XG4gICAgOiBmdW5jdGlvbiAoc3RyLCBzdGFydCwgbGVuKSB7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gc3RyLmxlbmd0aCArIHN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuKTtcbiAgICB9XG47XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWljbTkzYzJWeWFXWjVMMjV2WkdWZmJXOWtkV3hsY3k5d1lYUm9MV0p5YjNkelpYSnBabmt2YVc1a1pYZ3Vhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanRCUVVGQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5OGdRMjl3ZVhKcFoyaDBJRXB2ZVdWdWRDd2dTVzVqTGlCaGJtUWdiM1JvWlhJZ1RtOWtaU0JqYjI1MGNtbGlkWFJ2Y25NdVhHNHZMMXh1THk4Z1VHVnliV2x6YzJsdmJpQnBjeUJvWlhKbFlua2daM0poYm5SbFpDd2dabkpsWlNCdlppQmphR0Z5WjJVc0lIUnZJR0Z1ZVNCd1pYSnpiMjRnYjJKMFlXbHVhVzVuSUdGY2JpOHZJR052Y0hrZ2IyWWdkR2hwY3lCemIyWjBkMkZ5WlNCaGJtUWdZWE56YjJOcFlYUmxaQ0JrYjJOMWJXVnVkR0YwYVc5dUlHWnBiR1Z6SUNoMGFHVmNiaTh2SUZ3aVUyOW1kSGRoY21WY0lpa3NJSFJ2SUdSbFlXd2dhVzRnZEdobElGTnZablIzWVhKbElIZHBkR2h2ZFhRZ2NtVnpkSEpwWTNScGIyNHNJR2x1WTJ4MVpHbHVaMXh1THk4Z2QybDBhRzkxZENCc2FXMXBkR0YwYVc5dUlIUm9aU0J5YVdkb2RITWdkRzhnZFhObExDQmpiM0I1TENCdGIyUnBabmtzSUcxbGNtZGxMQ0J3ZFdKc2FYTm9MRnh1THk4Z1pHbHpkSEpwWW5WMFpTd2djM1ZpYkdsalpXNXpaU3dnWVc1a0wyOXlJSE5sYkd3Z1kyOXdhV1Z6SUc5bUlIUm9aU0JUYjJaMGQyRnlaU3dnWVc1a0lIUnZJSEJsY20xcGRGeHVMeThnY0dWeWMyOXVjeUIwYnlCM2FHOXRJSFJvWlNCVGIyWjBkMkZ5WlNCcGN5Qm1kWEp1YVhOb1pXUWdkRzhnWkc4Z2MyOHNJSE4xWW1wbFkzUWdkRzhnZEdobFhHNHZMeUJtYjJ4c2IzZHBibWNnWTI5dVpHbDBhVzl1Y3pwY2JpOHZYRzR2THlCVWFHVWdZV0p2ZG1VZ1kyOXdlWEpwWjJoMElHNXZkR2xqWlNCaGJtUWdkR2hwY3lCd1pYSnRhWE56YVc5dUlHNXZkR2xqWlNCemFHRnNiQ0JpWlNCcGJtTnNkV1JsWkZ4dUx5OGdhVzRnWVd4c0lHTnZjR2xsY3lCdmNpQnpkV0p6ZEdGdWRHbGhiQ0J3YjNKMGFXOXVjeUJ2WmlCMGFHVWdVMjltZEhkaGNtVXVYRzR2TDF4dUx5OGdWRWhGSUZOUFJsUlhRVkpGSUVsVElGQlNUMVpKUkVWRUlGd2lRVk1nU1ZOY0lpd2dWMGxVU0U5VlZDQlhRVkpTUVU1VVdTQlBSaUJCVGxrZ1MwbE9SQ3dnUlZoUVVrVlRVMXh1THk4Z1QxSWdTVTFRVEVsRlJDd2dTVTVEVEZWRVNVNUhJRUpWVkNCT1QxUWdURWxOU1ZSRlJDQlVUeUJVU0VVZ1YwRlNVa0ZPVkVsRlV5QlBSbHh1THk4Z1RVVlNRMGhCVGxSQlFrbE1TVlJaTENCR1NWUk9SVk5USUVaUFVpQkJJRkJCVWxSSlExVk1RVklnVUZWU1VFOVRSU0JCVGtRZ1RrOU9TVTVHVWtsT1IwVk5SVTVVTGlCSlRseHVMeThnVGs4Z1JWWkZUbFFnVTBoQlRFd2dWRWhGSUVGVlZFaFBVbE1nVDFJZ1EwOVFXVkpKUjBoVUlFaFBURVJGVWxNZ1FrVWdURWxCUWt4RklFWlBVaUJCVGxrZ1EweEJTVTBzWEc0dkx5QkVRVTFCUjBWVElFOVNJRTlVU0VWU0lFeEpRVUpKVEVsVVdTd2dWMGhGVkVoRlVpQkpUaUJCVGlCQlExUkpUMDRnVDBZZ1EwOU9WRkpCUTFRc0lGUlBVbFFnVDFKY2JpOHZJRTlVU0VWU1YwbFRSU3dnUVZKSlUwbE9SeUJHVWs5TkxDQlBWVlFnVDBZZ1QxSWdTVTRnUTA5T1RrVkRWRWxQVGlCWFNWUklJRlJJUlNCVFQwWlVWMEZTUlNCUFVpQlVTRVZjYmk4dklGVlRSU0JQVWlCUFZFaEZVaUJFUlVGTVNVNUhVeUJKVGlCVVNFVWdVMDlHVkZkQlVrVXVYRzVjYmk4dklISmxjMjlzZG1WeklDNGdZVzVrSUM0dUlHVnNaVzFsYm5SeklHbHVJR0VnY0dGMGFDQmhjbkpoZVNCM2FYUm9JR1JwY21WamRHOXllU0J1WVcxbGN5QjBhR1Z5WlZ4dUx5OGdiWFZ6ZENCaVpTQnVieUJ6YkdGemFHVnpMQ0JsYlhCMGVTQmxiR1Z0Wlc1MGN5d2diM0lnWkdWMmFXTmxJRzVoYldWeklDaGpPbHhjS1NCcGJpQjBhR1VnWVhKeVlYbGNiaTh2SUNoemJ5QmhiSE52SUc1dklHeGxZV1JwYm1jZ1lXNWtJSFJ5WVdsc2FXNW5JSE5zWVhOb1pYTWdMU0JwZENCa2IyVnpJRzV2ZENCa2FYTjBhVzVuZFdsemFGeHVMeThnY21Wc1lYUnBkbVVnWVc1a0lHRmljMjlzZFhSbElIQmhkR2h6S1Z4dVpuVnVZM1JwYjI0Z2JtOXliV0ZzYVhwbFFYSnlZWGtvY0dGeWRITXNJR0ZzYkc5M1FXSnZkbVZTYjI5MEtTQjdYRzRnSUM4dklHbG1JSFJvWlNCd1lYUm9JSFJ5YVdWeklIUnZJR2R2SUdGaWIzWmxJSFJvWlNCeWIyOTBMQ0JnZFhCZ0lHVnVaSE1nZFhBZ1BpQXdYRzRnSUhaaGNpQjFjQ0E5SURBN1hHNGdJR1p2Y2lBb2RtRnlJR2tnUFNCd1lYSjBjeTVzWlc1bmRHZ2dMU0F4T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lIWmhjaUJzWVhOMElEMGdjR0Z5ZEhOYmFWMDdYRzRnSUNBZ2FXWWdLR3hoYzNRZ1BUMDlJQ2N1SnlrZ2UxeHVJQ0FnSUNBZ2NHRnlkSE11YzNCc2FXTmxLR2tzSURFcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2JHRnpkQ0E5UFQwZ0p5NHVKeWtnZTF4dUlDQWdJQ0FnY0dGeWRITXVjM0JzYVdObEtHa3NJREVwTzF4dUlDQWdJQ0FnZFhBckt6dGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIVndLU0I3WEc0Z0lDQWdJQ0J3WVhKMGN5NXpjR3hwWTJVb2FTd2dNU2s3WEc0Z0lDQWdJQ0IxY0MwdE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJR2xtSUhSb1pTQndZWFJvSUdseklHRnNiRzkzWldRZ2RHOGdaMjhnWVdKdmRtVWdkR2hsSUhKdmIzUXNJSEpsYzNSdmNtVWdiR1ZoWkdsdVp5QXVMbk5jYmlBZ2FXWWdLR0ZzYkc5M1FXSnZkbVZTYjI5MEtTQjdYRzRnSUNBZ1ptOXlJQ2c3SUhWd0xTMDdJSFZ3S1NCN1hHNGdJQ0FnSUNCd1lYSjBjeTUxYm5Ob2FXWjBLQ2N1TGljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCd1lYSjBjenRjYm4xY2JseHVMeThnVTNCc2FYUWdZU0JtYVd4bGJtRnRaU0JwYm5SdklGdHliMjkwTENCa2FYSXNJR0poYzJWdVlXMWxMQ0JsZUhSZExDQjFibWw0SUhabGNuTnBiMjVjYmk4dklDZHliMjkwSnlCcGN5QnFkWE4wSUdFZ2MyeGhjMmdzSUc5eUlHNXZkR2hwYm1jdVhHNTJZWElnYzNCc2FYUlFZWFJvVW1VZ1BWeHVJQ0FnSUM5ZUtGeGNMejk4S1NoYlhGeHpYRnhUWFNvL0tTZ29QenBjWEM1N01Td3lmWHhiWGx4Y0wxMHJQM3dwS0Z4Y0xsdGVMbHhjTDEwcWZDa3BLRDg2VzF4Y0wxMHFLU1F2TzF4dWRtRnlJSE53YkdsMFVHRjBhQ0E5SUdaMWJtTjBhVzl1S0dacGJHVnVZVzFsS1NCN1hHNGdJSEpsZEhWeWJpQnpjR3hwZEZCaGRHaFNaUzVsZUdWaktHWnBiR1Z1WVcxbEtTNXpiR2xqWlNneEtUdGNibjA3WEc1Y2JpOHZJSEJoZEdndWNtVnpiMngyWlNoYlpuSnZiU0F1TGk1ZExDQjBieWxjYmk4dklIQnZjMmw0SUhabGNuTnBiMjVjYm1WNGNHOXlkSE11Y21WemIyeDJaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0IyWVhJZ2NtVnpiMngyWldSUVlYUm9JRDBnSnljc1hHNGdJQ0FnSUNCeVpYTnZiSFpsWkVGaWMyOXNkWFJsSUQwZ1ptRnNjMlU3WEc1Y2JpQWdabTl5SUNoMllYSWdhU0E5SUdGeVozVnRaVzUwY3k1c1pXNW5kR2dnTFNBeE95QnBJRDQ5SUMweElDWW1JQ0Z5WlhOdmJIWmxaRUZpYzI5c2RYUmxPeUJwTFMwcElIdGNiaUFnSUNCMllYSWdjR0YwYUNBOUlDaHBJRDQ5SURBcElEOGdZWEpuZFcxbGJuUnpXMmxkSURvZ2NISnZZMlZ6Y3k1amQyUW9LVHRjYmx4dUlDQWdJQzh2SUZOcmFYQWdaVzF3ZEhrZ1lXNWtJR2x1ZG1Gc2FXUWdaVzUwY21sbGMxeHVJQ0FnSUdsbUlDaDBlWEJsYjJZZ2NHRjBhQ0FoUFQwZ0ozTjBjbWx1WnljcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QlVlWEJsUlhKeWIzSW9KMEZ5WjNWdFpXNTBjeUIwYnlCd1lYUm9MbkpsYzI5c2RtVWdiWFZ6ZENCaVpTQnpkSEpwYm1kekp5azdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDZ2hjR0YwYUNrZ2UxeHVJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WemIyeDJaV1JRWVhSb0lEMGdjR0YwYUNBcklDY3ZKeUFySUhKbGMyOXNkbVZrVUdGMGFEdGNiaUFnSUNCeVpYTnZiSFpsWkVGaWMyOXNkWFJsSUQwZ2NHRjBhQzVqYUdGeVFYUW9NQ2tnUFQwOUlDY3ZKenRjYmlBZ2ZWeHVYRzRnSUM4dklFRjBJSFJvYVhNZ2NHOXBiblFnZEdobElIQmhkR2dnYzJodmRXeGtJR0psSUhKbGMyOXNkbVZrSUhSdklHRWdablZzYkNCaFluTnZiSFYwWlNCd1lYUm9MQ0JpZFhSY2JpQWdMeThnYUdGdVpHeGxJSEpsYkdGMGFYWmxJSEJoZEdoeklIUnZJR0psSUhOaFptVWdLRzFwWjJoMElHaGhjSEJsYmlCM2FHVnVJSEJ5YjJObGMzTXVZM2RrS0NrZ1ptRnBiSE1wWEc1Y2JpQWdMeThnVG05eWJXRnNhWHBsSUhSb1pTQndZWFJvWEc0Z0lISmxjMjlzZG1Wa1VHRjBhQ0E5SUc1dmNtMWhiR2w2WlVGeWNtRjVLR1pwYkhSbGNpaHlaWE52YkhabFpGQmhkR2d1YzNCc2FYUW9KeThuS1N3Z1puVnVZM1JwYjI0b2NDa2dlMXh1SUNBZ0lISmxkSFZ5YmlBaElYQTdYRzRnSUgwcExDQWhjbVZ6YjJ4MlpXUkJZbk52YkhWMFpTa3VhbTlwYmlnbkx5Y3BPMXh1WEc0Z0lISmxkSFZ5YmlBb0tISmxjMjlzZG1Wa1FXSnpiMngxZEdVZ1B5QW5MeWNnT2lBbkp5a2dLeUJ5WlhOdmJIWmxaRkJoZEdncElIeDhJQ2N1Snp0Y2JuMDdYRzVjYmk4dklIQmhkR2d1Ym05eWJXRnNhWHBsS0hCaGRHZ3BYRzR2THlCd2IzTnBlQ0IyWlhKemFXOXVYRzVsZUhCdmNuUnpMbTV2Y20xaGJHbDZaU0E5SUdaMWJtTjBhVzl1S0hCaGRHZ3BJSHRjYmlBZ2RtRnlJR2x6UVdKemIyeDFkR1VnUFNCbGVIQnZjblJ6TG1selFXSnpiMngxZEdVb2NHRjBhQ2tzWEc0Z0lDQWdJQ0IwY21GcGJHbHVaMU5zWVhOb0lEMGdjM1ZpYzNSeUtIQmhkR2dzSUMweEtTQTlQVDBnSnk4bk8xeHVYRzRnSUM4dklFNXZjbTFoYkdsNlpTQjBhR1VnY0dGMGFGeHVJQ0J3WVhSb0lEMGdibTl5YldGc2FYcGxRWEp5WVhrb1ptbHNkR1Z5S0hCaGRHZ3VjM0JzYVhRb0p5OG5LU3dnWm5WdVkzUnBiMjRvY0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUFoSVhBN1hHNGdJSDBwTENBaGFYTkJZbk52YkhWMFpTa3VhbTlwYmlnbkx5Y3BPMXh1WEc0Z0lHbG1JQ2doY0dGMGFDQW1KaUFoYVhOQlluTnZiSFYwWlNrZ2UxeHVJQ0FnSUhCaGRHZ2dQU0FuTGljN1hHNGdJSDFjYmlBZ2FXWWdLSEJoZEdnZ0ppWWdkSEpoYVd4cGJtZFRiR0Z6YUNrZ2UxeHVJQ0FnSUhCaGRHZ2dLejBnSnk4bk8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlDaHBjMEZpYzI5c2RYUmxJRDhnSnk4bklEb2dKeWNwSUNzZ2NHRjBhRHRjYm4wN1hHNWNiaTh2SUhCdmMybDRJSFpsY25OcGIyNWNibVY0Y0c5eWRITXVhWE5CWW5OdmJIVjBaU0E5SUdaMWJtTjBhVzl1S0hCaGRHZ3BJSHRjYmlBZ2NtVjBkWEp1SUhCaGRHZ3VZMmhoY2tGMEtEQXBJRDA5UFNBbkx5YzdYRzU5TzF4dVhHNHZMeUJ3YjNOcGVDQjJaWEp6YVc5dVhHNWxlSEJ2Y25SekxtcHZhVzRnUFNCbWRXNWpkR2x2YmlncElIdGNiaUFnZG1GeUlIQmhkR2h6SUQwZ1FYSnlZWGt1Y0hKdmRHOTBlWEJsTG5Oc2FXTmxMbU5oYkd3b1lYSm5kVzFsYm5SekxDQXdLVHRjYmlBZ2NtVjBkWEp1SUdWNGNHOXlkSE11Ym05eWJXRnNhWHBsS0dacGJIUmxjaWh3WVhSb2N5d2dablZ1WTNScGIyNG9jQ3dnYVc1a1pYZ3BJSHRjYmlBZ0lDQnBaaUFvZEhsd1pXOW1JSEFnSVQwOUlDZHpkSEpwYm1jbktTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dWSGx3WlVWeWNtOXlLQ2RCY21kMWJXVnVkSE1nZEc4Z2NHRjBhQzVxYjJsdUlHMTFjM1FnWW1VZ2MzUnlhVzVuY3ljcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjRHRjYmlBZ2ZTa3VhbTlwYmlnbkx5Y3BLVHRjYm4wN1hHNWNibHh1THk4Z2NHRjBhQzV5Wld4aGRHbDJaU2htY205dExDQjBieWxjYmk4dklIQnZjMmw0SUhabGNuTnBiMjVjYm1WNGNHOXlkSE11Y21Wc1lYUnBkbVVnUFNCbWRXNWpkR2x2YmlobWNtOXRMQ0IwYnlrZ2UxeHVJQ0JtY205dElEMGdaWGh3YjNKMGN5NXlaWE52YkhabEtHWnliMjBwTG5OMVluTjBjaWd4S1R0Y2JpQWdkRzhnUFNCbGVIQnZjblJ6TG5KbGMyOXNkbVVvZEc4cExuTjFZbk4wY2lneEtUdGNibHh1SUNCbWRXNWpkR2x2YmlCMGNtbHRLR0Z5Y2lrZ2UxeHVJQ0FnSUhaaGNpQnpkR0Z5ZENBOUlEQTdYRzRnSUNBZ1ptOXlJQ2c3SUhOMFlYSjBJRHdnWVhKeUxteGxibWQwYURzZ2MzUmhjblFyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLR0Z5Y2x0emRHRnlkRjBnSVQwOUlDY25LU0JpY21WaGF6dGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdaVzVrSUQwZ1lYSnlMbXhsYm1kMGFDQXRJREU3WEc0Z0lDQWdabTl5SUNnN0lHVnVaQ0ErUFNBd095QmxibVF0TFNrZ2UxeHVJQ0FnSUNBZ2FXWWdLR0Z5Y2x0bGJtUmRJQ0U5UFNBbkp5a2dZbkpsWVdzN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tITjBZWEowSUQ0Z1pXNWtLU0J5WlhSMWNtNGdXMTA3WEc0Z0lDQWdjbVYwZFhKdUlHRnljaTV6YkdsalpTaHpkR0Z5ZEN3Z1pXNWtJQzBnYzNSaGNuUWdLeUF4S1R0Y2JpQWdmVnh1WEc0Z0lIWmhjaUJtY205dFVHRnlkSE1nUFNCMGNtbHRLR1p5YjIwdWMzQnNhWFFvSnk4bktTazdYRzRnSUhaaGNpQjBiMUJoY25SeklEMGdkSEpwYlNoMGJ5NXpjR3hwZENnbkx5Y3BLVHRjYmx4dUlDQjJZWElnYkdWdVozUm9JRDBnVFdGMGFDNXRhVzRvWm5KdmJWQmhjblJ6TG14bGJtZDBhQ3dnZEc5UVlYSjBjeTVzWlc1bmRHZ3BPMXh1SUNCMllYSWdjMkZ0WlZCaGNuUnpUR1Z1WjNSb0lEMGdiR1Z1WjNSb08xeHVJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUd4bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ2FXWWdLR1p5YjIxUVlYSjBjMXRwWFNBaFBUMGdkRzlRWVhKMGMxdHBYU2tnZTF4dUlDQWdJQ0FnYzJGdFpWQmhjblJ6VEdWdVozUm9JRDBnYVR0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSFpoY2lCdmRYUndkWFJRWVhKMGN5QTlJRnRkTzF4dUlDQm1iM0lnS0haaGNpQnBJRDBnYzJGdFpWQmhjblJ6VEdWdVozUm9PeUJwSUR3Z1puSnZiVkJoY25SekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdiM1YwY0hWMFVHRnlkSE11Y0hWemFDZ25MaTRuS1R0Y2JpQWdmVnh1WEc0Z0lHOTFkSEIxZEZCaGNuUnpJRDBnYjNWMGNIVjBVR0Z5ZEhNdVkyOXVZMkYwS0hSdlVHRnlkSE11YzJ4cFkyVW9jMkZ0WlZCaGNuUnpUR1Z1WjNSb0tTazdYRzVjYmlBZ2NtVjBkWEp1SUc5MWRIQjFkRkJoY25SekxtcHZhVzRvSnk4bktUdGNibjA3WEc1Y2JtVjRjRzl5ZEhNdWMyVndJRDBnSnk4bk8xeHVaWGh3YjNKMGN5NWtaV3hwYldsMFpYSWdQU0FuT2ljN1hHNWNibVY0Y0c5eWRITXVaR2x5Ym1GdFpTQTlJR1oxYm1OMGFXOXVLSEJoZEdncElIdGNiaUFnZG1GeUlISmxjM1ZzZENBOUlITndiR2wwVUdGMGFDaHdZWFJvS1N4Y2JpQWdJQ0FnSUhKdmIzUWdQU0J5WlhOMWJIUmJNRjBzWEc0Z0lDQWdJQ0JrYVhJZ1BTQnlaWE4xYkhSYk1WMDdYRzVjYmlBZ2FXWWdLQ0Z5YjI5MElDWW1JQ0ZrYVhJcElIdGNiaUFnSUNBdkx5Qk9ieUJrYVhKdVlXMWxJSGRvWVhSemIyVjJaWEpjYmlBZ0lDQnlaWFIxY200Z0p5NG5PMXh1SUNCOVhHNWNiaUFnYVdZZ0tHUnBjaWtnZTF4dUlDQWdJQzh2SUVsMElHaGhjeUJoSUdScGNtNWhiV1VzSUhOMGNtbHdJSFJ5WVdsc2FXNW5JSE5zWVhOb1hHNGdJQ0FnWkdseUlEMGdaR2x5TG5OMVluTjBjaWd3TENCa2FYSXViR1Z1WjNSb0lDMGdNU2s3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnY205dmRDQXJJR1JwY2p0Y2JuMDdYRzVjYmx4dVpYaHdiM0owY3k1aVlYTmxibUZ0WlNBOUlHWjFibU4wYVc5dUtIQmhkR2dzSUdWNGRDa2dlMXh1SUNCMllYSWdaaUE5SUhOd2JHbDBVR0YwYUNod1lYUm9LVnN5WFR0Y2JpQWdMeThnVkU5RVR6b2diV0ZyWlNCMGFHbHpJR052YlhCaGNtbHpiMjRnWTJGelpTMXBibk5sYm5OcGRHbDJaU0J2YmlCM2FXNWtiM2R6UDF4dUlDQnBaaUFvWlhoMElDWW1JR1l1YzNWaWMzUnlLQzB4SUNvZ1pYaDBMbXhsYm1kMGFDa2dQVDA5SUdWNGRDa2dlMXh1SUNBZ0lHWWdQU0JtTG5OMVluTjBjaWd3TENCbUxteGxibWQwYUNBdElHVjRkQzVzWlc1bmRHZ3BPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQm1PMXh1ZlR0Y2JseHVYRzVsZUhCdmNuUnpMbVY0ZEc1aGJXVWdQU0JtZFc1amRHbHZiaWh3WVhSb0tTQjdYRzRnSUhKbGRIVnliaUJ6Y0d4cGRGQmhkR2dvY0dGMGFDbGJNMTA3WEc1OU8xeHVYRzVtZFc1amRHbHZiaUJtYVd4MFpYSWdLSGh6TENCbUtTQjdYRzRnSUNBZ2FXWWdLSGh6TG1acGJIUmxjaWtnY21WMGRYSnVJSGh6TG1acGJIUmxjaWhtS1R0Y2JpQWdJQ0IyWVhJZ2NtVnpJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUENCNGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNCcFppQW9aaWg0YzF0cFhTd2dhU3dnZUhNcEtTQnlaWE11Y0hWemFDaDRjMXRwWFNrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnlaWE03WEc1OVhHNWNiaTh2SUZOMGNtbHVaeTV3Y205MGIzUjVjR1V1YzNWaWMzUnlJQzBnYm1WbllYUnBkbVVnYVc1a1pYZ2daRzl1SjNRZ2QyOXlheUJwYmlCSlJUaGNiblpoY2lCemRXSnpkSElnUFNBbllXSW5Mbk4xWW5OMGNpZ3RNU2tnUFQwOUlDZGlKMXh1SUNBZ0lEOGdablZ1WTNScGIyNGdLSE4wY2l3Z2MzUmhjblFzSUd4bGJpa2dleUJ5WlhSMWNtNGdjM1J5TG5OMVluTjBjaWh6ZEdGeWRDd2diR1Z1S1NCOVhHNGdJQ0FnT2lCbWRXNWpkR2x2YmlBb2MzUnlMQ0J6ZEdGeWRDd2diR1Z1S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h6ZEdGeWRDQThJREFwSUhOMFlYSjBJRDBnYzNSeUxteGxibWQwYUNBcklITjBZWEowTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYzNSeUxuTjFZbk4wY2loemRHRnlkQ3dnYkdWdUtUdGNiaUFnSUNCOVhHNDdYRzRpWFgwPSIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxuXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudFF1ZXVlO1xuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICAgICAgICBjdXJyZW50UXVldWVbaV0oKTtcbiAgICAgICAgfVxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG59XG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHF1ZXVlLnB1c2goZnVuKTtcbiAgICBpZiAoIWRyYWluaW5nKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZHJhaW5RdWV1ZSwgMCk7XG4gICAgfVxufTtcblxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbi8vIFRPRE8oc2h0eWxtYW4pXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCl7XG4vKiEgaHR0cDovL210aHMuYmUvcHVueWNvZGUgdjEuMi40IGJ5IEBtYXRoaWFzICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGVzICovXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHRtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cyAmJiBtb2R1bGU7XG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgcHVueWNvZGVgIG9iamVjdC5cblx0ICogQG5hbWUgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHR2YXIgcHVueWNvZGUsXG5cblx0LyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuXHRtYXhJbnQgPSAyMTQ3NDgzNjQ3LCAvLyBha2EuIDB4N0ZGRkZGRkYgb3IgMl4zMS0xXG5cblx0LyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuXHRiYXNlID0gMzYsXG5cdHRNaW4gPSAxLFxuXHR0TWF4ID0gMjYsXG5cdHNrZXcgPSAzOCxcblx0ZGFtcCA9IDcwMCxcblx0aW5pdGlhbEJpYXMgPSA3Mixcblx0aW5pdGlhbE4gPSAxMjgsIC8vIDB4ODBcblx0ZGVsaW1pdGVyID0gJy0nLCAvLyAnXFx4MkQnXG5cblx0LyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cblx0cmVnZXhQdW55Y29kZSA9IC9eeG4tLS8sXG5cdHJlZ2V4Tm9uQVNDSUkgPSAvW14gLX5dLywgLy8gdW5wcmludGFibGUgQVNDSUkgY2hhcnMgKyBub24tQVNDSUkgY2hhcnNcblx0cmVnZXhTZXBhcmF0b3JzID0gL1xceDJFfFxcdTMwMDJ8XFx1RkYwRXxcXHVGRjYxL2csIC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuXHQvKiogRXJyb3IgbWVzc2FnZXMgKi9cblx0ZXJyb3JzID0ge1xuXHRcdCdvdmVyZmxvdyc6ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcycsXG5cdFx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0XHQnaW52YWxpZC1pbnB1dCc6ICdJbnZhbGlkIGlucHV0J1xuXHR9LFxuXG5cdC8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cblx0YmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluLFxuXHRmbG9vciA9IE1hdGguZmxvb3IsXG5cdHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUsXG5cblx0LyoqIFRlbXBvcmFyeSB2YXJpYWJsZSAqL1xuXHRrZXk7XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXJyb3IgdHlwZS5cblx0ICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuXHQgKi9cblx0ZnVuY3Rpb24gZXJyb3IodHlwZSkge1xuXHRcdHRocm93IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdFx0YXJyYXlbbGVuZ3RoXSA9IGZuKGFycmF5W2xlbmd0aF0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYXJyYXk7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZS5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHJldHVybiBtYXAoc3RyaW5nLnNwbGl0KHJlZ2V4U2VwYXJhdG9ycyksIGZuKS5qb2luKCcuJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBkZWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cblx0ICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGFycmF5IG9mIGNvZGUgcG9pbnRzLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGNvdW50ZXIgPSAwLFxuXHRcdCAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuXHRcdCAgICB2YWx1ZSxcblx0XHQgICAgZXh0cmE7XG5cdFx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdFx0Ly8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG5cdFx0XHRcdGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdFx0aWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIGxvdyBzdXJyb2dhdGVcblx0XHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZSBuZXh0XG5cdFx0XHRcdFx0Ly8gY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG5cdCAqIEBuYW1lIGVuY29kZVxuXHQgKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgbmV3IFVuaWNvZGUgc3RyaW5nIChVQ1MtMikuXG5cdCAqL1xuXHRmdW5jdGlvbiB1Y3MyZW5jb2RlKGFycmF5KSB7XG5cdFx0cmV0dXJuIG1hcChhcnJheSwgZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHRcdGlmICh2YWx1ZSA+IDB4RkZGRikge1xuXHRcdFx0XHR2YWx1ZSAtPSAweDEwMDAwO1xuXHRcdFx0XHRvdXRwdXQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlKHZhbHVlID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcblx0XHRcdFx0dmFsdWUgPSAweERDMDAgfCB2YWx1ZSAmIDB4M0ZGO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pLmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cblx0ICogQHNlZSBgZGlnaXRUb0Jhc2ljKClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIG51bWVyaWMgdmFsdWUgb2YgYSBiYXNpYyBjb2RlIHBvaW50IChmb3IgdXNlIGluXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcblx0ICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG5cdCAqL1xuXHRmdW5jdGlvbiBiYXNpY1RvRGlnaXQoY29kZVBvaW50KSB7XG5cdFx0aWYgKGNvZGVQb2ludCAtIDQ4IDwgMTApIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSAyMjtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDY1IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA2NTtcblx0XHR9XG5cdFx0aWYgKGNvZGVQb2ludCAtIDk3IDwgMjYpIHtcblx0XHRcdHJldHVybiBjb2RlUG9pbnQgLSA5Nztcblx0XHR9XG5cdFx0cmV0dXJuIGJhc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuXHQgKiBAc2VlIGBiYXNpY1RvRGlnaXQoKWBcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHJldHVybnMge051bWJlcn0gVGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgKHdoZW4gdXNlZCBmb3Jcblx0ICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2Vcblx0ICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG5cdCAqIHVzZWQ7IGVsc2UsIHRoZSBsb3dlcmNhc2UgZm9ybSBpcyB1c2VkLiBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkXG5cdCAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG5cdCAqL1xuXHRmdW5jdGlvbiBkaWdpdFRvQmFzaWMoZGlnaXQsIGZsYWcpIHtcblx0XHQvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuXHRcdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRcdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG5cdH1cblxuXHQvKipcblx0ICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cblx0ICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRhcHQoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdFx0dmFyIGsgPSAwO1xuXHRcdGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG5cdFx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRcdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0XHRkZWx0YSA9IGZsb29yKGRlbHRhIC8gYmFzZU1pbnVzVE1pbik7XG5cdFx0fVxuXHRcdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scyB0byBhIHN0cmluZyBvZiBVbmljb2RlXG5cdCAqIHN5bWJvbHMuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICovXG5cdGZ1bmN0aW9uIGRlY29kZShpbnB1dCkge1xuXHRcdC8vIERvbid0IHVzZSBVQ1MtMlxuXHRcdHZhciBvdXRwdXQgPSBbXSxcblx0XHQgICAgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgsXG5cdFx0ICAgIG91dCxcblx0XHQgICAgaSA9IDAsXG5cdFx0ICAgIG4gPSBpbml0aWFsTixcblx0XHQgICAgYmlhcyA9IGluaXRpYWxCaWFzLFxuXHRcdCAgICBiYXNpYyxcblx0XHQgICAgaixcblx0XHQgICAgaW5kZXgsXG5cdFx0ICAgIG9sZGksXG5cdFx0ICAgIHcsXG5cdFx0ICAgIGssXG5cdFx0ICAgIGRpZ2l0LFxuXHRcdCAgICB0LFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgYmFzZU1pbnVzVDtcblxuXHRcdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHRcdC8vIHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciBgMGAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiBjb3B5XG5cdFx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0XHRiYXNpYyA9IGlucHV0Lmxhc3RJbmRleE9mKGRlbGltaXRlcik7XG5cdFx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdFx0YmFzaWMgPSAwO1xuXHRcdH1cblxuXHRcdGZvciAoaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0XHQvLyBpZiBpdCdzIG5vdCBhIGJhc2ljIGNvZGUgcG9pbnRcblx0XHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdFx0fVxuXHRcdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFpbiBkZWNvZGluZyBsb29wOiBzdGFydCBqdXN0IGFmdGVyIHRoZSBsYXN0IGRlbGltaXRlciBpZiBhbnkgYmFzaWMgY29kZVxuXHRcdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0XHRmb3IgKGluZGV4ID0gYmFzaWMgPiAwID8gYmFzaWMgKyAxIDogMDsgaW5kZXggPCBpbnB1dExlbmd0aDsgLyogbm8gZmluYWwgZXhwcmVzc2lvbiAqLykge1xuXG5cdFx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0XHQvLyB3aGljaCBnZXRzIGFkZGVkIHRvIGBpYC4gVGhlIG92ZXJmbG93IGNoZWNraW5nIGlzIGVhc2llclxuXHRcdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0XHRmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cblx0XHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ2ludmFsaWQtaW5wdXQnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRcdGlmIChkaWdpdCA+PSBiYXNlIHx8IGRpZ2l0ID4gZmxvb3IoKG1heEludCAtIGkpIC8gdykpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGkgKz0gZGlnaXQgKiB3O1xuXHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdGlmICh3ID4gZmxvb3IobWF4SW50IC8gYmFzZU1pbnVzVCkpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHcgKj0gYmFzZU1pbnVzVDtcblxuXHRcdFx0fVxuXG5cdFx0XHRvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRcdGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0LCBvbGRpID09IDApO1xuXG5cdFx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRcdGlmIChmbG9vcihpIC8gb3V0KSA+IG1heEludCAtIG4pIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdG4gKz0gZmxvb3IoaSAvIG91dCk7XG5cdFx0XHRpICU9IG91dDtcblxuXHRcdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dFxuXHRcdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVjczJlbmNvZGUob3V0cHV0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgdG8gYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBlbmNvZGUoaW5wdXQpIHtcblx0XHR2YXIgbixcblx0XHQgICAgZGVsdGEsXG5cdFx0ICAgIGhhbmRsZWRDUENvdW50LFxuXHRcdCAgICBiYXNpY0xlbmd0aCxcblx0XHQgICAgYmlhcyxcblx0XHQgICAgaixcblx0XHQgICAgbSxcblx0XHQgICAgcSxcblx0XHQgICAgayxcblx0XHQgICAgdCxcblx0XHQgICAgY3VycmVudFZhbHVlLFxuXHRcdCAgICBvdXRwdXQgPSBbXSxcblx0XHQgICAgLyoqIGBpbnB1dExlbmd0aGAgd2lsbCBob2xkIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gYGlucHV0YC4gKi9cblx0XHQgICAgaW5wdXRMZW5ndGgsXG5cdFx0ICAgIC8qKiBDYWNoZWQgY2FsY3VsYXRpb24gcmVzdWx0cyAqL1xuXHRcdCAgICBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsXG5cdFx0ICAgIGJhc2VNaW51c1QsXG5cdFx0ICAgIHFNaW51c1Q7XG5cblx0XHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBVbmljb2RlXG5cdFx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHRcdC8vIENhY2hlIHRoZSBsZW5ndGhcblx0XHRpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIHN0YXRlXG5cdFx0biA9IGluaXRpYWxOO1xuXHRcdGRlbHRhID0gMDtcblx0XHRiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzXG5cdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IDB4ODApIHtcblx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGggPSBvdXRwdXQubGVuZ3RoO1xuXG5cdFx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdFx0Ly8gYGJhc2ljTGVuZ3RoYCBpcyB0aGUgbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuXG5cdFx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgLSBpZiBpdCBpcyBub3QgZW1wdHkgLSB3aXRoIGEgZGVsaW1pdGVyXG5cdFx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0XHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0XHQvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0XG5cdFx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdFx0Zm9yIChtID0gbWF4SW50LCBqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdFx0bSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sXG5cdFx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvd1xuXHRcdFx0aGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuXHRcdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0XHRuID0gbTtcblxuXHRcdFx0Zm9yIChqID0gMDsgaiA8IGlucHV0TGVuZ3RoOyArK2opIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlID0gaW5wdXRbal07XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdFx0Ly8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJcblx0XHRcdFx0XHRmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0XHR0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRcdGlmIChxIDwgdCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHFNaW51c1QgPSBxIC0gdDtcblx0XHRcdFx0XHRcdGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0XHRzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCwgMCkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0XHRkZWx0YSA9IDA7XG5cdFx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQrK2RlbHRhO1xuXHRcdFx0KytuO1xuXG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQuam9pbignJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgdG8gVW5pY29kZS4gT25seSB0aGVcblx0ICogUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBkb21haW4gbmFtZSB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLiBpdCBkb2Vzbid0XG5cdCAqIG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvXG5cdCAqIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBQdW55Y29kZSBkb21haW4gbmFtZSB0byBjb252ZXJ0IHRvIFVuaWNvZGUuXG5cdCAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuXHQgKiBzdHJpbmcuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b1VuaWNvZGUoZG9tYWluKSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihkb21haW4sIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIHRvIFB1bnljb2RlLiBPbmx5IHRoZVxuXHQgKiBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLCBpLmUuIGl0IGRvZXNuJ3Rcblx0ICogbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW4gQVNDSUkuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSB0byBjb252ZXJ0LCBhcyBhIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lLlxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BU0NJSShkb21haW4pIHtcblx0XHRyZXR1cm4gbWFwRG9tYWluKGRvbWFpbiwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMi40Jyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cDovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0XHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0XHQgKiBAdHlwZSBPYmplY3Rcblx0XHQgKi9cblx0XHQndWNzMic6IHtcblx0XHRcdCdkZWNvZGUnOiB1Y3MyZGVjb2RlLFxuXHRcdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0XHR9LFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdFx0J3RvVW5pY29kZSc6IHRvVW5pY29kZVxuXHR9O1xuXG5cdC8qKiBFeHBvc2UgYHB1bnljb2RlYCAqL1xuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZSgncHVueWNvZGUnLCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBwdW55Y29kZTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiAhZnJlZUV4cG9ydHMubm9kZVR5cGUpIHtcblx0XHRpZiAoZnJlZU1vZHVsZSkgeyAvLyBpbiBOb2RlLmpzIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAoa2V5IGluIHB1bnljb2RlKSB7XG5cdFx0XHRcdHB1bnljb2RlLmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBwdW55Y29kZVtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWljbTkzYzJWeWFXWjVMMjV2WkdWZmJXOWtkV3hsY3k5d2RXNTVZMjlrWlM5d2RXNTVZMjlrWlM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUlTQm9kSFJ3T2k4dmJYUm9jeTVpWlM5d2RXNTVZMjlrWlNCMk1TNHlMalFnWW5rZ1FHMWhkR2hwWVhNZ0tpOWNianNvWm5WdVkzUnBiMjRvY205dmRDa2dlMXh1WEc1Y2RDOHFLaUJFWlhSbFkzUWdabkpsWlNCMllYSnBZV0pzWlhNZ0tpOWNibHgwZG1GeUlHWnlaV1ZGZUhCdmNuUnpJRDBnZEhsd1pXOW1JR1Y0Y0c5eWRITWdQVDBnSjI5aWFtVmpkQ2NnSmlZZ1pYaHdiM0owY3p0Y2JseDBkbUZ5SUdaeVpXVk5iMlIxYkdVZ1BTQjBlWEJsYjJZZ2JXOWtkV3hsSUQwOUlDZHZZbXBsWTNRbklDWW1JRzF2WkhWc1pTQW1KbHh1WEhSY2RHMXZaSFZzWlM1bGVIQnZjblJ6SUQwOUlHWnlaV1ZGZUhCdmNuUnpJQ1ltSUcxdlpIVnNaVHRjYmx4MGRtRnlJR1p5WldWSGJHOWlZV3dnUFNCMGVYQmxiMllnWjJ4dlltRnNJRDA5SUNkdlltcGxZM1FuSUNZbUlHZHNiMkpoYkR0Y2JseDBhV1lnS0daeVpXVkhiRzlpWVd3dVoyeHZZbUZzSUQwOVBTQm1jbVZsUjJ4dlltRnNJSHg4SUdaeVpXVkhiRzlpWVd3dWQybHVaRzkzSUQwOVBTQm1jbVZsUjJ4dlltRnNLU0I3WEc1Y2RGeDBjbTl2ZENBOUlHWnlaV1ZIYkc5aVlXdzdYRzVjZEgxY2JseHVYSFF2S2lwY2JseDBJQ29nVkdobElHQndkVzU1WTI5a1pXQWdiMkpxWldOMExseHVYSFFnS2lCQWJtRnRaU0J3ZFc1NVkyOWtaVnh1WEhRZ0tpQkFkSGx3WlNCUFltcGxZM1JjYmx4MElDb3ZYRzVjZEhaaGNpQndkVzU1WTI5a1pTeGNibHh1WEhRdktpb2dTR2xuYUdWemRDQndiM05wZEdsMlpTQnphV2R1WldRZ016SXRZbWwwSUdac2IyRjBJSFpoYkhWbElDb3ZYRzVjZEcxaGVFbHVkQ0E5SURJeE5EYzBPRE0yTkRjc0lDOHZJR0ZyWVM0Z01IZzNSa1pHUmtaR1JpQnZjaUF5WGpNeExURmNibHh1WEhRdktpb2dRbTl2ZEhOMGNtbHVaeUJ3WVhKaGJXVjBaWEp6SUNvdlhHNWNkR0poYzJVZ1BTQXpOaXhjYmx4MGRFMXBiaUE5SURFc1hHNWNkSFJOWVhnZ1BTQXlOaXhjYmx4MGMydGxkeUE5SURNNExGeHVYSFJrWVcxd0lEMGdOekF3TEZ4dVhIUnBibWwwYVdGc1FtbGhjeUE5SURjeUxGeHVYSFJwYm1sMGFXRnNUaUE5SURFeU9Dd2dMeThnTUhnNE1GeHVYSFJrWld4cGJXbDBaWElnUFNBbkxTY3NJQzh2SUNkY1hIZ3lSQ2RjYmx4dVhIUXZLaW9nVW1WbmRXeGhjaUJsZUhCeVpYTnphVzl1Y3lBcUwxeHVYSFJ5WldkbGVGQjFibmxqYjJSbElEMGdMMTU0YmkwdEx5eGNibHgwY21WblpYaE9iMjVCVTBOSlNTQTlJQzliWGlBdGZsMHZMQ0F2THlCMWJuQnlhVzUwWVdKc1pTQkJVME5KU1NCamFHRnljeUFySUc1dmJpMUJVME5KU1NCamFHRnljMXh1WEhSeVpXZGxlRk5sY0dGeVlYUnZjbk1nUFNBdlhGeDRNa1Y4WEZ4MU16QXdNbnhjWEhWR1JqQkZmRnhjZFVaR05qRXZaeXdnTHk4Z1VrWkRJRE0wT1RBZ2MyVndZWEpoZEc5eWMxeHVYRzVjZEM4cUtpQkZjbkp2Y2lCdFpYTnpZV2RsY3lBcUwxeHVYSFJsY25KdmNuTWdQU0I3WEc1Y2RGeDBKMjkyWlhKbWJHOTNKem9nSjA5MlpYSm1iRzkzT2lCcGJuQjFkQ0J1WldWa2N5QjNhV1JsY2lCcGJuUmxaMlZ5Y3lCMGJ5QndjbTlqWlhOekp5eGNibHgwWEhRbmJtOTBMV0poYzJsakp6b2dKMGxzYkdWbllXd2dhVzV3ZFhRZ1BqMGdNSGc0TUNBb2JtOTBJR0VnWW1GemFXTWdZMjlrWlNCd2IybHVkQ2tuTEZ4dVhIUmNkQ2RwYm5aaGJHbGtMV2x1Y0hWMEp6b2dKMGx1ZG1Gc2FXUWdhVzV3ZFhRblhHNWNkSDBzWEc1Y2JseDBMeW9xSUVOdmJuWmxibWxsYm1ObElITm9iM0owWTNWMGN5QXFMMXh1WEhSaVlYTmxUV2x1ZFhOVVRXbHVJRDBnWW1GelpTQXRJSFJOYVc0c1hHNWNkR1pzYjI5eUlEMGdUV0YwYUM1bWJHOXZjaXhjYmx4MGMzUnlhVzVuUm5KdmJVTm9ZWEpEYjJSbElEMGdVM1J5YVc1bkxtWnliMjFEYUdGeVEyOWtaU3hjYmx4dVhIUXZLaW9nVkdWdGNHOXlZWEo1SUhaaGNtbGhZbXhsSUNvdlhHNWNkR3RsZVR0Y2JseHVYSFF2S2kwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdEtpOWNibHh1WEhRdktpcGNibHgwSUNvZ1FTQm5aVzVsY21saklHVnljbTl5SUhWMGFXeHBkSGtnWm5WdVkzUnBiMjR1WEc1Y2RDQXFJRUJ3Y21sMllYUmxYRzVjZENBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCMGVYQmxJRlJvWlNCbGNuSnZjaUIwZVhCbExseHVYSFFnS2lCQWNtVjBkWEp1Y3lCN1JYSnliM0o5SUZSb2NtOTNjeUJoSUdCU1lXNW5aVVZ5Y205eVlDQjNhWFJvSUhSb1pTQmhjSEJzYVdOaFlteGxJR1Z5Y205eUlHMWxjM05oWjJVdVhHNWNkQ0FxTDF4dVhIUm1kVzVqZEdsdmJpQmxjbkp2Y2loMGVYQmxLU0I3WEc1Y2RGeDBkR2h5YjNjZ1VtRnVaMlZGY25KdmNpaGxjbkp2Y25OYmRIbHdaVjBwTzF4dVhIUjlYRzVjYmx4MEx5b3FYRzVjZENBcUlFRWdaMlZ1WlhKcFl5QmdRWEp5WVhramJXRndZQ0IxZEdsc2FYUjVJR1oxYm1OMGFXOXVMbHh1WEhRZ0tpQkFjSEpwZG1GMFpWeHVYSFFnS2lCQWNHRnlZVzBnZTBGeWNtRjVmU0JoY25KaGVTQlVhR1VnWVhKeVlYa2dkRzhnYVhSbGNtRjBaU0J2ZG1WeUxseHVYSFFnS2lCQWNHRnlZVzBnZTBaMWJtTjBhVzl1ZlNCallXeHNZbUZqYXlCVWFHVWdablZ1WTNScGIyNGdkR2hoZENCblpYUnpJR05oYkd4bFpDQm1iM0lnWlhabGNua2dZWEp5WVhsY2JseDBJQ29nYVhSbGJTNWNibHgwSUNvZ1FISmxkSFZ5Ym5NZ2UwRnljbUY1ZlNCQklHNWxkeUJoY25KaGVTQnZaaUIyWVd4MVpYTWdjbVYwZFhKdVpXUWdZbmtnZEdobElHTmhiR3hpWVdOcklHWjFibU4wYVc5dUxseHVYSFFnS2k5Y2JseDBablZ1WTNScGIyNGdiV0Z3S0dGeWNtRjVMQ0JtYmlrZ2UxeHVYSFJjZEhaaGNpQnNaVzVuZEdnZ1BTQmhjbkpoZVM1c1pXNW5kR2c3WEc1Y2RGeDBkMmhwYkdVZ0tHeGxibWQwYUMwdEtTQjdYRzVjZEZ4MFhIUmhjbkpoZVZ0c1pXNW5kR2hkSUQwZ1ptNG9ZWEp5WVhsYmJHVnVaM1JvWFNrN1hHNWNkRngwZlZ4dVhIUmNkSEpsZEhWeWJpQmhjbkpoZVR0Y2JseDBmVnh1WEc1Y2RDOHFLbHh1WEhRZ0tpQkJJSE5wYlhCc1pTQmdRWEp5WVhramJXRndZQzFzYVd0bElIZHlZWEJ3WlhJZ2RHOGdkMjl5YXlCM2FYUm9JR1J2YldGcGJpQnVZVzFsSUhOMGNtbHVaM011WEc1Y2RDQXFJRUJ3Y21sMllYUmxYRzVjZENBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCa2IyMWhhVzRnVkdobElHUnZiV0ZwYmlCdVlXMWxMbHh1WEhRZ0tpQkFjR0Z5WVcwZ2UwWjFibU4wYVc5dWZTQmpZV3hzWW1GamF5QlVhR1VnWm5WdVkzUnBiMjRnZEdoaGRDQm5aWFJ6SUdOaGJHeGxaQ0JtYjNJZ1pYWmxjbmxjYmx4MElDb2dZMmhoY21GamRHVnlMbHh1WEhRZ0tpQkFjbVYwZFhKdWN5QjdRWEp5WVhsOUlFRWdibVYzSUhOMGNtbHVaeUJ2WmlCamFHRnlZV04wWlhKeklISmxkSFZ5Ym1Wa0lHSjVJSFJvWlNCallXeHNZbUZqYTF4dVhIUWdLaUJtZFc1amRHbHZiaTVjYmx4MElDb3ZYRzVjZEdaMWJtTjBhVzl1SUcxaGNFUnZiV0ZwYmloemRISnBibWNzSUdadUtTQjdYRzVjZEZ4MGNtVjBkWEp1SUcxaGNDaHpkSEpwYm1jdWMzQnNhWFFvY21WblpYaFRaWEJoY21GMGIzSnpLU3dnWm00cExtcHZhVzRvSnk0bktUdGNibHgwZlZ4dVhHNWNkQzhxS2x4dVhIUWdLaUJEY21WaGRHVnpJR0Z1SUdGeWNtRjVJR052Ym5SaGFXNXBibWNnZEdobElHNTFiV1Z5YVdNZ1kyOWtaU0J3YjJsdWRITWdiMllnWldGamFDQlZibWxqYjJSbFhHNWNkQ0FxSUdOb1lYSmhZM1JsY2lCcGJpQjBhR1VnYzNSeWFXNW5MaUJYYUdsc1pTQktZWFpoVTJOeWFYQjBJSFZ6WlhNZ1ZVTlRMVElnYVc1MFpYSnVZV3hzZVN4Y2JseDBJQ29nZEdocGN5Qm1kVzVqZEdsdmJpQjNhV3hzSUdOdmJuWmxjblFnWVNCd1lXbHlJRzltSUhOMWNuSnZaMkYwWlNCb1lXeDJaWE1nS0dWaFkyZ2diMllnZDJocFkyaGNibHgwSUNvZ1ZVTlRMVElnWlhod2IzTmxjeUJoY3lCelpYQmhjbUYwWlNCamFHRnlZV04wWlhKektTQnBiblJ2SUdFZ2MybHVaMnhsSUdOdlpHVWdjRzlwYm5Rc1hHNWNkQ0FxSUcxaGRHTm9hVzVuSUZWVVJpMHhOaTVjYmx4MElDb2dRSE5sWlNCZ2NIVnVlV052WkdVdWRXTnpNaTVsYm1OdlpHVmdYRzVjZENBcUlFQnpaV1VnUEdoMGRIQTZMeTl0WVhSb2FXRnpZbmx1Wlc1ekxtSmxMMjV2ZEdWekwycGhkbUZ6WTNKcGNIUXRaVzVqYjJScGJtYytYRzVjZENBcUlFQnRaVzFpWlhKUFppQndkVzU1WTI5a1pTNTFZM015WEc1Y2RDQXFJRUJ1WVcxbElHUmxZMjlrWlZ4dVhIUWdLaUJBY0dGeVlXMGdlMU4wY21sdVozMGdjM1J5YVc1bklGUm9aU0JWYm1samIyUmxJR2x1Y0hWMElITjBjbWx1WnlBb1ZVTlRMVElwTGx4dVhIUWdLaUJBY21WMGRYSnVjeUI3UVhKeVlYbDlJRlJvWlNCdVpYY2dZWEp5WVhrZ2IyWWdZMjlrWlNCd2IybHVkSE11WEc1Y2RDQXFMMXh1WEhSbWRXNWpkR2x2YmlCMVkzTXlaR1ZqYjJSbEtITjBjbWx1WnlrZ2UxeHVYSFJjZEhaaGNpQnZkWFJ3ZFhRZ1BTQmJYU3hjYmx4MFhIUWdJQ0FnWTI5MWJuUmxjaUE5SURBc1hHNWNkRngwSUNBZ0lHeGxibWQwYUNBOUlITjBjbWx1Wnk1c1pXNW5kR2dzWEc1Y2RGeDBJQ0FnSUhaaGJIVmxMRnh1WEhSY2RDQWdJQ0JsZUhSeVlUdGNibHgwWEhSM2FHbHNaU0FvWTI5MWJuUmxjaUE4SUd4bGJtZDBhQ2tnZTF4dVhIUmNkRngwZG1Gc2RXVWdQU0J6ZEhKcGJtY3VZMmhoY2tOdlpHVkJkQ2hqYjNWdWRHVnlLeXNwTzF4dVhIUmNkRngwYVdZZ0tIWmhiSFZsSUQ0OUlEQjRSRGd3TUNBbUppQjJZV3gxWlNBOFBTQXdlRVJDUmtZZ0ppWWdZMjkxYm5SbGNpQThJR3hsYm1kMGFDa2dlMXh1WEhSY2RGeDBYSFF2THlCb2FXZG9JSE4xY25KdloyRjBaU3dnWVc1a0lIUm9aWEpsSUdseklHRWdibVY0ZENCamFHRnlZV04wWlhKY2JseDBYSFJjZEZ4MFpYaDBjbUVnUFNCemRISnBibWN1WTJoaGNrTnZaR1ZCZENoamIzVnVkR1Z5S3lzcE8xeHVYSFJjZEZ4MFhIUnBaaUFvS0dWNGRISmhJQ1lnTUhoR1F6QXdLU0E5UFNBd2VFUkRNREFwSUhzZ0x5OGdiRzkzSUhOMWNuSnZaMkYwWlZ4dVhIUmNkRngwWEhSY2RHOTFkSEIxZEM1d2RYTm9LQ2dvZG1Gc2RXVWdKaUF3ZUROR1Jpa2dQRHdnTVRBcElDc2dLR1Y0ZEhKaElDWWdNSGd6UmtZcElDc2dNSGd4TURBd01DazdYRzVjZEZ4MFhIUmNkSDBnWld4elpTQjdYRzVjZEZ4MFhIUmNkRngwTHk4Z2RXNXRZWFJqYUdWa0lITjFjbkp2WjJGMFpUc2diMjVzZVNCaGNIQmxibVFnZEdocGN5QmpiMlJsSUhWdWFYUXNJR2x1SUdOaGMyVWdkR2hsSUc1bGVIUmNibHgwWEhSY2RGeDBYSFF2THlCamIyUmxJSFZ1YVhRZ2FYTWdkR2hsSUdocFoyZ2djM1Z5Y205bllYUmxJRzltSUdFZ2MzVnljbTluWVhSbElIQmhhWEpjYmx4MFhIUmNkRngwWEhSdmRYUndkWFF1Y0hWemFDaDJZV3gxWlNrN1hHNWNkRngwWEhSY2RGeDBZMjkxYm5SbGNpMHRPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFI5SUdWc2MyVWdlMXh1WEhSY2RGeDBYSFJ2ZFhSd2RYUXVjSFZ6YUNoMllXeDFaU2s3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBmVnh1WEhSY2RISmxkSFZ5YmlCdmRYUndkWFE3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1EzSmxZWFJsY3lCaElITjBjbWx1WnlCaVlYTmxaQ0J2YmlCaGJpQmhjbkpoZVNCdlppQnVkVzFsY21saklHTnZaR1VnY0c5cGJuUnpMbHh1WEhRZ0tpQkFjMlZsSUdCd2RXNTVZMjlrWlM1MVkzTXlMbVJsWTI5a1pXQmNibHgwSUNvZ1FHMWxiV0psY2s5bUlIQjFibmxqYjJSbExuVmpjekpjYmx4MElDb2dRRzVoYldVZ1pXNWpiMlJsWEc1Y2RDQXFJRUJ3WVhKaGJTQjdRWEp5WVhsOUlHTnZaR1ZRYjJsdWRITWdWR2hsSUdGeWNtRjVJRzltSUc1MWJXVnlhV01nWTI5a1pTQndiMmx1ZEhNdVhHNWNkQ0FxSUVCeVpYUjFjbTV6SUh0VGRISnBibWQ5SUZSb1pTQnVaWGNnVlc1cFkyOWtaU0J6ZEhKcGJtY2dLRlZEVXkweUtTNWNibHgwSUNvdlhHNWNkR1oxYm1OMGFXOXVJSFZqY3pKbGJtTnZaR1VvWVhKeVlYa3BJSHRjYmx4MFhIUnlaWFIxY200Z2JXRndLR0Z5Y21GNUxDQm1kVzVqZEdsdmJpaDJZV3gxWlNrZ2UxeHVYSFJjZEZ4MGRtRnlJRzkxZEhCMWRDQTlJQ2NuTzF4dVhIUmNkRngwYVdZZ0tIWmhiSFZsSUQ0Z01IaEdSa1pHS1NCN1hHNWNkRngwWEhSY2RIWmhiSFZsSUMwOUlEQjRNVEF3TURBN1hHNWNkRngwWEhSY2RHOTFkSEIxZENBclBTQnpkSEpwYm1kR2NtOXRRMmhoY2tOdlpHVW9kbUZzZFdVZ1BqNCtJREV3SUNZZ01IZ3pSa1lnZkNBd2VFUTRNREFwTzF4dVhIUmNkRngwWEhSMllXeDFaU0E5SURCNFJFTXdNQ0I4SUhaaGJIVmxJQ1lnTUhnelJrWTdYRzVjZEZ4MFhIUjlYRzVjZEZ4MFhIUnZkWFJ3ZFhRZ0t6MGdjM1J5YVc1blJuSnZiVU5vWVhKRGIyUmxLSFpoYkhWbEtUdGNibHgwWEhSY2RISmxkSFZ5YmlCdmRYUndkWFE3WEc1Y2RGeDBmU2t1YW05cGJpZ25KeWs3WEc1Y2RIMWNibHh1WEhRdktpcGNibHgwSUNvZ1EyOXVkbVZ5ZEhNZ1lTQmlZWE5wWXlCamIyUmxJSEJ2YVc1MElHbHVkRzhnWVNCa2FXZHBkQzlwYm5SbFoyVnlMbHh1WEhRZ0tpQkFjMlZsSUdCa2FXZHBkRlJ2UW1GemFXTW9LV0JjYmx4MElDb2dRSEJ5YVhaaGRHVmNibHgwSUNvZ1FIQmhjbUZ0SUh0T2RXMWlaWEo5SUdOdlpHVlFiMmx1ZENCVWFHVWdZbUZ6YVdNZ2JuVnRaWEpwWXlCamIyUmxJSEJ2YVc1MElIWmhiSFZsTGx4dVhIUWdLaUJBY21WMGRYSnVjeUI3VG5WdFltVnlmU0JVYUdVZ2JuVnRaWEpwWXlCMllXeDFaU0J2WmlCaElHSmhjMmxqSUdOdlpHVWdjRzlwYm5RZ0tHWnZjaUIxYzJVZ2FXNWNibHgwSUNvZ2NtVndjbVZ6Wlc1MGFXNW5JR2x1ZEdWblpYSnpLU0JwYmlCMGFHVWdjbUZ1WjJVZ1lEQmdJSFJ2SUdCaVlYTmxJQzBnTVdBc0lHOXlJR0JpWVhObFlDQnBabHh1WEhRZ0tpQjBhR1VnWTI5a1pTQndiMmx1ZENCa2IyVnpJRzV2ZENCeVpYQnlaWE5sYm5RZ1lTQjJZV3gxWlM1Y2JseDBJQ292WEc1Y2RHWjFibU4wYVc5dUlHSmhjMmxqVkc5RWFXZHBkQ2hqYjJSbFVHOXBiblFwSUh0Y2JseDBYSFJwWmlBb1kyOWtaVkJ2YVc1MElDMGdORGdnUENBeE1Da2dlMXh1WEhSY2RGeDBjbVYwZFhKdUlHTnZaR1ZRYjJsdWRDQXRJREl5TzF4dVhIUmNkSDFjYmx4MFhIUnBaaUFvWTI5a1pWQnZhVzUwSUMwZ05qVWdQQ0F5TmlrZ2UxeHVYSFJjZEZ4MGNtVjBkWEp1SUdOdlpHVlFiMmx1ZENBdElEWTFPMXh1WEhSY2RIMWNibHgwWEhScFppQW9ZMjlrWlZCdmFXNTBJQzBnT1RjZ1BDQXlOaWtnZTF4dVhIUmNkRngwY21WMGRYSnVJR052WkdWUWIybHVkQ0F0SURrM08xeHVYSFJjZEgxY2JseDBYSFJ5WlhSMWNtNGdZbUZ6WlR0Y2JseDBmVnh1WEc1Y2RDOHFLbHh1WEhRZ0tpQkRiMjUyWlhKMGN5QmhJR1JwWjJsMEwybHVkR1ZuWlhJZ2FXNTBieUJoSUdKaGMybGpJR052WkdVZ2NHOXBiblF1WEc1Y2RDQXFJRUJ6WldVZ1lHSmhjMmxqVkc5RWFXZHBkQ2dwWUZ4dVhIUWdLaUJBY0hKcGRtRjBaVnh1WEhRZ0tpQkFjR0Z5WVcwZ2UwNTFiV0psY24wZ1pHbG5hWFFnVkdobElHNTFiV1Z5YVdNZ2RtRnNkV1VnYjJZZ1lTQmlZWE5wWXlCamIyUmxJSEJ2YVc1MExseHVYSFFnS2lCQWNtVjBkWEp1Y3lCN1RuVnRZbVZ5ZlNCVWFHVWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRDQjNhRzl6WlNCMllXeDFaU0FvZDJobGJpQjFjMlZrSUdadmNseHVYSFFnS2lCeVpYQnlaWE5sYm5ScGJtY2dhVzUwWldkbGNuTXBJR2x6SUdCa2FXZHBkR0FzSUhkb2FXTm9JRzVsWldSeklIUnZJR0psSUdsdUlIUm9aU0J5WVc1blpWeHVYSFFnS2lCZ01HQWdkRzhnWUdKaGMyVWdMU0F4WUM0Z1NXWWdZR1pzWVdkZ0lHbHpJRzV2YmkxNlpYSnZMQ0IwYUdVZ2RYQndaWEpqWVhObElHWnZjbTBnYVhOY2JseDBJQ29nZFhObFpEc2daV3h6WlN3Z2RHaGxJR3h2ZDJWeVkyRnpaU0JtYjNKdElHbHpJSFZ6WldRdUlGUm9aU0JpWldoaGRtbHZjaUJwY3lCMWJtUmxabWx1WldSY2JseDBJQ29nYVdZZ1lHWnNZV2RnSUdseklHNXZiaTE2WlhKdklHRnVaQ0JnWkdsbmFYUmdJR2hoY3lCdWJ5QjFjSEJsY21OaGMyVWdabTl5YlM1Y2JseDBJQ292WEc1Y2RHWjFibU4wYVc5dUlHUnBaMmwwVkc5Q1lYTnBZeWhrYVdkcGRDd2dabXhoWnlrZ2UxeHVYSFJjZEM4dklDQXdMaTR5TlNCdFlYQWdkRzhnUVZORFNVa2dZUzR1ZWlCdmNpQkJMaTVhWEc1Y2RGeDBMeThnTWpZdUxqTTFJRzFoY0NCMGJ5QkJVME5KU1NBd0xpNDVYRzVjZEZ4MGNtVjBkWEp1SUdScFoybDBJQ3NnTWpJZ0t5QTNOU0FxSUNoa2FXZHBkQ0E4SURJMktTQXRJQ2dvWm14aFp5QWhQU0F3S1NBOFBDQTFLVHRjYmx4MGZWeHVYRzVjZEM4cUtseHVYSFFnS2lCQ2FXRnpJR0ZrWVhCMFlYUnBiMjRnWm5WdVkzUnBiMjRnWVhNZ2NHVnlJSE5sWTNScGIyNGdNeTQwSUc5bUlGSkdReUF6TkRreUxseHVYSFFnS2lCb2RIUndPaTh2ZEc5dmJITXVhV1YwWmk1dmNtY3ZhSFJ0YkM5eVptTXpORGt5STNObFkzUnBiMjR0TXk0MFhHNWNkQ0FxSUVCd2NtbDJZWFJsWEc1Y2RDQXFMMXh1WEhSbWRXNWpkR2x2YmlCaFpHRndkQ2hrWld4MFlTd2diblZ0VUc5cGJuUnpMQ0JtYVhKemRGUnBiV1VwSUh0Y2JseDBYSFIyWVhJZ2F5QTlJREE3WEc1Y2RGeDBaR1ZzZEdFZ1BTQm1hWEp6ZEZScGJXVWdQeUJtYkc5dmNpaGtaV3gwWVNBdklHUmhiWEFwSURvZ1pHVnNkR0VnUGo0Z01UdGNibHgwWEhSa1pXeDBZU0FyUFNCbWJHOXZjaWhrWld4MFlTQXZJRzUxYlZCdmFXNTBjeWs3WEc1Y2RGeDBabTl5SUNndktpQnVieUJwYm1sMGFXRnNhWHBoZEdsdmJpQXFMenNnWkdWc2RHRWdQaUJpWVhObFRXbHVkWE5VVFdsdUlDb2dkRTFoZUNBK1BpQXhPeUJySUNzOUlHSmhjMlVwSUh0Y2JseDBYSFJjZEdSbGJIUmhJRDBnWm14dmIzSW9aR1ZzZEdFZ0x5QmlZWE5sVFdsdWRYTlVUV2x1S1R0Y2JseDBYSFI5WEc1Y2RGeDBjbVYwZFhKdUlHWnNiMjl5S0dzZ0t5QW9ZbUZ6WlUxcGJuVnpWRTFwYmlBcklERXBJQ29nWkdWc2RHRWdMeUFvWkdWc2RHRWdLeUJ6YTJWM0tTazdYRzVjZEgxY2JseHVYSFF2S2lwY2JseDBJQ29nUTI5dWRtVnlkSE1nWVNCUWRXNTVZMjlrWlNCemRISnBibWNnYjJZZ1FWTkRTVWt0YjI1c2VTQnplVzFpYjJ4eklIUnZJR0VnYzNSeWFXNW5JRzltSUZWdWFXTnZaR1ZjYmx4MElDb2djM2x0WW05c2N5NWNibHgwSUNvZ1FHMWxiV0psY2s5bUlIQjFibmxqYjJSbFhHNWNkQ0FxSUVCd1lYSmhiU0I3VTNSeWFXNW5mU0JwYm5CMWRDQlVhR1VnVUhWdWVXTnZaR1VnYzNSeWFXNW5JRzltSUVGVFEwbEpMVzl1YkhrZ2MzbHRZbTlzY3k1Y2JseDBJQ29nUUhKbGRIVnlibk1nZTFOMGNtbHVaMzBnVkdobElISmxjM1ZzZEdsdVp5QnpkSEpwYm1jZ2IyWWdWVzVwWTI5a1pTQnplVzFpYjJ4ekxseHVYSFFnS2k5Y2JseDBablZ1WTNScGIyNGdaR1ZqYjJSbEtHbHVjSFYwS1NCN1hHNWNkRngwTHk4Z1JHOXVKM1FnZFhObElGVkRVeTB5WEc1Y2RGeDBkbUZ5SUc5MWRIQjFkQ0E5SUZ0ZExGeHVYSFJjZENBZ0lDQnBibkIxZEV4bGJtZDBhQ0E5SUdsdWNIVjBMbXhsYm1kMGFDeGNibHgwWEhRZ0lDQWdiM1YwTEZ4dVhIUmNkQ0FnSUNCcElEMGdNQ3hjYmx4MFhIUWdJQ0FnYmlBOUlHbHVhWFJwWVd4T0xGeHVYSFJjZENBZ0lDQmlhV0Z6SUQwZ2FXNXBkR2xoYkVKcFlYTXNYRzVjZEZ4MElDQWdJR0poYzJsakxGeHVYSFJjZENBZ0lDQnFMRnh1WEhSY2RDQWdJQ0JwYm1SbGVDeGNibHgwWEhRZ0lDQWdiMnhrYVN4Y2JseDBYSFFnSUNBZ2R5eGNibHgwWEhRZ0lDQWdheXhjYmx4MFhIUWdJQ0FnWkdsbmFYUXNYRzVjZEZ4MElDQWdJSFFzWEc1Y2RGeDBJQ0FnSUM4cUtpQkRZV05vWldRZ1kyRnNZM1ZzWVhScGIyNGdjbVZ6ZFd4MGN5QXFMMXh1WEhSY2RDQWdJQ0JpWVhObFRXbHVkWE5VTzF4dVhHNWNkRngwTHk4Z1NHRnVaR3hsSUhSb1pTQmlZWE5wWXlCamIyUmxJSEJ2YVc1MGN6b2diR1YwSUdCaVlYTnBZMkFnWW1VZ2RHaGxJRzUxYldKbGNpQnZaaUJwYm5CMWRDQmpiMlJsWEc1Y2RGeDBMeThnY0c5cGJuUnpJR0psWm05eVpTQjBhR1VnYkdGemRDQmtaV3hwYldsMFpYSXNJRzl5SUdBd1lDQnBaaUIwYUdWeVpTQnBjeUJ1YjI1bExDQjBhR1Z1SUdOdmNIbGNibHgwWEhRdkx5QjBhR1VnWm1seWMzUWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRITWdkRzhnZEdobElHOTFkSEIxZEM1Y2JseHVYSFJjZEdKaGMybGpJRDBnYVc1d2RYUXViR0Z6ZEVsdVpHVjRUMllvWkdWc2FXMXBkR1Z5S1R0Y2JseDBYSFJwWmlBb1ltRnphV01nUENBd0tTQjdYRzVjZEZ4MFhIUmlZWE5wWXlBOUlEQTdYRzVjZEZ4MGZWeHVYRzVjZEZ4MFptOXlJQ2hxSUQwZ01Ec2dhaUE4SUdKaGMybGpPeUFySzJvcElIdGNibHgwWEhSY2RDOHZJR2xtSUdsMEozTWdibTkwSUdFZ1ltRnphV01nWTI5a1pTQndiMmx1ZEZ4dVhIUmNkRngwYVdZZ0tHbHVjSFYwTG1Ob1lYSkRiMlJsUVhRb2Fpa2dQajBnTUhnNE1Da2dlMXh1WEhSY2RGeDBYSFJsY25KdmNpZ25ibTkwTFdKaGMybGpKeWs3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBYSFJ2ZFhSd2RYUXVjSFZ6YUNocGJuQjFkQzVqYUdGeVEyOWtaVUYwS0dvcEtUdGNibHgwWEhSOVhHNWNibHgwWEhRdkx5Qk5ZV2x1SUdSbFkyOWthVzVuSUd4dmIzQTZJSE4wWVhKMElHcDFjM1FnWVdaMFpYSWdkR2hsSUd4aGMzUWdaR1ZzYVcxcGRHVnlJR2xtSUdGdWVTQmlZWE5wWXlCamIyUmxYRzVjZEZ4MEx5OGdjRzlwYm5SeklIZGxjbVVnWTI5d2FXVmtPeUJ6ZEdGeWRDQmhkQ0IwYUdVZ1ltVm5hVzV1YVc1bklHOTBhR1Z5ZDJselpTNWNibHh1WEhSY2RHWnZjaUFvYVc1a1pYZ2dQU0JpWVhOcFl5QStJREFnUHlCaVlYTnBZeUFySURFZ09pQXdPeUJwYm1SbGVDQThJR2x1Y0hWMFRHVnVaM1JvT3lBdktpQnVieUJtYVc1aGJDQmxlSEJ5WlhOemFXOXVJQ292S1NCN1hHNWNibHgwWEhSY2RDOHZJR0JwYm1SbGVHQWdhWE1nZEdobElHbHVaR1Y0SUc5bUlIUm9aU0J1WlhoMElHTm9ZWEpoWTNSbGNpQjBieUJpWlNCamIyNXpkVzFsWkM1Y2JseDBYSFJjZEM4dklFUmxZMjlrWlNCaElHZGxibVZ5WVd4cGVtVmtJSFpoY21saFlteGxMV3hsYm1kMGFDQnBiblJsWjJWeUlHbHVkRzhnWUdSbGJIUmhZQ3hjYmx4MFhIUmNkQzh2SUhkb2FXTm9JR2RsZEhNZ1lXUmtaV1FnZEc4Z1lHbGdMaUJVYUdVZ2IzWmxjbVpzYjNjZ1kyaGxZMnRwYm1jZ2FYTWdaV0Z6YVdWeVhHNWNkRngwWEhRdkx5QnBaaUIzWlNCcGJtTnlaV0Z6WlNCZ2FXQWdZWE1nZDJVZ1oyOHNJSFJvWlc0Z2MzVmlkSEpoWTNRZ2IyWm1JR2wwY3lCemRHRnlkR2x1WjF4dVhIUmNkRngwTHk4Z2RtRnNkV1VnWVhRZ2RHaGxJR1Z1WkNCMGJ5QnZZblJoYVc0Z1lHUmxiSFJoWUM1Y2JseDBYSFJjZEdadmNpQW9iMnhrYVNBOUlHa3NJSGNnUFNBeExDQnJJRDBnWW1GelpUc2dMeW9nYm04Z1kyOXVaR2wwYVc5dUlDb3ZPeUJySUNzOUlHSmhjMlVwSUh0Y2JseHVYSFJjZEZ4MFhIUnBaaUFvYVc1a1pYZ2dQajBnYVc1d2RYUk1aVzVuZEdncElIdGNibHgwWEhSY2RGeDBYSFJsY25KdmNpZ25hVzUyWVd4cFpDMXBibkIxZENjcE8xeHVYSFJjZEZ4MFhIUjlYRzVjYmx4MFhIUmNkRngwWkdsbmFYUWdQU0JpWVhOcFkxUnZSR2xuYVhRb2FXNXdkWFF1WTJoaGNrTnZaR1ZCZENocGJtUmxlQ3NyS1NrN1hHNWNibHgwWEhSY2RGeDBhV1lnS0dScFoybDBJRDQ5SUdKaGMyVWdmSHdnWkdsbmFYUWdQaUJtYkc5dmNpZ29iV0Y0U1c1MElDMGdhU2tnTHlCM0tTa2dlMXh1WEhSY2RGeDBYSFJjZEdWeWNtOXlLQ2R2ZG1WeVpteHZkeWNwTzF4dVhIUmNkRngwWEhSOVhHNWNibHgwWEhSY2RGeDBhU0FyUFNCa2FXZHBkQ0FxSUhjN1hHNWNkRngwWEhSY2RIUWdQU0JySUR3OUlHSnBZWE1nUHlCMFRXbHVJRG9nS0dzZ1BqMGdZbWxoY3lBcklIUk5ZWGdnUHlCMFRXRjRJRG9nYXlBdElHSnBZWE1wTzF4dVhHNWNkRngwWEhSY2RHbG1JQ2hrYVdkcGRDQThJSFFwSUh0Y2JseDBYSFJjZEZ4MFhIUmljbVZoYXp0Y2JseDBYSFJjZEZ4MGZWeHVYRzVjZEZ4MFhIUmNkR0poYzJWTmFXNTFjMVFnUFNCaVlYTmxJQzBnZER0Y2JseDBYSFJjZEZ4MGFXWWdLSGNnUGlCbWJHOXZjaWh0WVhoSmJuUWdMeUJpWVhObFRXbHVkWE5VS1NrZ2UxeHVYSFJjZEZ4MFhIUmNkR1Z5Y205eUtDZHZkbVZ5Wm14dmR5Y3BPMXh1WEhSY2RGeDBYSFI5WEc1Y2JseDBYSFJjZEZ4MGR5QXFQU0JpWVhObFRXbHVkWE5VTzF4dVhHNWNkRngwWEhSOVhHNWNibHgwWEhSY2RHOTFkQ0E5SUc5MWRIQjFkQzVzWlc1bmRHZ2dLeUF4TzF4dVhIUmNkRngwWW1saGN5QTlJR0ZrWVhCMEtHa2dMU0J2YkdScExDQnZkWFFzSUc5c1pHa2dQVDBnTUNrN1hHNWNibHgwWEhSY2RDOHZJR0JwWUNCM1lYTWdjM1Z3Y0c5elpXUWdkRzhnZDNKaGNDQmhjbTkxYm1RZ1puSnZiU0JnYjNWMFlDQjBieUJnTUdBc1hHNWNkRngwWEhRdkx5QnBibU55WlcxbGJuUnBibWNnWUc1Z0lHVmhZMmdnZEdsdFpTd2djMjhnZDJVbmJHd2dabWw0SUhSb1lYUWdibTkzT2x4dVhIUmNkRngwYVdZZ0tHWnNiMjl5S0drZ0x5QnZkWFFwSUQ0Z2JXRjRTVzUwSUMwZ2Jpa2dlMXh1WEhSY2RGeDBYSFJsY25KdmNpZ25iM1psY21ac2IzY25LVHRjYmx4MFhIUmNkSDFjYmx4dVhIUmNkRngwYmlBclBTQm1iRzl2Y2locElDOGdiM1YwS1R0Y2JseDBYSFJjZEdrZ0pUMGdiM1YwTzF4dVhHNWNkRngwWEhRdkx5Qkpibk5sY25RZ1lHNWdJR0YwSUhCdmMybDBhVzl1SUdCcFlDQnZaaUIwYUdVZ2IzVjBjSFYwWEc1Y2RGeDBYSFJ2ZFhSd2RYUXVjM0JzYVdObEtHa3JLeXdnTUN3Z2JpazdYRzVjYmx4MFhIUjlYRzVjYmx4MFhIUnlaWFIxY200Z2RXTnpNbVZ1WTI5a1pTaHZkWFJ3ZFhRcE8xeHVYSFI5WEc1Y2JseDBMeW9xWEc1Y2RDQXFJRU52Ym5abGNuUnpJR0VnYzNSeWFXNW5JRzltSUZWdWFXTnZaR1VnYzNsdFltOXNjeUIwYnlCaElGQjFibmxqYjJSbElITjBjbWx1WnlCdlppQkJVME5KU1MxdmJteDVYRzVjZENBcUlITjViV0p2YkhNdVhHNWNkQ0FxSUVCdFpXMWlaWEpQWmlCd2RXNTVZMjlrWlZ4dVhIUWdLaUJBY0dGeVlXMGdlMU4wY21sdVozMGdhVzV3ZFhRZ1ZHaGxJSE4wY21sdVp5QnZaaUJWYm1samIyUmxJSE41YldKdmJITXVYRzVjZENBcUlFQnlaWFIxY201eklIdFRkSEpwYm1kOUlGUm9aU0J5WlhOMWJIUnBibWNnVUhWdWVXTnZaR1VnYzNSeWFXNW5JRzltSUVGVFEwbEpMVzl1YkhrZ2MzbHRZbTlzY3k1Y2JseDBJQ292WEc1Y2RHWjFibU4wYVc5dUlHVnVZMjlrWlNocGJuQjFkQ2tnZTF4dVhIUmNkSFpoY2lCdUxGeHVYSFJjZENBZ0lDQmtaV3gwWVN4Y2JseDBYSFFnSUNBZ2FHRnVaR3hsWkVOUVEyOTFiblFzWEc1Y2RGeDBJQ0FnSUdKaGMybGpUR1Z1WjNSb0xGeHVYSFJjZENBZ0lDQmlhV0Z6TEZ4dVhIUmNkQ0FnSUNCcUxGeHVYSFJjZENBZ0lDQnRMRnh1WEhSY2RDQWdJQ0J4TEZ4dVhIUmNkQ0FnSUNCckxGeHVYSFJjZENBZ0lDQjBMRnh1WEhSY2RDQWdJQ0JqZFhKeVpXNTBWbUZzZFdVc1hHNWNkRngwSUNBZ0lHOTFkSEIxZENBOUlGdGRMRnh1WEhSY2RDQWdJQ0F2S2lvZ1lHbHVjSFYwVEdWdVozUm9ZQ0IzYVd4c0lHaHZiR1FnZEdobElHNTFiV0psY2lCdlppQmpiMlJsSUhCdmFXNTBjeUJwYmlCZ2FXNXdkWFJnTGlBcUwxeHVYSFJjZENBZ0lDQnBibkIxZEV4bGJtZDBhQ3hjYmx4MFhIUWdJQ0FnTHlvcUlFTmhZMmhsWkNCallXeGpkV3hoZEdsdmJpQnlaWE4xYkhSeklDb3ZYRzVjZEZ4MElDQWdJR2hoYm1Sc1pXUkRVRU52ZFc1MFVHeDFjMDl1WlN4Y2JseDBYSFFnSUNBZ1ltRnpaVTFwYm5WelZDeGNibHgwWEhRZ0lDQWdjVTFwYm5WelZEdGNibHh1WEhSY2RDOHZJRU52Ym5abGNuUWdkR2hsSUdsdWNIVjBJR2x1SUZWRFV5MHlJSFJ2SUZWdWFXTnZaR1ZjYmx4MFhIUnBibkIxZENBOUlIVmpjekprWldOdlpHVW9hVzV3ZFhRcE8xeHVYRzVjZEZ4MEx5OGdRMkZqYUdVZ2RHaGxJR3hsYm1kMGFGeHVYSFJjZEdsdWNIVjBUR1Z1WjNSb0lEMGdhVzV3ZFhRdWJHVnVaM1JvTzF4dVhHNWNkRngwTHk4Z1NXNXBkR2xoYkdsNlpTQjBhR1VnYzNSaGRHVmNibHgwWEhSdUlEMGdhVzVwZEdsaGJFNDdYRzVjZEZ4MFpHVnNkR0VnUFNBd08xeHVYSFJjZEdKcFlYTWdQU0JwYm1sMGFXRnNRbWxoY3p0Y2JseHVYSFJjZEM4dklFaGhibVJzWlNCMGFHVWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRITmNibHgwWEhSbWIzSWdLR29nUFNBd095QnFJRHdnYVc1d2RYUk1aVzVuZEdnN0lDc3JhaWtnZTF4dVhIUmNkRngwWTNWeWNtVnVkRlpoYkhWbElEMGdhVzV3ZFhSYmFsMDdYRzVjZEZ4MFhIUnBaaUFvWTNWeWNtVnVkRlpoYkhWbElEd2dNSGc0TUNrZ2UxeHVYSFJjZEZ4MFhIUnZkWFJ3ZFhRdWNIVnphQ2h6ZEhKcGJtZEdjbTl0UTJoaGNrTnZaR1VvWTNWeWNtVnVkRlpoYkhWbEtTazdYRzVjZEZ4MFhIUjlYRzVjZEZ4MGZWeHVYRzVjZEZ4MGFHRnVaR3hsWkVOUVEyOTFiblFnUFNCaVlYTnBZMHhsYm1kMGFDQTlJRzkxZEhCMWRDNXNaVzVuZEdnN1hHNWNibHgwWEhRdkx5QmdhR0Z1Wkd4bFpFTlFRMjkxYm5SZ0lHbHpJSFJvWlNCdWRXMWlaWElnYjJZZ1kyOWtaU0J3YjJsdWRITWdkR2hoZENCb1lYWmxJR0psWlc0Z2FHRnVaR3hsWkR0Y2JseDBYSFF2THlCZ1ltRnphV05NWlc1bmRHaGdJR2x6SUhSb1pTQnVkVzFpWlhJZ2IyWWdZbUZ6YVdNZ1kyOWtaU0J3YjJsdWRITXVYRzVjYmx4MFhIUXZMeUJHYVc1cGMyZ2dkR2hsSUdKaGMybGpJSE4wY21sdVp5QXRJR2xtSUdsMElHbHpJRzV2ZENCbGJYQjBlU0F0SUhkcGRHZ2dZU0JrWld4cGJXbDBaWEpjYmx4MFhIUnBaaUFvWW1GemFXTk1aVzVuZEdncElIdGNibHgwWEhSY2RHOTFkSEIxZEM1d2RYTm9LR1JsYkdsdGFYUmxjaWs3WEc1Y2RGeDBmVnh1WEc1Y2RGeDBMeThnVFdGcGJpQmxibU52WkdsdVp5QnNiMjl3T2x4dVhIUmNkSGRvYVd4bElDaG9ZVzVrYkdWa1ExQkRiM1Z1ZENBOElHbHVjSFYwVEdWdVozUm9LU0I3WEc1Y2JseDBYSFJjZEM4dklFRnNiQ0J1YjI0dFltRnphV01nWTI5a1pTQndiMmx1ZEhNZ1BDQnVJR2hoZG1VZ1ltVmxiaUJvWVc1a2JHVmtJR0ZzY21WaFpIa3VJRVpwYm1RZ2RHaGxJRzVsZUhSY2JseDBYSFJjZEM4dklHeGhjbWRsY2lCdmJtVTZYRzVjZEZ4MFhIUm1iM0lnS0cwZ1BTQnRZWGhKYm5Rc0lHb2dQU0F3T3lCcUlEd2dhVzV3ZFhSTVpXNW5kR2c3SUNzcmFpa2dlMXh1WEhSY2RGeDBYSFJqZFhKeVpXNTBWbUZzZFdVZ1BTQnBibkIxZEZ0cVhUdGNibHgwWEhSY2RGeDBhV1lnS0dOMWNuSmxiblJXWVd4MVpTQStQU0J1SUNZbUlHTjFjbkpsYm5SV1lXeDFaU0E4SUcwcElIdGNibHgwWEhSY2RGeDBYSFJ0SUQwZ1kzVnljbVZ1ZEZaaGJIVmxPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFI5WEc1Y2JseDBYSFJjZEM4dklFbHVZM0psWVhObElHQmtaV3gwWVdBZ1pXNXZkV2RvSUhSdklHRmtkbUZ1WTJVZ2RHaGxJR1JsWTI5a1pYSW5jeUE4Yml4cFBpQnpkR0YwWlNCMGJ5QThiU3d3UGl4Y2JseDBYSFJjZEM4dklHSjFkQ0JuZFdGeVpDQmhaMkZwYm5OMElHOTJaWEptYkc5M1hHNWNkRngwWEhSb1lXNWtiR1ZrUTFCRGIzVnVkRkJzZFhOUGJtVWdQU0JvWVc1a2JHVmtRMUJEYjNWdWRDQXJJREU3WEc1Y2RGeDBYSFJwWmlBb2JTQXRJRzRnUGlCbWJHOXZjaWdvYldGNFNXNTBJQzBnWkdWc2RHRXBJQzhnYUdGdVpHeGxaRU5RUTI5MWJuUlFiSFZ6VDI1bEtTa2dlMXh1WEhSY2RGeDBYSFJsY25KdmNpZ25iM1psY21ac2IzY25LVHRjYmx4MFhIUmNkSDFjYmx4dVhIUmNkRngwWkdWc2RHRWdLejBnS0cwZ0xTQnVLU0FxSUdoaGJtUnNaV1JEVUVOdmRXNTBVR3gxYzA5dVpUdGNibHgwWEhSY2RHNGdQU0J0TzF4dVhHNWNkRngwWEhSbWIzSWdLR29nUFNBd095QnFJRHdnYVc1d2RYUk1aVzVuZEdnN0lDc3JhaWtnZTF4dVhIUmNkRngwWEhSamRYSnlaVzUwVm1Gc2RXVWdQU0JwYm5CMWRGdHFYVHRjYmx4dVhIUmNkRngwWEhScFppQW9ZM1Z5Y21WdWRGWmhiSFZsSUR3Z2JpQW1KaUFySzJSbGJIUmhJRDRnYldGNFNXNTBLU0I3WEc1Y2RGeDBYSFJjZEZ4MFpYSnliM0lvSjI5MlpYSm1iRzkzSnlrN1hHNWNkRngwWEhSY2RIMWNibHh1WEhSY2RGeDBYSFJwWmlBb1kzVnljbVZ1ZEZaaGJIVmxJRDA5SUc0cElIdGNibHgwWEhSY2RGeDBYSFF2THlCU1pYQnlaWE5sYm5RZ1pHVnNkR0VnWVhNZ1lTQm5aVzVsY21Gc2FYcGxaQ0IyWVhKcFlXSnNaUzFzWlc1bmRHZ2dhVzUwWldkbGNseHVYSFJjZEZ4MFhIUmNkR1p2Y2lBb2NTQTlJR1JsYkhSaExDQnJJRDBnWW1GelpUc2dMeW9nYm04Z1kyOXVaR2wwYVc5dUlDb3ZPeUJySUNzOUlHSmhjMlVwSUh0Y2JseDBYSFJjZEZ4MFhIUmNkSFFnUFNCcklEdzlJR0pwWVhNZ1B5QjBUV2x1SURvZ0tHc2dQajBnWW1saGN5QXJJSFJOWVhnZ1B5QjBUV0Y0SURvZ2F5QXRJR0pwWVhNcE8xeHVYSFJjZEZ4MFhIUmNkRngwYVdZZ0tIRWdQQ0IwS1NCN1hHNWNkRngwWEhSY2RGeDBYSFJjZEdKeVpXRnJPMXh1WEhSY2RGeDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUmNkRngwY1UxcGJuVnpWQ0E5SUhFZ0xTQjBPMXh1WEhSY2RGeDBYSFJjZEZ4MFltRnpaVTFwYm5WelZDQTlJR0poYzJVZ0xTQjBPMXh1WEhSY2RGeDBYSFJjZEZ4MGIzVjBjSFYwTG5CMWMyZ29YRzVjZEZ4MFhIUmNkRngwWEhSY2RITjBjbWx1WjBaeWIyMURhR0Z5UTI5a1pTaGthV2RwZEZSdlFtRnphV01vZENBcklIRk5hVzUxYzFRZ0pTQmlZWE5sVFdsdWRYTlVMQ0F3S1NsY2JseDBYSFJjZEZ4MFhIUmNkQ2s3WEc1Y2RGeDBYSFJjZEZ4MFhIUnhJRDBnWm14dmIzSW9jVTFwYm5WelZDQXZJR0poYzJWTmFXNTFjMVFwTzF4dVhIUmNkRngwWEhSY2RIMWNibHh1WEhSY2RGeDBYSFJjZEc5MWRIQjFkQzV3ZFhOb0tITjBjbWx1WjBaeWIyMURhR0Z5UTI5a1pTaGthV2RwZEZSdlFtRnphV01vY1N3Z01Da3BLVHRjYmx4MFhIUmNkRngwWEhSaWFXRnpJRDBnWVdSaGNIUW9aR1ZzZEdFc0lHaGhibVJzWldSRFVFTnZkVzUwVUd4MWMwOXVaU3dnYUdGdVpHeGxaRU5RUTI5MWJuUWdQVDBnWW1GemFXTk1aVzVuZEdncE8xeHVYSFJjZEZ4MFhIUmNkR1JsYkhSaElEMGdNRHRjYmx4MFhIUmNkRngwWEhRcksyaGhibVJzWldSRFVFTnZkVzUwTzF4dVhIUmNkRngwWEhSOVhHNWNkRngwWEhSOVhHNWNibHgwWEhSY2RDc3JaR1ZzZEdFN1hHNWNkRngwWEhRcksyNDdYRzVjYmx4MFhIUjlYRzVjZEZ4MGNtVjBkWEp1SUc5MWRIQjFkQzVxYjJsdUtDY25LVHRjYmx4MGZWeHVYRzVjZEM4cUtseHVYSFFnS2lCRGIyNTJaWEowY3lCaElGQjFibmxqYjJSbElITjBjbWx1WnlCeVpYQnlaWE5sYm5ScGJtY2dZU0JrYjIxaGFXNGdibUZ0WlNCMGJ5QlZibWxqYjJSbExpQlBibXg1SUhSb1pWeHVYSFFnS2lCUWRXNTVZMjlrWldRZ2NHRnlkSE1nYjJZZ2RHaGxJR1J2YldGcGJpQnVZVzFsSUhkcGJHd2dZbVVnWTI5dWRtVnlkR1ZrTENCcExtVXVJR2wwSUdSdlpYTnVKM1JjYmx4MElDb2diV0YwZEdWeUlHbG1JSGx2ZFNCallXeHNJR2wwSUc5dUlHRWdjM1J5YVc1bklIUm9ZWFFnYUdGeklHRnNjbVZoWkhrZ1ltVmxiaUJqYjI1MlpYSjBaV1FnZEc5Y2JseDBJQ29nVlc1cFkyOWtaUzVjYmx4MElDb2dRRzFsYldKbGNrOW1JSEIxYm5samIyUmxYRzVjZENBcUlFQndZWEpoYlNCN1UzUnlhVzVuZlNCa2IyMWhhVzRnVkdobElGQjFibmxqYjJSbElHUnZiV0ZwYmlCdVlXMWxJSFJ2SUdOdmJuWmxjblFnZEc4Z1ZXNXBZMjlrWlM1Y2JseDBJQ29nUUhKbGRIVnlibk1nZTFOMGNtbHVaMzBnVkdobElGVnVhV052WkdVZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnYjJZZ2RHaGxJR2RwZG1WdUlGQjFibmxqYjJSbFhHNWNkQ0FxSUhOMGNtbHVaeTVjYmx4MElDb3ZYRzVjZEdaMWJtTjBhVzl1SUhSdlZXNXBZMjlrWlNoa2IyMWhhVzRwSUh0Y2JseDBYSFJ5WlhSMWNtNGdiV0Z3Ukc5dFlXbHVLR1J2YldGcGJpd2dablZ1WTNScGIyNG9jM1J5YVc1bktTQjdYRzVjZEZ4MFhIUnlaWFIxY200Z2NtVm5aWGhRZFc1NVkyOWtaUzUwWlhOMEtITjBjbWx1WnlsY2JseDBYSFJjZEZ4MFB5QmtaV052WkdVb2MzUnlhVzVuTG5Oc2FXTmxLRFFwTG5SdlRHOTNaWEpEWVhObEtDa3BYRzVjZEZ4MFhIUmNkRG9nYzNSeWFXNW5PMXh1WEhSY2RIMHBPMXh1WEhSOVhHNWNibHgwTHlvcVhHNWNkQ0FxSUVOdmJuWmxjblJ6SUdFZ1ZXNXBZMjlrWlNCemRISnBibWNnY21Wd2NtVnpaVzUwYVc1bklHRWdaRzl0WVdsdUlHNWhiV1VnZEc4Z1VIVnVlV052WkdVdUlFOXViSGtnZEdobFhHNWNkQ0FxSUc1dmJpMUJVME5KU1NCd1lYSjBjeUJ2WmlCMGFHVWdaRzl0WVdsdUlHNWhiV1VnZDJsc2JDQmlaU0JqYjI1MlpYSjBaV1FzSUdrdVpTNGdhWFFnWkc5bGMyNG5kRnh1WEhRZ0tpQnRZWFIwWlhJZ2FXWWdlVzkxSUdOaGJHd2dhWFFnZDJsMGFDQmhJR1J2YldGcGJpQjBhR0YwSjNNZ1lXeHlaV0ZrZVNCcGJpQkJVME5KU1M1Y2JseDBJQ29nUUcxbGJXSmxjazltSUhCMWJubGpiMlJsWEc1Y2RDQXFJRUJ3WVhKaGJTQjdVM1J5YVc1bmZTQmtiMjFoYVc0Z1ZHaGxJR1J2YldGcGJpQnVZVzFsSUhSdklHTnZiblpsY25Rc0lHRnpJR0VnVlc1cFkyOWtaU0J6ZEhKcGJtY3VYRzVjZENBcUlFQnlaWFIxY201eklIdFRkSEpwYm1kOUlGUm9aU0JRZFc1NVkyOWtaU0J5WlhCeVpYTmxiblJoZEdsdmJpQnZaaUIwYUdVZ1oybDJaVzRnWkc5dFlXbHVJRzVoYldVdVhHNWNkQ0FxTDF4dVhIUm1kVzVqZEdsdmJpQjBiMEZUUTBsSktHUnZiV0ZwYmlrZ2UxeHVYSFJjZEhKbGRIVnliaUJ0WVhCRWIyMWhhVzRvWkc5dFlXbHVMQ0JtZFc1amRHbHZiaWh6ZEhKcGJtY3BJSHRjYmx4MFhIUmNkSEpsZEhWeWJpQnlaV2RsZUU1dmJrRlRRMGxKTG5SbGMzUW9jM1J5YVc1bktWeHVYSFJjZEZ4MFhIUS9JQ2Q0YmkwdEp5QXJJR1Z1WTI5a1pTaHpkSEpwYm1jcFhHNWNkRngwWEhSY2REb2djM1J5YVc1bk8xeHVYSFJjZEgwcE8xeHVYSFI5WEc1Y2JseDBMeW90TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFNvdlhHNWNibHgwTHlvcUlFUmxabWx1WlNCMGFHVWdjSFZpYkdsaklFRlFTU0FxTDF4dVhIUndkVzU1WTI5a1pTQTlJSHRjYmx4MFhIUXZLaXBjYmx4MFhIUWdLaUJCSUhOMGNtbHVaeUJ5WlhCeVpYTmxiblJwYm1jZ2RHaGxJR04xY25KbGJuUWdVSFZ1ZVdOdlpHVXVhbk1nZG1WeWMybHZiaUJ1ZFcxaVpYSXVYRzVjZEZ4MElDb2dRRzFsYldKbGNrOW1JSEIxYm5samIyUmxYRzVjZEZ4MElDb2dRSFI1Y0dVZ1UzUnlhVzVuWEc1Y2RGeDBJQ292WEc1Y2RGeDBKM1psY25OcGIyNG5PaUFuTVM0eUxqUW5MRnh1WEhSY2RDOHFLbHh1WEhSY2RDQXFJRUZ1SUc5aWFtVmpkQ0J2WmlCdFpYUm9iMlJ6SUhSdklHTnZiblpsY25RZ1puSnZiU0JLWVhaaFUyTnlhWEIwSjNNZ2FXNTBaWEp1WVd3Z1kyaGhjbUZqZEdWeVhHNWNkRngwSUNvZ2NtVndjbVZ6Wlc1MFlYUnBiMjRnS0ZWRFV5MHlLU0IwYnlCVmJtbGpiMlJsSUdOdlpHVWdjRzlwYm5SekxDQmhibVFnWW1GamF5NWNibHgwWEhRZ0tpQkFjMlZsSUR4b2RIUndPaTh2YldGMGFHbGhjMko1Ym1WdWN5NWlaUzl1YjNSbGN5OXFZWFpoYzJOeWFYQjBMV1Z1WTI5a2FXNW5QbHh1WEhSY2RDQXFJRUJ0WlcxaVpYSlBaaUJ3ZFc1NVkyOWtaVnh1WEhSY2RDQXFJRUIwZVhCbElFOWlhbVZqZEZ4dVhIUmNkQ0FxTDF4dVhIUmNkQ2QxWTNNeUp6b2dlMXh1WEhSY2RGeDBKMlJsWTI5a1pTYzZJSFZqY3pKa1pXTnZaR1VzWEc1Y2RGeDBYSFFuWlc1amIyUmxKem9nZFdOek1tVnVZMjlrWlZ4dVhIUmNkSDBzWEc1Y2RGeDBKMlJsWTI5a1pTYzZJR1JsWTI5a1pTeGNibHgwWEhRblpXNWpiMlJsSnpvZ1pXNWpiMlJsTEZ4dVhIUmNkQ2QwYjBGVFEwbEpKem9nZEc5QlUwTkpTU3hjYmx4MFhIUW5kRzlWYm1samIyUmxKem9nZEc5VmJtbGpiMlJsWEc1Y2RIMDdYRzVjYmx4MEx5b3FJRVY0Y0c5elpTQmdjSFZ1ZVdOdlpHVmdJQ292WEc1Y2RDOHZJRk52YldVZ1FVMUVJR0oxYVd4a0lHOXdkR2x0YVhwbGNuTXNJR3hwYTJVZ2NpNXFjeXdnWTJobFkyc2dabTl5SUhOd1pXTnBabWxqSUdOdmJtUnBkR2x2YmlCd1lYUjBaWEp1YzF4dVhIUXZMeUJzYVd0bElIUm9aU0JtYjJ4c2IzZHBibWM2WEc1Y2RHbG1JQ2hjYmx4MFhIUjBlWEJsYjJZZ1pHVm1hVzVsSUQwOUlDZG1kVzVqZEdsdmJpY2dKaVpjYmx4MFhIUjBlWEJsYjJZZ1pHVm1hVzVsTG1GdFpDQTlQU0FuYjJKcVpXTjBKeUFtSmx4dVhIUmNkR1JsWm1sdVpTNWhiV1JjYmx4MEtTQjdYRzVjZEZ4MFpHVm1hVzVsS0Nkd2RXNTVZMjlrWlNjc0lHWjFibU4wYVc5dUtDa2dlMXh1WEhSY2RGeDBjbVYwZFhKdUlIQjFibmxqYjJSbE8xeHVYSFJjZEgwcE8xeHVYSFI5SUdWc2MyVWdhV1lnS0daeVpXVkZlSEJ2Y25SeklDWW1JQ0ZtY21WbFJYaHdiM0owY3k1dWIyUmxWSGx3WlNrZ2UxeHVYSFJjZEdsbUlDaG1jbVZsVFc5a2RXeGxLU0I3SUM4dklHbHVJRTV2WkdVdWFuTWdiM0lnVW1sdVoyOUtVeUIyTUM0NExqQXJYRzVjZEZ4MFhIUm1jbVZsVFc5a2RXeGxMbVY0Y0c5eWRITWdQU0J3ZFc1NVkyOWtaVHRjYmx4MFhIUjlJR1ZzYzJVZ2V5QXZMeUJwYmlCT1lYSjNhR0ZzSUc5eUlGSnBibWR2U2xNZ2RqQXVOeTR3TFZ4dVhIUmNkRngwWm05eUlDaHJaWGtnYVc0Z2NIVnVlV052WkdVcElIdGNibHgwWEhSY2RGeDBjSFZ1ZVdOdlpHVXVhR0Z6VDNkdVVISnZjR1Z5ZEhrb2EyVjVLU0FtSmlBb1puSmxaVVY0Y0c5eWRITmJhMlY1WFNBOUlIQjFibmxqYjJSbFcydGxlVjBwTzF4dVhIUmNkRngwZlZ4dVhIUmNkSDFjYmx4MGZTQmxiSE5sSUhzZ0x5OGdhVzRnVW1ocGJtOGdiM0lnWVNCM1pXSWdZbkp2ZDNObGNseHVYSFJjZEhKdmIzUXVjSFZ1ZVdOdlpHVWdQU0J3ZFc1NVkyOWtaVHRjYmx4MGZWeHVYRzU5S0hSb2FYTXBLVHRjYmlKZGZRPT0iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBJZiBvYmouaGFzT3duUHJvcGVydHkgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgdGhlbiBjYWxsaW5nXG4vLyBvYmouaGFzT3duUHJvcGVydHkocHJvcCkgd2lsbCBicmVhay5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy8xNzA3XG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHFzLCBzZXAsIGVxLCBvcHRpb25zKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICB2YXIgb2JqID0ge307XG5cbiAgaWYgKHR5cGVvZiBxcyAhPT0gJ3N0cmluZycgfHwgcXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHZhciByZWdleHAgPSAvXFwrL2c7XG4gIHFzID0gcXMuc3BsaXQoc2VwKTtcblxuICB2YXIgbWF4S2V5cyA9IDEwMDA7XG4gIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLm1heEtleXMgPT09ICdudW1iZXInKSB7XG4gICAgbWF4S2V5cyA9IG9wdGlvbnMubWF4S2V5cztcbiAgfVxuXG4gIHZhciBsZW4gPSBxcy5sZW5ndGg7XG4gIC8vIG1heEtleXMgPD0gMCBtZWFucyB0aGF0IHdlIHNob3VsZCBub3QgbGltaXQga2V5cyBjb3VudFxuICBpZiAobWF4S2V5cyA+IDAgJiYgbGVuID4gbWF4S2V5cykge1xuICAgIGxlbiA9IG1heEtleXM7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIHggPSBxc1tpXS5yZXBsYWNlKHJlZ2V4cCwgJyUyMCcpLFxuICAgICAgICBpZHggPSB4LmluZGV4T2YoZXEpLFxuICAgICAgICBrc3RyLCB2c3RyLCBrLCB2O1xuXG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBrc3RyID0geC5zdWJzdHIoMCwgaWR4KTtcbiAgICAgIHZzdHIgPSB4LnN1YnN0cihpZHggKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAga3N0ciA9IHg7XG4gICAgICB2c3RyID0gJyc7XG4gICAgfVxuXG4gICAgayA9IGRlY29kZVVSSUNvbXBvbmVudChrc3RyKTtcbiAgICB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KHZzdHIpO1xuXG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShvYmosIGspKSB7XG4gICAgICBvYmpba10gPSB2O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICBvYmpba10ucHVzaCh2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqW2tdID0gW29ialtrXSwgdl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG1hcChvYmplY3RLZXlzKG9iaiksIGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBtYXAob2JqW2tdLCBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZSh2KSk7XG4gICAgICAgIH0pLmpvaW4oc2VwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBrcyArIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUob2JqW2tdKSk7XG4gICAgICB9XG4gICAgfSkuam9pbihzZXApO1xuXG4gIH1cblxuICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUobmFtZSkpICsgZXEgK1xuICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmopKTtcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4cykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5mdW5jdGlvbiBtYXAgKHhzLCBmKSB7XG4gIGlmICh4cy5tYXApIHJldHVybiB4cy5tYXAoZik7XG4gIHZhciByZXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIHJlcy5wdXNoKGYoeHNbaV0sIGkpKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHJlcy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuZGVjb2RlID0gZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vZGVjb2RlJyk7XG5leHBvcnRzLmVuY29kZSA9IGV4cG9ydHMuc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9lbmNvZGUnKTtcbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcHVueWNvZGUgPSByZXF1aXJlKCdwdW55Y29kZScpO1xuXG5leHBvcnRzLnBhcnNlID0gdXJsUGFyc2U7XG5leHBvcnRzLnJlc29sdmUgPSB1cmxSZXNvbHZlO1xuZXhwb3J0cy5yZXNvbHZlT2JqZWN0ID0gdXJsUmVzb2x2ZU9iamVjdDtcbmV4cG9ydHMuZm9ybWF0ID0gdXJsRm9ybWF0O1xuXG5leHBvcnRzLlVybCA9IFVybDtcblxuZnVuY3Rpb24gVXJsKCkge1xuICB0aGlzLnByb3RvY29sID0gbnVsbDtcbiAgdGhpcy5zbGFzaGVzID0gbnVsbDtcbiAgdGhpcy5hdXRoID0gbnVsbDtcbiAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgdGhpcy5wb3J0ID0gbnVsbDtcbiAgdGhpcy5ob3N0bmFtZSA9IG51bGw7XG4gIHRoaXMuaGFzaCA9IG51bGw7XG4gIHRoaXMuc2VhcmNoID0gbnVsbDtcbiAgdGhpcy5xdWVyeSA9IG51bGw7XG4gIHRoaXMucGF0aG5hbWUgPSBudWxsO1xuICB0aGlzLnBhdGggPSBudWxsO1xuICB0aGlzLmhyZWYgPSBudWxsO1xufVxuXG4vLyBSZWZlcmVuY2U6IFJGQyAzOTg2LCBSRkMgMTgwOCwgUkZDIDIzOTZcblxuLy8gZGVmaW5lIHRoZXNlIGhlcmUgc28gYXQgbGVhc3QgdGhleSBvbmx5IGhhdmUgdG8gYmVcbi8vIGNvbXBpbGVkIG9uY2Ugb24gdGhlIGZpcnN0IG1vZHVsZSBsb2FkLlxudmFyIHByb3RvY29sUGF0dGVybiA9IC9eKFthLXowLTkuKy1dKzopL2ksXG4gICAgcG9ydFBhdHRlcm4gPSAvOlswLTldKiQvLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgcmVzZXJ2ZWQgZm9yIGRlbGltaXRpbmcgVVJMcy5cbiAgICAvLyBXZSBhY3R1YWxseSBqdXN0IGF1dG8tZXNjYXBlIHRoZXNlLlxuICAgIGRlbGltcyA9IFsnPCcsICc+JywgJ1wiJywgJ2AnLCAnICcsICdcXHInLCAnXFxuJywgJ1xcdCddLFxuXG4gICAgLy8gUkZDIDIzOTY6IGNoYXJhY3RlcnMgbm90IGFsbG93ZWQgZm9yIHZhcmlvdXMgcmVhc29ucy5cbiAgICB1bndpc2UgPSBbJ3snLCAnfScsICd8JywgJ1xcXFwnLCAnXicsICdgJ10uY29uY2F0KGRlbGltcyksXG5cbiAgICAvLyBBbGxvd2VkIGJ5IFJGQ3MsIGJ1dCBjYXVzZSBvZiBYU1MgYXR0YWNrcy4gIEFsd2F5cyBlc2NhcGUgdGhlc2UuXG4gICAgYXV0b0VzY2FwZSA9IFsnXFwnJ10uY29uY2F0KHVud2lzZSksXG4gICAgLy8gQ2hhcmFjdGVycyB0aGF0IGFyZSBuZXZlciBldmVyIGFsbG93ZWQgaW4gYSBob3N0bmFtZS5cbiAgICAvLyBOb3RlIHRoYXQgYW55IGludmFsaWQgY2hhcnMgYXJlIGFsc28gaGFuZGxlZCwgYnV0IHRoZXNlXG4gICAgLy8gYXJlIHRoZSBvbmVzIHRoYXQgYXJlICpleHBlY3RlZCogdG8gYmUgc2Vlbiwgc28gd2UgZmFzdC1wYXRoXG4gICAgLy8gdGhlbS5cbiAgICBub25Ib3N0Q2hhcnMgPSBbJyUnLCAnLycsICc/JywgJzsnLCAnIyddLmNvbmNhdChhdXRvRXNjYXBlKSxcbiAgICBob3N0RW5kaW5nQ2hhcnMgPSBbJy8nLCAnPycsICcjJ10sXG4gICAgaG9zdG5hbWVNYXhMZW4gPSAyNTUsXG4gICAgaG9zdG5hbWVQYXJ0UGF0dGVybiA9IC9eW2EtejAtOUEtWl8tXXswLDYzfSQvLFxuICAgIGhvc3RuYW1lUGFydFN0YXJ0ID0gL14oW2EtejAtOUEtWl8tXXswLDYzfSkoLiopJC8sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgY2FuIGFsbG93IFwidW5zYWZlXCIgYW5kIFwidW53aXNlXCIgY2hhcnMuXG4gICAgdW5zYWZlUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBuZXZlciBoYXZlIGEgaG9zdG5hbWUuXG4gICAgaG9zdGxlc3NQcm90b2NvbCA9IHtcbiAgICAgICdqYXZhc2NyaXB0JzogdHJ1ZSxcbiAgICAgICdqYXZhc2NyaXB0Oic6IHRydWVcbiAgICB9LFxuICAgIC8vIHByb3RvY29scyB0aGF0IGFsd2F5cyBjb250YWluIGEgLy8gYml0LlxuICAgIHNsYXNoZWRQcm90b2NvbCA9IHtcbiAgICAgICdodHRwJzogdHJ1ZSxcbiAgICAgICdodHRwcyc6IHRydWUsXG4gICAgICAnZnRwJzogdHJ1ZSxcbiAgICAgICdnb3BoZXInOiB0cnVlLFxuICAgICAgJ2ZpbGUnOiB0cnVlLFxuICAgICAgJ2h0dHA6JzogdHJ1ZSxcbiAgICAgICdodHRwczonOiB0cnVlLFxuICAgICAgJ2Z0cDonOiB0cnVlLFxuICAgICAgJ2dvcGhlcjonOiB0cnVlLFxuICAgICAgJ2ZpbGU6JzogdHJ1ZVxuICAgIH0sXG4gICAgcXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZycpO1xuXG5mdW5jdGlvbiB1cmxQYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICh1cmwgJiYgaXNPYmplY3QodXJsKSAmJiB1cmwgaW5zdGFuY2VvZiBVcmwpIHJldHVybiB1cmw7XG5cbiAgdmFyIHUgPSBuZXcgVXJsO1xuICB1LnBhcnNlKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpO1xuICByZXR1cm4gdTtcbn1cblxuVXJsLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKHVybCwgcGFyc2VRdWVyeVN0cmluZywgc2xhc2hlc0Rlbm90ZUhvc3QpIHtcbiAgaWYgKCFpc1N0cmluZyh1cmwpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgXCIgKyB0eXBlb2YgdXJsKTtcbiAgfVxuXG4gIHZhciByZXN0ID0gdXJsO1xuXG4gIC8vIHRyaW0gYmVmb3JlIHByb2NlZWRpbmcuXG4gIC8vIFRoaXMgaXMgdG8gc3VwcG9ydCBwYXJzZSBzdHVmZiBsaWtlIFwiICBodHRwOi8vZm9vLmNvbSAgXFxuXCJcbiAgcmVzdCA9IHJlc3QudHJpbSgpO1xuXG4gIHZhciBwcm90byA9IHByb3RvY29sUGF0dGVybi5leGVjKHJlc3QpO1xuICBpZiAocHJvdG8pIHtcbiAgICBwcm90byA9IHByb3RvWzBdO1xuICAgIHZhciBsb3dlclByb3RvID0gcHJvdG8udG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3RvY29sID0gbG93ZXJQcm90bztcbiAgICByZXN0ID0gcmVzdC5zdWJzdHIocHJvdG8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIGZpZ3VyZSBvdXQgaWYgaXQncyBnb3QgYSBob3N0XG4gIC8vIHVzZXJAc2VydmVyIGlzICphbHdheXMqIGludGVycHJldGVkIGFzIGEgaG9zdG5hbWUsIGFuZCB1cmxcbiAgLy8gcmVzb2x1dGlvbiB3aWxsIHRyZWF0IC8vZm9vL2JhciBhcyBob3N0PWZvbyxwYXRoPWJhciBiZWNhdXNlIHRoYXQnc1xuICAvLyBob3cgdGhlIGJyb3dzZXIgcmVzb2x2ZXMgcmVsYXRpdmUgVVJMcy5cbiAgaWYgKHNsYXNoZXNEZW5vdGVIb3N0IHx8IHByb3RvIHx8IHJlc3QubWF0Y2goL15cXC9cXC9bXkBcXC9dK0BbXkBcXC9dKy8pKSB7XG4gICAgdmFyIHNsYXNoZXMgPSByZXN0LnN1YnN0cigwLCAyKSA9PT0gJy8vJztcbiAgICBpZiAoc2xhc2hlcyAmJiAhKHByb3RvICYmIGhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dKSkge1xuICAgICAgcmVzdCA9IHJlc3Quc3Vic3RyKDIpO1xuICAgICAgdGhpcy5zbGFzaGVzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWhvc3RsZXNzUHJvdG9jb2xbcHJvdG9dICYmXG4gICAgICAoc2xhc2hlcyB8fCAocHJvdG8gJiYgIXNsYXNoZWRQcm90b2NvbFtwcm90b10pKSkge1xuXG4gICAgLy8gdGhlcmUncyBhIGhvc3RuYW1lLlxuICAgIC8vIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiAvLCA/LCA7LCBvciAjIGVuZHMgdGhlIGhvc3QuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBAIGluIHRoZSBob3N0bmFtZSwgdGhlbiBub24taG9zdCBjaGFycyAqYXJlKiBhbGxvd2VkXG4gICAgLy8gdG8gdGhlIGxlZnQgb2YgdGhlIGxhc3QgQCBzaWduLCB1bmxlc3Mgc29tZSBob3N0LWVuZGluZyBjaGFyYWN0ZXJcbiAgICAvLyBjb21lcyAqYmVmb3JlKiB0aGUgQC1zaWduLlxuICAgIC8vIFVSTHMgYXJlIG9ibm94aW91cy5cbiAgICAvL1xuICAgIC8vIGV4OlxuICAgIC8vIGh0dHA6Ly9hQGJAYy8gPT4gdXNlcjphQGIgaG9zdDpjXG4gICAgLy8gaHR0cDovL2FAYj9AYyA9PiB1c2VyOmEgaG9zdDpjIHBhdGg6Lz9AY1xuXG4gICAgLy8gdjAuMTIgVE9ETyhpc2FhY3MpOiBUaGlzIGlzIG5vdCBxdWl0ZSBob3cgQ2hyb21lIGRvZXMgdGhpbmdzLlxuICAgIC8vIFJldmlldyBvdXIgdGVzdCBjYXNlIGFnYWluc3QgYnJvd3NlcnMgbW9yZSBjb21wcmVoZW5zaXZlbHkuXG5cbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhbnkgaG9zdEVuZGluZ0NoYXJzXG4gICAgdmFyIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvc3RFbmRpbmdDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihob3N0RW5kaW5nQ2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cblxuICAgIC8vIGF0IHRoaXMgcG9pbnQsIGVpdGhlciB3ZSBoYXZlIGFuIGV4cGxpY2l0IHBvaW50IHdoZXJlIHRoZVxuICAgIC8vIGF1dGggcG9ydGlvbiBjYW5ub3QgZ28gcGFzdCwgb3IgdGhlIGxhc3QgQCBjaGFyIGlzIHRoZSBkZWNpZGVyLlxuICAgIHZhciBhdXRoLCBhdFNpZ247XG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKSB7XG4gICAgICAvLyBhdFNpZ24gY2FuIGJlIGFueXdoZXJlLlxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdFNpZ24gbXVzdCBiZSBpbiBhdXRoIHBvcnRpb24uXG4gICAgICAvLyBodHRwOi8vYUBiL2NAZCA9PiBob3N0OmIgYXV0aDphIHBhdGg6L2NAZFxuICAgICAgYXRTaWduID0gcmVzdC5sYXN0SW5kZXhPZignQCcsIGhvc3RFbmQpO1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBoYXZlIGEgcG9ydGlvbiB3aGljaCBpcyBkZWZpbml0ZWx5IHRoZSBhdXRoLlxuICAgIC8vIFB1bGwgdGhhdCBvZmYuXG4gICAgaWYgKGF0U2lnbiAhPT0gLTEpIHtcbiAgICAgIGF1dGggPSByZXN0LnNsaWNlKDAsIGF0U2lnbik7XG4gICAgICByZXN0ID0gcmVzdC5zbGljZShhdFNpZ24gKyAxKTtcbiAgICAgIHRoaXMuYXV0aCA9IGRlY29kZVVSSUNvbXBvbmVudChhdXRoKTtcbiAgICB9XG5cbiAgICAvLyB0aGUgaG9zdCBpcyB0aGUgcmVtYWluaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBub24taG9zdCBjaGFyXG4gICAgaG9zdEVuZCA9IC0xO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uSG9zdENoYXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVjID0gcmVzdC5pbmRleE9mKG5vbkhvc3RDaGFyc1tpXSk7XG4gICAgICBpZiAoaGVjICE9PSAtMSAmJiAoaG9zdEVuZCA9PT0gLTEgfHwgaGVjIDwgaG9zdEVuZCkpXG4gICAgICAgIGhvc3RFbmQgPSBoZWM7XG4gICAgfVxuICAgIC8vIGlmIHdlIHN0aWxsIGhhdmUgbm90IGhpdCBpdCwgdGhlbiB0aGUgZW50aXJlIHRoaW5nIGlzIGEgaG9zdC5cbiAgICBpZiAoaG9zdEVuZCA9PT0gLTEpXG4gICAgICBob3N0RW5kID0gcmVzdC5sZW5ndGg7XG5cbiAgICB0aGlzLmhvc3QgPSByZXN0LnNsaWNlKDAsIGhvc3RFbmQpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKGhvc3RFbmQpO1xuXG4gICAgLy8gcHVsbCBvdXQgcG9ydC5cbiAgICB0aGlzLnBhcnNlSG9zdCgpO1xuXG4gICAgLy8gd2UndmUgaW5kaWNhdGVkIHRoYXQgdGhlcmUgaXMgYSBob3N0bmFtZSxcbiAgICAvLyBzbyBldmVuIGlmIGl0J3MgZW1wdHksIGl0IGhhcyB0byBiZSBwcmVzZW50LlxuICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lIHx8ICcnO1xuXG4gICAgLy8gaWYgaG9zdG5hbWUgYmVnaW5zIHdpdGggWyBhbmQgZW5kcyB3aXRoIF1cbiAgICAvLyBhc3N1bWUgdGhhdCBpdCdzIGFuIElQdjYgYWRkcmVzcy5cbiAgICB2YXIgaXB2Nkhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZVswXSA9PT0gJ1snICYmXG4gICAgICAgIHRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGggLSAxXSA9PT0gJ10nO1xuXG4gICAgLy8gdmFsaWRhdGUgYSBsaXR0bGUuXG4gICAgaWYgKCFpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHZhciBob3N0cGFydHMgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KC9cXC4vKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaG9zdHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgcGFydCA9IGhvc3RwYXJ0c1tpXTtcbiAgICAgICAgaWYgKCFwYXJ0KSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgdmFyIG5ld3BhcnQgPSAnJztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgayA9IHBhcnQubGVuZ3RoOyBqIDwgazsgaisrKSB7XG4gICAgICAgICAgICBpZiAocGFydC5jaGFyQ29kZUF0KGopID4gMTI3KSB7XG4gICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2Ugbm9uLUFTQ0lJIGNoYXIgd2l0aCBhIHRlbXBvcmFyeSBwbGFjZWhvbGRlclxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRoaXMgdG8gbWFrZSBzdXJlIHNpemUgb2YgaG9zdG5hbWUgaXMgbm90XG4gICAgICAgICAgICAgIC8vIGJyb2tlbiBieSByZXBsYWNpbmcgbm9uLUFTQ0lJIGJ5IG5vdGhpbmdcbiAgICAgICAgICAgICAgbmV3cGFydCArPSAneCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdwYXJ0ICs9IHBhcnRbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHdlIHRlc3QgYWdhaW4gd2l0aCBBU0NJSSBjaGFyIG9ubHlcbiAgICAgICAgICBpZiAoIW5ld3BhcnQubWF0Y2goaG9zdG5hbWVQYXJ0UGF0dGVybikpIHtcbiAgICAgICAgICAgIHZhciB2YWxpZFBhcnRzID0gaG9zdHBhcnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgdmFyIG5vdEhvc3QgPSBob3N0cGFydHMuc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgdmFyIGJpdCA9IHBhcnQubWF0Y2goaG9zdG5hbWVQYXJ0U3RhcnQpO1xuICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICB2YWxpZFBhcnRzLnB1c2goYml0WzFdKTtcbiAgICAgICAgICAgICAgbm90SG9zdC51bnNoaWZ0KGJpdFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90SG9zdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmVzdCA9ICcvJyArIG5vdEhvc3Quam9pbignLicpICsgcmVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaG9zdG5hbWUgPSB2YWxpZFBhcnRzLmpvaW4oJy4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhvc3RuYW1lLmxlbmd0aCA+IGhvc3RuYW1lTWF4TGVuKSB7XG4gICAgICB0aGlzLmhvc3RuYW1lID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhvc3RuYW1lcyBhcmUgYWx3YXlzIGxvd2VyIGNhc2UuXG4gICAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICAvLyBJRE5BIFN1cHBvcnQ6IFJldHVybnMgYSBwdW55IGNvZGVkIHJlcHJlc2VudGF0aW9uIG9mIFwiZG9tYWluXCIuXG4gICAgICAvLyBJdCBvbmx5IGNvbnZlcnRzIHRoZSBwYXJ0IG9mIHRoZSBkb21haW4gbmFtZSB0aGF0XG4gICAgICAvLyBoYXMgbm9uIEFTQ0lJIGNoYXJhY3RlcnMuIEkuZS4gaXQgZG9zZW50IG1hdHRlciBpZlxuICAgICAgLy8geW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0IGFscmVhZHkgaXMgaW4gQVNDSUkuXG4gICAgICB2YXIgZG9tYWluQXJyYXkgPSB0aGlzLmhvc3RuYW1lLnNwbGl0KCcuJyk7XG4gICAgICB2YXIgbmV3T3V0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbWFpbkFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBzID0gZG9tYWluQXJyYXlbaV07XG4gICAgICAgIG5ld091dC5wdXNoKHMubWF0Y2goL1teQS1aYS16MC05Xy1dLykgP1xuICAgICAgICAgICAgJ3huLS0nICsgcHVueWNvZGUuZW5jb2RlKHMpIDogcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvc3RuYW1lID0gbmV3T3V0LmpvaW4oJy4nKTtcbiAgICB9XG5cbiAgICB2YXIgcCA9IHRoaXMucG9ydCA/ICc6JyArIHRoaXMucG9ydCA6ICcnO1xuICAgIHZhciBoID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcbiAgICB0aGlzLmhvc3QgPSBoICsgcDtcbiAgICB0aGlzLmhyZWYgKz0gdGhpcy5ob3N0O1xuXG4gICAgLy8gc3RyaXAgWyBhbmQgXSBmcm9tIHRoZSBob3N0bmFtZVxuICAgIC8vIHRoZSBob3N0IGZpZWxkIHN0aWxsIHJldGFpbnMgdGhlbSwgdGhvdWdoXG4gICAgaWYgKGlwdjZIb3N0bmFtZSkge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUuc3Vic3RyKDEsIHRoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMik7XG4gICAgICBpZiAocmVzdFswXSAhPT0gJy8nKSB7XG4gICAgICAgIHJlc3QgPSAnLycgKyByZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdyByZXN0IGlzIHNldCB0byB0aGUgcG9zdC1ob3N0IHN0dWZmLlxuICAvLyBjaG9wIG9mZiBhbnkgZGVsaW0gY2hhcnMuXG4gIGlmICghdW5zYWZlUHJvdG9jb2xbbG93ZXJQcm90b10pIHtcblxuICAgIC8vIEZpcnN0LCBtYWtlIDEwMCUgc3VyZSB0aGF0IGFueSBcImF1dG9Fc2NhcGVcIiBjaGFycyBnZXRcbiAgICAvLyBlc2NhcGVkLCBldmVuIGlmIGVuY29kZVVSSUNvbXBvbmVudCBkb2Vzbid0IHRoaW5rIHRoZXlcbiAgICAvLyBuZWVkIHRvIGJlLlxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXV0b0VzY2FwZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhZSA9IGF1dG9Fc2NhcGVbaV07XG4gICAgICB2YXIgZXNjID0gZW5jb2RlVVJJQ29tcG9uZW50KGFlKTtcbiAgICAgIGlmIChlc2MgPT09IGFlKSB7XG4gICAgICAgIGVzYyA9IGVzY2FwZShhZSk7XG4gICAgICB9XG4gICAgICByZXN0ID0gcmVzdC5zcGxpdChhZSkuam9pbihlc2MpO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gY2hvcCBvZmYgZnJvbSB0aGUgdGFpbCBmaXJzdC5cbiAgdmFyIGhhc2ggPSByZXN0LmluZGV4T2YoJyMnKTtcbiAgaWYgKGhhc2ggIT09IC0xKSB7XG4gICAgLy8gZ290IGEgZnJhZ21lbnQgc3RyaW5nLlxuICAgIHRoaXMuaGFzaCA9IHJlc3Quc3Vic3RyKGhhc2gpO1xuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIGhhc2gpO1xuICB9XG4gIHZhciBxbSA9IHJlc3QuaW5kZXhPZignPycpO1xuICBpZiAocW0gIT09IC0xKSB7XG4gICAgdGhpcy5zZWFyY2ggPSByZXN0LnN1YnN0cihxbSk7XG4gICAgdGhpcy5xdWVyeSA9IHJlc3Quc3Vic3RyKHFtICsgMSk7XG4gICAgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeXN0cmluZy5wYXJzZSh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gICAgcmVzdCA9IHJlc3Quc2xpY2UoMCwgcW0pO1xuICB9IGVsc2UgaWYgKHBhcnNlUXVlcnlTdHJpbmcpIHtcbiAgICAvLyBubyBxdWVyeSBzdHJpbmcsIGJ1dCBwYXJzZVF1ZXJ5U3RyaW5nIHN0aWxsIHJlcXVlc3RlZFxuICAgIHRoaXMuc2VhcmNoID0gJyc7XG4gICAgdGhpcy5xdWVyeSA9IHt9O1xuICB9XG4gIGlmIChyZXN0KSB0aGlzLnBhdGhuYW1lID0gcmVzdDtcbiAgaWYgKHNsYXNoZWRQcm90b2NvbFtsb3dlclByb3RvXSAmJlxuICAgICAgdGhpcy5ob3N0bmFtZSAmJiAhdGhpcy5wYXRobmFtZSkge1xuICAgIHRoaXMucGF0aG5hbWUgPSAnLyc7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gIGlmICh0aGlzLnBhdGhuYW1lIHx8IHRoaXMuc2VhcmNoKSB7XG4gICAgdmFyIHAgPSB0aGlzLnBhdGhuYW1lIHx8ICcnO1xuICAgIHZhciBzID0gdGhpcy5zZWFyY2ggfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gcCArIHM7XG4gIH1cblxuICAvLyBmaW5hbGx5LCByZWNvbnN0cnVjdCB0aGUgaHJlZiBiYXNlZCBvbiB3aGF0IGhhcyBiZWVuIHZhbGlkYXRlZC5cbiAgdGhpcy5ocmVmID0gdGhpcy5mb3JtYXQoKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBmb3JtYXQgYSBwYXJzZWQgb2JqZWN0IGludG8gYSB1cmwgc3RyaW5nXG5mdW5jdGlvbiB1cmxGb3JtYXQob2JqKSB7XG4gIC8vIGVuc3VyZSBpdCdzIGFuIG9iamVjdCwgYW5kIG5vdCBhIHN0cmluZyB1cmwuXG4gIC8vIElmIGl0J3MgYW4gb2JqLCB0aGlzIGlzIGEgbm8tb3AuXG4gIC8vIHRoaXMgd2F5LCB5b3UgY2FuIGNhbGwgdXJsX2Zvcm1hdCgpIG9uIHN0cmluZ3NcbiAgLy8gdG8gY2xlYW4gdXAgcG90ZW50aWFsbHkgd29ua3kgdXJscy5cbiAgaWYgKGlzU3RyaW5nKG9iaikpIG9iaiA9IHVybFBhcnNlKG9iaik7XG4gIGlmICghKG9iaiBpbnN0YW5jZW9mIFVybCkpIHJldHVybiBVcmwucHJvdG90eXBlLmZvcm1hdC5jYWxsKG9iaik7XG4gIHJldHVybiBvYmouZm9ybWF0KCk7XG59XG5cblVybC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBhdXRoID0gdGhpcy5hdXRoIHx8ICcnO1xuICBpZiAoYXV0aCkge1xuICAgIGF1dGggPSBlbmNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgYXV0aCA9IGF1dGgucmVwbGFjZSgvJTNBL2ksICc6Jyk7XG4gICAgYXV0aCArPSAnQCc7XG4gIH1cblxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLnByb3RvY29sIHx8ICcnLFxuICAgICAgcGF0aG5hbWUgPSB0aGlzLnBhdGhuYW1lIHx8ICcnLFxuICAgICAgaGFzaCA9IHRoaXMuaGFzaCB8fCAnJyxcbiAgICAgIGhvc3QgPSBmYWxzZSxcbiAgICAgIHF1ZXJ5ID0gJyc7XG5cbiAgaWYgKHRoaXMuaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdGhpcy5ob3N0O1xuICB9IGVsc2UgaWYgKHRoaXMuaG9zdG5hbWUpIHtcbiAgICBob3N0ID0gYXV0aCArICh0aGlzLmhvc3RuYW1lLmluZGV4T2YoJzonKSA9PT0gLTEgP1xuICAgICAgICB0aGlzLmhvc3RuYW1lIDpcbiAgICAgICAgJ1snICsgdGhpcy5ob3N0bmFtZSArICddJyk7XG4gICAgaWYgKHRoaXMucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB0aGlzLnBvcnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHRoaXMucXVlcnkgJiZcbiAgICAgIGlzT2JqZWN0KHRoaXMucXVlcnkpICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICBxdWVyeSA9IHF1ZXJ5c3RyaW5nLnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KTtcbiAgfVxuXG4gIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCB8fCAocXVlcnkgJiYgKCc/JyArIHF1ZXJ5KSkgfHwgJyc7XG5cbiAgaWYgKHByb3RvY29sICYmIHByb3RvY29sLnN1YnN0cigtMSkgIT09ICc6JykgcHJvdG9jb2wgKz0gJzonO1xuXG4gIC8vIG9ubHkgdGhlIHNsYXNoZWRQcm90b2NvbHMgZ2V0IHRoZSAvLy4gIE5vdCBtYWlsdG86LCB4bXBwOiwgZXRjLlxuICAvLyB1bmxlc3MgdGhleSBoYWQgdGhlbSB0byBiZWdpbiB3aXRoLlxuICBpZiAodGhpcy5zbGFzaGVzIHx8XG4gICAgICAoIXByb3RvY29sIHx8IHNsYXNoZWRQcm90b2NvbFtwcm90b2NvbF0pICYmIGhvc3QgIT09IGZhbHNlKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJyk7XG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSBwYXRobmFtZSA9ICcvJyArIHBhdGhuYW1lO1xuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnO1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgaGFzaCA9ICcjJyArIGhhc2g7XG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2g7XG5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChtYXRjaCk7XG4gIH0pO1xuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKTtcblxuICByZXR1cm4gcHJvdG9jb2wgKyBob3N0ICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xufTtcblxuZnVuY3Rpb24gdXJsUmVzb2x2ZShzb3VyY2UsIHJlbGF0aXZlKSB7XG4gIHJldHVybiB1cmxQYXJzZShzb3VyY2UsIGZhbHNlLCB0cnVlKS5yZXNvbHZlKHJlbGF0aXZlKTtcbn1cblxuVXJsLnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24ocmVsYXRpdmUpIHtcbiAgcmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdCh1cmxQYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpKS5mb3JtYXQoKTtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmVPYmplY3Qoc291cmNlLCByZWxhdGl2ZSkge1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHJlbGF0aXZlO1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZU9iamVjdChyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIGlmIChpc1N0cmluZyhyZWxhdGl2ZSkpIHtcbiAgICB2YXIgcmVsID0gbmV3IFVybCgpO1xuICAgIHJlbC5wYXJzZShyZWxhdGl2ZSwgZmFsc2UsIHRydWUpO1xuICAgIHJlbGF0aXZlID0gcmVsO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG5ldyBVcmwoKTtcbiAgT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgcmVzdWx0W2tdID0gdGhpc1trXTtcbiAgfSwgdGhpcyk7XG5cbiAgLy8gaGFzaCBpcyBhbHdheXMgb3ZlcnJpZGRlbiwgbm8gbWF0dGVyIHdoYXQuXG4gIC8vIGV2ZW4gaHJlZj1cIlwiIHdpbGwgcmVtb3ZlIGl0LlxuICByZXN1bHQuaGFzaCA9IHJlbGF0aXZlLmhhc2g7XG5cbiAgLy8gaWYgdGhlIHJlbGF0aXZlIHVybCBpcyBlbXB0eSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkbyBoZXJlLlxuICBpZiAocmVsYXRpdmUuaHJlZiA9PT0gJycpIHtcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gaHJlZnMgbGlrZSAvL2Zvby9iYXIgYWx3YXlzIGN1dCB0byB0aGUgcHJvdG9jb2wuXG4gIGlmIChyZWxhdGl2ZS5zbGFzaGVzICYmICFyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgIC8vIHRha2UgZXZlcnl0aGluZyBleGNlcHQgdGhlIHByb3RvY29sIGZyb20gcmVsYXRpdmVcbiAgICBPYmplY3Qua2V5cyhyZWxhdGl2ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICBpZiAoayAhPT0gJ3Byb3RvY29sJylcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgfSk7XG5cbiAgICAvL3VybFBhcnNlIGFwcGVuZHMgdHJhaWxpbmcgLyB0byB1cmxzIGxpa2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbVxuICAgIGlmIChzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXSAmJlxuICAgICAgICByZXN1bHQuaG9zdG5hbWUgJiYgIXJlc3VsdC5wYXRobmFtZSkge1xuICAgICAgcmVzdWx0LnBhdGggPSByZXN1bHQucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuXG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChyZWxhdGl2ZS5wcm90b2NvbCAmJiByZWxhdGl2ZS5wcm90b2NvbCAhPT0gcmVzdWx0LnByb3RvY29sKSB7XG4gICAgLy8gaWYgaXQncyBhIGtub3duIHVybCBwcm90b2NvbCwgdGhlbiBjaGFuZ2luZ1xuICAgIC8vIHRoZSBwcm90b2NvbCBkb2VzIHdlaXJkIHRoaW5nc1xuICAgIC8vIGZpcnN0LCBpZiBpdCdzIG5vdCBmaWxlOiwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBob3N0LFxuICAgIC8vIGFuZCBpZiB0aGVyZSB3YXMgYSBwYXRoXG4gICAgLy8gdG8gYmVnaW4gd2l0aCwgdGhlbiB3ZSBNVVNUIGhhdmUgYSBwYXRoLlxuICAgIC8vIGlmIGl0IGlzIGZpbGU6LCB0aGVuIHRoZSBob3N0IGlzIGRyb3BwZWQsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mga25vd24gdG8gYmUgaG9zdGxlc3MuXG4gICAgLy8gYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHRvIGJlIGFic29sdXRlLlxuICAgIGlmICghc2xhc2hlZFByb3RvY29sW3JlbGF0aXZlLnByb3RvY29sXSkge1xuICAgICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICByZXN1bHRba10gPSByZWxhdGl2ZVtrXTtcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJlc3VsdC5wcm90b2NvbCA9IHJlbGF0aXZlLnByb3RvY29sO1xuICAgIGlmICghcmVsYXRpdmUuaG9zdCAmJiAhaG9zdGxlc3NQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIHZhciByZWxQYXRoID0gKHJlbGF0aXZlLnBhdGhuYW1lIHx8ICcnKS5zcGxpdCgnLycpO1xuICAgICAgd2hpbGUgKHJlbFBhdGgubGVuZ3RoICYmICEocmVsYXRpdmUuaG9zdCA9IHJlbFBhdGguc2hpZnQoKSkpO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0KSByZWxhdGl2ZS5ob3N0ID0gJyc7XG4gICAgICBpZiAoIXJlbGF0aXZlLmhvc3RuYW1lKSByZWxhdGl2ZS5ob3N0bmFtZSA9ICcnO1xuICAgICAgaWYgKHJlbFBhdGhbMF0gIT09ICcnKSByZWxQYXRoLnVuc2hpZnQoJycpO1xuICAgICAgaWYgKHJlbFBhdGgubGVuZ3RoIDwgMikgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIHJlc3VsdC5wYXRobmFtZSA9IHJlbFBhdGguam9pbignLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxhdGl2ZS5wYXRobmFtZTtcbiAgICB9XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgICByZXN1bHQuaG9zdCA9IHJlbGF0aXZlLmhvc3QgfHwgJyc7XG4gICAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoO1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3Q7XG4gICAgcmVzdWx0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuICAgIC8vIHRvIHN1cHBvcnQgaHR0cC5yZXF1ZXN0XG4gICAgaWYgKHJlc3VsdC5wYXRobmFtZSB8fCByZXN1bHQuc2VhcmNoKSB7XG4gICAgICB2YXIgcCA9IHJlc3VsdC5wYXRobmFtZSB8fCAnJztcbiAgICAgIHZhciBzID0gcmVzdWx0LnNlYXJjaCB8fCAnJztcbiAgICAgIHJlc3VsdC5wYXRoID0gcCArIHM7XG4gICAgfVxuICAgIHJlc3VsdC5zbGFzaGVzID0gcmVzdWx0LnNsYXNoZXMgfHwgcmVsYXRpdmUuc2xhc2hlcztcbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIGlzU291cmNlQWJzID0gKHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpLFxuICAgICAgaXNSZWxBYnMgPSAoXG4gICAgICAgICAgcmVsYXRpdmUuaG9zdCB8fFxuICAgICAgICAgIHJlbGF0aXZlLnBhdGhuYW1lICYmIHJlbGF0aXZlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgICApLFxuICAgICAgbXVzdEVuZEFicyA9IChpc1JlbEFicyB8fCBpc1NvdXJjZUFicyB8fFxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0Lmhvc3QgJiYgcmVsYXRpdmUucGF0aG5hbWUpKSxcbiAgICAgIHJlbW92ZUFsbERvdHMgPSBtdXN0RW5kQWJzLFxuICAgICAgc3JjUGF0aCA9IHJlc3VsdC5wYXRobmFtZSAmJiByZXN1bHQucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHJlbFBhdGggPSByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5zcGxpdCgnLycpIHx8IFtdLFxuICAgICAgcHN5Y2hvdGljID0gcmVzdWx0LnByb3RvY29sICYmICFzbGFzaGVkUHJvdG9jb2xbcmVzdWx0LnByb3RvY29sXTtcblxuICAvLyBpZiB0aGUgdXJsIGlzIGEgbm9uLXNsYXNoZWQgdXJsLCB0aGVuIHJlbGF0aXZlXG4gIC8vIGxpbmtzIGxpa2UgLi4vLi4gc2hvdWxkIGJlIGFibGVcbiAgLy8gdG8gY3Jhd2wgdXAgdG8gdGhlIGhvc3RuYW1lLCBhcyB3ZWxsLiAgVGhpcyBpcyBzdHJhbmdlLlxuICAvLyByZXN1bHQucHJvdG9jb2wgaGFzIGFscmVhZHkgYmVlbiBzZXQgYnkgbm93LlxuICAvLyBMYXRlciBvbiwgcHV0IHRoZSBmaXJzdCBwYXRoIHBhcnQgaW50byB0aGUgaG9zdCBmaWVsZC5cbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9ICcnO1xuICAgIHJlc3VsdC5wb3J0ID0gbnVsbDtcbiAgICBpZiAocmVzdWx0Lmhvc3QpIHtcbiAgICAgIGlmIChzcmNQYXRoWzBdID09PSAnJykgc3JjUGF0aFswXSA9IHJlc3VsdC5ob3N0O1xuICAgICAgZWxzZSBzcmNQYXRoLnVuc2hpZnQocmVzdWx0Lmhvc3QpO1xuICAgIH1cbiAgICByZXN1bHQuaG9zdCA9ICcnO1xuICAgIGlmIChyZWxhdGl2ZS5wcm90b2NvbCkge1xuICAgICAgcmVsYXRpdmUuaG9zdG5hbWUgPSBudWxsO1xuICAgICAgcmVsYXRpdmUucG9ydCA9IG51bGw7XG4gICAgICBpZiAocmVsYXRpdmUuaG9zdCkge1xuICAgICAgICBpZiAocmVsUGF0aFswXSA9PT0gJycpIHJlbFBhdGhbMF0gPSByZWxhdGl2ZS5ob3N0O1xuICAgICAgICBlbHNlIHJlbFBhdGgudW5zaGlmdChyZWxhdGl2ZS5ob3N0KTtcbiAgICAgIH1cbiAgICAgIHJlbGF0aXZlLmhvc3QgPSBudWxsO1xuICAgIH1cbiAgICBtdXN0RW5kQWJzID0gbXVzdEVuZEFicyAmJiAocmVsUGF0aFswXSA9PT0gJycgfHwgc3JjUGF0aFswXSA9PT0gJycpO1xuICB9XG5cbiAgaWYgKGlzUmVsQWJzKSB7XG4gICAgLy8gaXQncyBhYnNvbHV0ZS5cbiAgICByZXN1bHQuaG9zdCA9IChyZWxhdGl2ZS5ob3N0IHx8IHJlbGF0aXZlLmhvc3QgPT09ICcnKSA/XG4gICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0IDogcmVzdWx0Lmhvc3Q7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gKHJlbGF0aXZlLmhvc3RuYW1lIHx8IHJlbGF0aXZlLmhvc3RuYW1lID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlLmhvc3RuYW1lIDogcmVzdWx0Lmhvc3RuYW1lO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgc3JjUGF0aCA9IHJlbFBhdGg7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBkb3QtaGFuZGxpbmcgYmVsb3cuXG4gIH0gZWxzZSBpZiAocmVsUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBpdCdzIHJlbGF0aXZlXG4gICAgLy8gdGhyb3cgYXdheSB0aGUgZXhpc3RpbmcgZmlsZSwgYW5kIHRha2UgdGhlIG5ldyBwYXRoIGluc3RlYWQuXG4gICAgaWYgKCFzcmNQYXRoKSBzcmNQYXRoID0gW107XG4gICAgc3JjUGF0aC5wb3AoKTtcbiAgICBzcmNQYXRoID0gc3JjUGF0aC5jb25jYXQocmVsUGF0aCk7XG4gICAgcmVzdWx0LnNlYXJjaCA9IHJlbGF0aXZlLnNlYXJjaDtcbiAgICByZXN1bHQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcbiAgfSBlbHNlIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVsYXRpdmUuc2VhcmNoKSkge1xuICAgIC8vIGp1c3QgcHVsbCBvdXQgdGhlIHNlYXJjaC5cbiAgICAvLyBsaWtlIGhyZWY9Jz9mb28nLlxuICAgIC8vIFB1dCB0aGlzIGFmdGVyIHRoZSBvdGhlciB0d28gY2FzZXMgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBib29sZWFuc1xuICAgIGlmIChwc3ljaG90aWMpIHtcbiAgICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gc3JjUGF0aC5zaGlmdCgpO1xuICAgICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAgIC8vdXJsLnJlc29sdmVPYmplY3QoJ21haWx0bzpsb2NhbDFAZG9tYWluMScsICdsb2NhbDJAZG9tYWluMicpXG4gICAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgICBpZiAoYXV0aEluSG9zdCkge1xuICAgICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgICAgcmVzdWx0LnBhdGggPSAocmVzdWx0LnBhdGhuYW1lID8gcmVzdWx0LnBhdGhuYW1lIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICAgIH1cbiAgICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIC8vIG5vIHBhdGggYXQgYWxsLiAgZWFzeS5cbiAgICAvLyB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIG90aGVyIHN0dWZmIGFib3ZlLlxuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQuc2VhcmNoKSB7XG4gICAgICByZXN1bHQucGF0aCA9ICcvJyArIHJlc3VsdC5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gbnVsbDtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGlmIGEgdXJsIEVORHMgaW4gLiBvciAuLiwgdGhlbiBpdCBtdXN0IGdldCBhIHRyYWlsaW5nIHNsYXNoLlxuICAvLyBob3dldmVyLCBpZiBpdCBlbmRzIGluIGFueXRoaW5nIGVsc2Ugbm9uLXNsYXNoeSxcbiAgLy8gdGhlbiBpdCBtdXN0IE5PVCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgdmFyIGxhc3QgPSBzcmNQYXRoLnNsaWNlKC0xKVswXTtcbiAgdmFyIGhhc1RyYWlsaW5nU2xhc2ggPSAoXG4gICAgICAocmVzdWx0Lmhvc3QgfHwgcmVsYXRpdmUuaG9zdCkgJiYgKGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nKSB8fFxuICAgICAgbGFzdCA9PT0gJycpO1xuXG4gIC8vIHN0cmlwIHNpbmdsZSBkb3RzLCByZXNvbHZlIGRvdWJsZSBkb3RzIHRvIHBhcmVudCBkaXJcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgdmFyIHVwID0gMDtcbiAgZm9yICh2YXIgaSA9IHNyY1BhdGgubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIGxhc3QgPSBzcmNQYXRoW2ldO1xuICAgIGlmIChsYXN0ID09ICcuJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBzcmNQYXRoLnNwbGljZShpLCAxKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHRoZSBwYXRoIGlzIGFsbG93ZWQgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIHJlc3RvcmUgbGVhZGluZyAuLnNcbiAgaWYgKCFtdXN0RW5kQWJzICYmICFyZW1vdmVBbGxEb3RzKSB7XG4gICAgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgICBzcmNQYXRoLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgc3JjUGF0aFswXSAhPT0gJycgJiZcbiAgICAgICghc3JjUGF0aFswXSB8fCBzcmNQYXRoWzBdLmNoYXJBdCgwKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoaGFzVHJhaWxpbmdTbGFzaCAmJiAoc3JjUGF0aC5qb2luKCcvJykuc3Vic3RyKC0xKSAhPT0gJy8nKSkge1xuICAgIHNyY1BhdGgucHVzaCgnJyk7XG4gIH1cblxuICB2YXIgaXNBYnNvbHV0ZSA9IHNyY1BhdGhbMF0gPT09ICcnIHx8XG4gICAgICAoc3JjUGF0aFswXSAmJiBzcmNQYXRoWzBdLmNoYXJBdCgwKSA9PT0gJy8nKTtcblxuICAvLyBwdXQgdGhlIGhvc3QgYmFja1xuICBpZiAocHN5Y2hvdGljKSB7XG4gICAgcmVzdWx0Lmhvc3RuYW1lID0gcmVzdWx0Lmhvc3QgPSBpc0Fic29sdXRlID8gJycgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGF0aC5sZW5ndGggPyBzcmNQYXRoLnNoaWZ0KCkgOiAnJztcbiAgICAvL29jY2F0aW9uYWx5IHRoZSBhdXRoIGNhbiBnZXQgc3R1Y2sgb25seSBpbiBob3N0XG4gICAgLy90aGlzIGVzcGVjaWFseSBoYXBwZW5zIGluIGNhc2VzIGxpa2VcbiAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgIHZhciBhdXRoSW5Ib3N0ID0gcmVzdWx0Lmhvc3QgJiYgcmVzdWx0Lmhvc3QuaW5kZXhPZignQCcpID4gMCA/XG4gICAgICAgICAgICAgICAgICAgICByZXN1bHQuaG9zdC5zcGxpdCgnQCcpIDogZmFsc2U7XG4gICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgIHJlc3VsdC5hdXRoID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgcmVzdWx0Lmhvc3QgPSByZXN1bHQuaG9zdG5hbWUgPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgfHwgKHJlc3VsdC5ob3N0ICYmIHNyY1BhdGgubGVuZ3RoKTtcblxuICBpZiAobXVzdEVuZEFicyAmJiAhaXNBYnNvbHV0ZSkge1xuICAgIHNyY1BhdGgudW5zaGlmdCgnJyk7XG4gIH1cblxuICBpZiAoIXNyY1BhdGgubGVuZ3RoKSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gbnVsbDtcbiAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LnBhdGhuYW1lID0gc3JjUGF0aC5qb2luKCcvJyk7XG4gIH1cblxuICAvL3RvIHN1cHBvcnQgcmVxdWVzdC5odHRwXG4gIGlmICghaXNOdWxsKHJlc3VsdC5wYXRobmFtZSkgfHwgIWlzTnVsbChyZXN1bHQuc2VhcmNoKSkge1xuICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocmVzdWx0LnNlYXJjaCA/IHJlc3VsdC5zZWFyY2ggOiAnJyk7XG4gIH1cbiAgcmVzdWx0LmF1dGggPSByZWxhdGl2ZS5hdXRoIHx8IHJlc3VsdC5hdXRoO1xuICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuVXJsLnByb3RvdHlwZS5wYXJzZUhvc3QgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gIHZhciBwb3J0ID0gcG9ydFBhdHRlcm4uZXhlYyhob3N0KTtcbiAgaWYgKHBvcnQpIHtcbiAgICBwb3J0ID0gcG9ydFswXTtcbiAgICBpZiAocG9ydCAhPT0gJzonKSB7XG4gICAgICB0aGlzLnBvcnQgPSBwb3J0LnN1YnN0cigxKTtcbiAgICB9XG4gICAgaG9zdCA9IGhvc3Quc3Vic3RyKDAsIGhvc3QubGVuZ3RoIC0gcG9ydC5sZW5ndGgpO1xuICB9XG4gIGlmIChob3N0KSB0aGlzLmhvc3RuYW1lID0gaG9zdDtcbn07XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIjtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gIGFyZyA9PSBudWxsO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsIihmdW5jdGlvbiAocHJvY2VzcyxnbG9iYWwpe1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBmb3JtYXRSZWdFeHAgPSAvJVtzZGolXS9nO1xuZXhwb3J0cy5mb3JtYXQgPSBmdW5jdGlvbihmKSB7XG4gIGlmICghaXNTdHJpbmcoZikpIHtcbiAgICB2YXIgb2JqZWN0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goaW5zcGVjdChhcmd1bWVudHNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdHMuam9pbignICcpO1xuICB9XG5cbiAgdmFyIGkgPSAxO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgc3RyID0gU3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLCBmdW5jdGlvbih4KSB7XG4gICAgaWYgKHggPT09ICclJScpIHJldHVybiAnJSc7XG4gICAgaWYgKGkgPj0gbGVuKSByZXR1cm4geDtcbiAgICBzd2l0Y2ggKHgpIHtcbiAgICAgIGNhc2UgJyVzJzogcmV0dXJuIFN0cmluZyhhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWQnOiByZXR1cm4gTnVtYmVyKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclaic6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3NbaSsrXSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICBmb3IgKHZhciB4ID0gYXJnc1tpXTsgaSA8IGxlbjsgeCA9IGFyZ3NbKytpXSkge1xuICAgIGlmIChpc051bGwoeCkgfHwgIWlzT2JqZWN0KHgpKSB7XG4gICAgICBzdHIgKz0gJyAnICsgeDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9ICcgJyArIGluc3BlY3QoeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8vIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4vLyBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuLy8gSWYgLS1uby1kZXByZWNhdGlvbiBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbmV4cG9ydHMuZGVwcmVjYXRlID0gZnVuY3Rpb24oZm4sIG1zZykge1xuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAoaXNVbmRlZmluZWQoZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLCBtc2cpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSlcbiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWljbTkzYzJWeWFXWjVMMjV2WkdWZmJXOWtkV3hsY3k5MWRHbHNMM1YwYVd3dWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqdEJRVUZCTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4dklFTnZjSGx5YVdkb2RDQktiM2xsYm5Rc0lFbHVZeTRnWVc1a0lHOTBhR1Z5SUU1dlpHVWdZMjl1ZEhKcFluVjBiM0p6TGx4dUx5OWNiaTh2SUZCbGNtMXBjM05wYjI0Z2FYTWdhR1Z5WldKNUlHZHlZVzUwWldRc0lHWnlaV1VnYjJZZ1kyaGhjbWRsTENCMGJ5QmhibmtnY0dWeWMyOXVJRzlpZEdGcGJtbHVaeUJoWEc0dkx5QmpiM0I1SUc5bUlIUm9hWE1nYzI5bWRIZGhjbVVnWVc1a0lHRnpjMjlqYVdGMFpXUWdaRzlqZFcxbGJuUmhkR2x2YmlCbWFXeGxjeUFvZEdobFhHNHZMeUJjSWxOdlpuUjNZWEpsWENJcExDQjBieUJrWldGc0lHbHVJSFJvWlNCVGIyWjBkMkZ5WlNCM2FYUm9iM1YwSUhKbGMzUnlhV04wYVc5dUxDQnBibU5zZFdScGJtZGNiaTh2SUhkcGRHaHZkWFFnYkdsdGFYUmhkR2x2YmlCMGFHVWdjbWxuYUhSeklIUnZJSFZ6WlN3Z1kyOXdlU3dnYlc5a2FXWjVMQ0J0WlhKblpTd2djSFZpYkdsemFDeGNiaTh2SUdScGMzUnlhV0oxZEdVc0lITjFZbXhwWTJWdWMyVXNJR0Z1WkM5dmNpQnpaV3hzSUdOdmNHbGxjeUJ2WmlCMGFHVWdVMjltZEhkaGNtVXNJR0Z1WkNCMGJ5QndaWEp0YVhSY2JpOHZJSEJsY25OdmJuTWdkRzhnZDJodmJTQjBhR1VnVTI5bWRIZGhjbVVnYVhNZ1puVnlibWx6YUdWa0lIUnZJR1J2SUhOdkxDQnpkV0pxWldOMElIUnZJSFJvWlZ4dUx5OGdabTlzYkc5M2FXNW5JR052Ym1ScGRHbHZibk02WEc0dkwxeHVMeThnVkdobElHRmliM1psSUdOdmNIbHlhV2RvZENCdWIzUnBZMlVnWVc1a0lIUm9hWE1nY0dWeWJXbHpjMmx2YmlCdWIzUnBZMlVnYzJoaGJHd2dZbVVnYVc1amJIVmtaV1JjYmk4dklHbHVJR0ZzYkNCamIzQnBaWE1nYjNJZ2MzVmljM1JoYm5ScFlXd2djRzl5ZEdsdmJuTWdiMllnZEdobElGTnZablIzWVhKbExseHVMeTljYmk4dklGUklSU0JUVDBaVVYwRlNSU0JKVXlCUVVrOVdTVVJGUkNCY0lrRlRJRWxUWENJc0lGZEpWRWhQVlZRZ1YwRlNVa0ZPVkZrZ1QwWWdRVTVaSUV0SlRrUXNJRVZZVUZKRlUxTmNiaTh2SUU5U0lFbE5VRXhKUlVRc0lFbE9RMHhWUkVsT1J5QkNWVlFnVGs5VUlFeEpUVWxVUlVRZ1ZFOGdWRWhGSUZkQlVsSkJUbFJKUlZNZ1QwWmNiaTh2SUUxRlVrTklRVTVVUVVKSlRFbFVXU3dnUmtsVVRrVlRVeUJHVDFJZ1FTQlFRVkpVU1VOVlRFRlNJRkJWVWxCUFUwVWdRVTVFSUU1UFRrbE9SbEpKVGtkRlRVVk9WQzRnU1U1Y2JpOHZJRTVQSUVWV1JVNVVJRk5JUVV4TUlGUklSU0JCVlZSSVQxSlRJRTlTSUVOUFVGbFNTVWRJVkNCSVQweEVSVkpUSUVKRklFeEpRVUpNUlNCR1QxSWdRVTVaSUVOTVFVbE5MRnh1THk4Z1JFRk5RVWRGVXlCUFVpQlBWRWhGVWlCTVNVRkNTVXhKVkZrc0lGZElSVlJJUlZJZ1NVNGdRVTRnUVVOVVNVOU9JRTlHSUVOUFRsUlNRVU5VTENCVVQxSlVJRTlTWEc0dkx5QlBWRWhGVWxkSlUwVXNJRUZTU1ZOSlRrY2dSbEpQVFN3Z1QxVlVJRTlHSUU5U0lFbE9JRU5QVGs1RlExUkpUMDRnVjBsVVNDQlVTRVVnVTA5R1ZGZEJVa1VnVDFJZ1ZFaEZYRzR2THlCVlUwVWdUMUlnVDFSSVJWSWdSRVZCVEVsT1IxTWdTVTRnVkVoRklGTlBSbFJYUVZKRkxseHVYRzUyWVhJZ1ptOXliV0YwVW1WblJYaHdJRDBnTHlWYmMyUnFKVjB2Wnp0Y2JtVjRjRzl5ZEhNdVptOXliV0YwSUQwZ1puVnVZM1JwYjI0b1ppa2dlMXh1SUNCcFppQW9JV2x6VTNSeWFXNW5LR1lwS1NCN1hHNGdJQ0FnZG1GeUlHOWlhbVZqZEhNZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2FTQThJR0Z5WjNWdFpXNTBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2IySnFaV04wY3k1d2RYTm9LR2x1YzNCbFkzUW9ZWEpuZFcxbGJuUnpXMmxkS1NrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnZZbXBsWTNSekxtcHZhVzRvSnlBbktUdGNiaUFnZlZ4dVhHNGdJSFpoY2lCcElEMGdNVHRjYmlBZ2RtRnlJR0Z5WjNNZ1BTQmhjbWQxYldWdWRITTdYRzRnSUhaaGNpQnNaVzRnUFNCaGNtZHpMbXhsYm1kMGFEdGNiaUFnZG1GeUlITjBjaUE5SUZOMGNtbHVaeWhtS1M1eVpYQnNZV05sS0dadmNtMWhkRkpsWjBWNGNDd2dablZ1WTNScGIyNG9lQ2tnZTF4dUlDQWdJR2xtSUNoNElEMDlQU0FuSlNVbktTQnlaWFIxY200Z0p5VW5PMXh1SUNBZ0lHbG1JQ2hwSUQ0OUlHeGxiaWtnY21WMGRYSnVJSGc3WEc0Z0lDQWdjM2RwZEdOb0lDaDRLU0I3WEc0Z0lDQWdJQ0JqWVhObElDY2xjeWM2SUhKbGRIVnliaUJUZEhKcGJtY29ZWEpuYzF0cEt5dGRLVHRjYmlBZ0lDQWdJR05oYzJVZ0p5VmtKem9nY21WMGRYSnVJRTUxYldKbGNpaGhjbWR6VzJrcksxMHBPMXh1SUNBZ0lDQWdZMkZ6WlNBbkpXb25PbHh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQktVMDlPTG5OMGNtbHVaMmxtZVNoaGNtZHpXMmtySzEwcE8xeHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGZLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUNkYlEybHlZM1ZzWVhKZEp6dGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdaR1ZtWVhWc2REcGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIZzdYRzRnSUNBZ2ZWeHVJQ0I5S1R0Y2JpQWdabTl5SUNoMllYSWdlQ0E5SUdGeVozTmJhVjA3SUdrZ1BDQnNaVzQ3SUhnZ1BTQmhjbWR6V3lzcmFWMHBJSHRjYmlBZ0lDQnBaaUFvYVhOT2RXeHNLSGdwSUh4OElDRnBjMDlpYW1WamRDaDRLU2tnZTF4dUlDQWdJQ0FnYzNSeUlDczlJQ2NnSnlBcklIZzdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhOMGNpQXJQU0FuSUNjZ0t5QnBibk53WldOMEtIZ3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dUlDQnlaWFIxY200Z2MzUnlPMXh1ZlR0Y2JseHVYRzR2THlCTllYSnJJSFJvWVhRZ1lTQnRaWFJvYjJRZ2MyaHZkV3hrSUc1dmRDQmlaU0IxYzJWa0xseHVMeThnVW1WMGRYSnVjeUJoSUcxdlpHbG1hV1ZrSUdaMWJtTjBhVzl1SUhkb2FXTm9JSGRoY201eklHOXVZMlVnWW5rZ1pHVm1ZWFZzZEM1Y2JpOHZJRWxtSUMwdGJtOHRaR1Z3Y21WallYUnBiMjRnYVhNZ2MyVjBMQ0IwYUdWdUlHbDBJR2x6SUdFZ2JtOHRiM0F1WEc1bGVIQnZjblJ6TG1SbGNISmxZMkYwWlNBOUlHWjFibU4wYVc5dUtHWnVMQ0J0YzJjcElIdGNiaUFnTHk4Z1FXeHNiM2NnWm05eUlHUmxjSEpsWTJGMGFXNW5JSFJvYVc1bmN5QnBiaUIwYUdVZ2NISnZZMlZ6Y3lCdlppQnpkR0Z5ZEdsdVp5QjFjQzVjYmlBZ2FXWWdLR2x6Vlc1a1pXWnBibVZrS0dkc2IySmhiQzV3Y205alpYTnpLU2tnZTF4dUlDQWdJSEpsZEhWeWJpQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmxlSEJ2Y25SekxtUmxjSEpsWTJGMFpTaG1iaXdnYlhObktTNWhjSEJzZVNoMGFHbHpMQ0JoY21kMWJXVnVkSE1wTzF4dUlDQWdJSDA3WEc0Z0lIMWNibHh1SUNCcFppQW9jSEp2WTJWemN5NXViMFJsY0hKbFkyRjBhVzl1SUQwOVBTQjBjblZsS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1p1TzF4dUlDQjlYRzVjYmlBZ2RtRnlJSGRoY201bFpDQTlJR1poYkhObE8xeHVJQ0JtZFc1amRHbHZiaUJrWlhCeVpXTmhkR1ZrS0NrZ2UxeHVJQ0FnSUdsbUlDZ2hkMkZ5Ym1Wa0tTQjdYRzRnSUNBZ0lDQnBaaUFvY0hKdlkyVnpjeTUwYUhKdmQwUmxjSEpsWTJGMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWh0YzJjcE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaHdjbTlqWlhOekxuUnlZV05sUkdWd2NtVmpZWFJwYjI0cElIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNTBjbUZqWlNodGMyY3BPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdZMjl1YzI5c1pTNWxjbkp2Y2lodGMyY3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkMkZ5Ym1Wa0lEMGdkSEoxWlR0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHWnVMbUZ3Y0d4NUtIUm9hWE1zSUdGeVozVnRaVzUwY3lrN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z1pHVndjbVZqWVhSbFpEdGNibjA3WEc1Y2JseHVkbUZ5SUdSbFluVm5jeUE5SUh0OU8xeHVkbUZ5SUdSbFluVm5SVzUyYVhKdmJqdGNibVY0Y0c5eWRITXVaR1ZpZFdkc2IyY2dQU0JtZFc1amRHbHZiaWh6WlhRcElIdGNiaUFnYVdZZ0tHbHpWVzVrWldacGJtVmtLR1JsWW5WblJXNTJhWEp2YmlrcFhHNGdJQ0FnWkdWaWRXZEZiblpwY205dUlEMGdjSEp2WTJWemN5NWxibll1VGs5RVJWOUVSVUpWUnlCOGZDQW5KenRjYmlBZ2MyVjBJRDBnYzJWMExuUnZWWEJ3WlhKRFlYTmxLQ2s3WEc0Z0lHbG1JQ2doWkdWaWRXZHpXM05sZEYwcElIdGNiaUFnSUNCcFppQW9ibVYzSUZKbFowVjRjQ2duWEZ4Y1hHSW5JQ3NnYzJWMElDc2dKMXhjWEZ4aUp5d2dKMmtuS1M1MFpYTjBLR1JsWW5WblJXNTJhWEp2YmlrcElIdGNiaUFnSUNBZ0lIWmhjaUJ3YVdRZ1BTQndjbTlqWlhOekxuQnBaRHRjYmlBZ0lDQWdJR1JsWW5WbmMxdHpaWFJkSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJSFpoY2lCdGMyY2dQU0JsZUhCdmNuUnpMbVp2Y20xaGRDNWhjSEJzZVNobGVIQnZjblJ6TENCaGNtZDFiV1Z1ZEhNcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0NjbGN5QWxaRG9nSlhNbkxDQnpaWFFzSUhCcFpDd2diWE5uS1R0Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR1JsWW5WbmMxdHpaWFJkSUQwZ1puVnVZM1JwYjI0b0tTQjdmVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlHUmxZblZuYzF0elpYUmRPMXh1ZlR0Y2JseHVYRzR2S2lwY2JpQXFJRVZqYUc5eklIUm9aU0IyWVd4MVpTQnZaaUJoSUhaaGJIVmxMaUJVY25seklIUnZJSEJ5YVc1MElIUm9aU0IyWVd4MVpTQnZkWFJjYmlBcUlHbHVJSFJvWlNCaVpYTjBJSGRoZVNCd2IzTnphV0pzWlNCbmFYWmxiaUIwYUdVZ1pHbG1abVZ5Wlc1MElIUjVjR1Z6TGx4dUlDcGNiaUFxSUVCd1lYSmhiU0I3VDJKcVpXTjBmU0J2WW1vZ1ZHaGxJRzlpYW1WamRDQjBieUJ3Y21sdWRDQnZkWFF1WEc0Z0tpQkFjR0Z5WVcwZ2UwOWlhbVZqZEgwZ2IzQjBjeUJQY0hScGIyNWhiQ0J2Y0hScGIyNXpJRzlpYW1WamRDQjBhR0YwSUdGc2RHVnljeUIwYUdVZ2IzVjBjSFYwTGx4dUlDb3ZYRzR2S2lCc1pXZGhZM2s2SUc5aWFpd2djMmh2ZDBocFpHUmxiaXdnWkdWd2RHZ3NJR052Ykc5eWN5b3ZYRzVtZFc1amRHbHZiaUJwYm5Od1pXTjBLRzlpYWl3Z2IzQjBjeWtnZTF4dUlDQXZMeUJrWldaaGRXeDBJRzl3ZEdsdmJuTmNiaUFnZG1GeUlHTjBlQ0E5SUh0Y2JpQWdJQ0J6WldWdU9pQmJYU3hjYmlBZ0lDQnpkSGxzYVhwbE9pQnpkSGxzYVhwbFRtOURiMnh2Y2x4dUlDQjlPMXh1SUNBdkx5QnNaV2RoWTNrdUxpNWNiaUFnYVdZZ0tHRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnZ1BqMGdNeWtnWTNSNExtUmxjSFJvSUQwZ1lYSm5kVzFsYm5Seld6SmRPMXh1SUNCcFppQW9ZWEpuZFcxbGJuUnpMbXhsYm1kMGFDQStQU0EwS1NCamRIZ3VZMjlzYjNKeklEMGdZWEpuZFcxbGJuUnpXek5kTzF4dUlDQnBaaUFvYVhOQ2IyOXNaV0Z1S0c5d2RITXBLU0I3WEc0Z0lDQWdMeThnYkdWbllXTjVMaTR1WEc0Z0lDQWdZM1I0TG5Ob2IzZElhV1JrWlc0Z1BTQnZjSFJ6TzF4dUlDQjlJR1ZzYzJVZ2FXWWdLRzl3ZEhNcElIdGNiaUFnSUNBdkx5Qm5iM1FnWVc0Z1hDSnZjSFJwYjI1elhDSWdiMkpxWldOMFhHNGdJQ0FnWlhod2IzSjBjeTVmWlhoMFpXNWtLR04wZUN3Z2IzQjBjeWs3WEc0Z0lIMWNiaUFnTHk4Z2MyVjBJR1JsWm1GMWJIUWdiM0IwYVc5dWMxeHVJQ0JwWmlBb2FYTlZibVJsWm1sdVpXUW9ZM1I0TG5Ob2IzZElhV1JrWlc0cEtTQmpkSGd1YzJodmQwaHBaR1JsYmlBOUlHWmhiSE5sTzF4dUlDQnBaaUFvYVhOVmJtUmxabWx1WldRb1kzUjRMbVJsY0hSb0tTa2dZM1I0TG1SbGNIUm9JRDBnTWp0Y2JpQWdhV1lnS0dselZXNWtaV1pwYm1Wa0tHTjBlQzVqYjJ4dmNuTXBLU0JqZEhndVkyOXNiM0p6SUQwZ1ptRnNjMlU3WEc0Z0lHbG1JQ2hwYzFWdVpHVm1hVzVsWkNoamRIZ3VZM1Z6ZEc5dFNXNXpjR1ZqZENrcElHTjBlQzVqZFhOMGIyMUpibk53WldOMElEMGdkSEoxWlR0Y2JpQWdhV1lnS0dOMGVDNWpiMnh2Y25NcElHTjBlQzV6ZEhsc2FYcGxJRDBnYzNSNWJHbDZaVmRwZEdoRGIyeHZjanRjYmlBZ2NtVjBkWEp1SUdadmNtMWhkRlpoYkhWbEtHTjBlQ3dnYjJKcUxDQmpkSGd1WkdWd2RHZ3BPMXh1ZlZ4dVpYaHdiM0owY3k1cGJuTndaV04wSUQwZ2FXNXpjR1ZqZER0Y2JseHVYRzR2THlCb2RIUndPaTh2Wlc0dWQybHJhWEJsWkdsaExtOXlaeTkzYVd0cEwwRk9VMGxmWlhOallYQmxYMk52WkdValozSmhjR2hwWTNOY2JtbHVjM0JsWTNRdVkyOXNiM0p6SUQwZ2UxeHVJQ0FuWW05c1pDY2dPaUJiTVN3Z01qSmRMRnh1SUNBbmFYUmhiR2xqSnlBNklGc3pMQ0F5TTEwc1hHNGdJQ2QxYm1SbGNteHBibVVuSURvZ1d6UXNJREkwWFN4Y2JpQWdKMmx1ZG1WeWMyVW5JRG9nV3pjc0lESTNYU3hjYmlBZ0ozZG9hWFJsSnlBNklGc3pOeXdnTXpsZExGeHVJQ0FuWjNKbGVTY2dPaUJiT1RBc0lETTVYU3hjYmlBZ0oySnNZV05ySnlBNklGc3pNQ3dnTXpsZExGeHVJQ0FuWW14MVpTY2dPaUJiTXpRc0lETTVYU3hjYmlBZ0oyTjVZVzRuSURvZ1d6TTJMQ0F6T1Ywc1hHNGdJQ2RuY21WbGJpY2dPaUJiTXpJc0lETTVYU3hjYmlBZ0oyMWhaMlZ1ZEdFbklEb2dXek0xTENBek9WMHNYRzRnSUNkeVpXUW5JRG9nV3pNeExDQXpPVjBzWEc0Z0lDZDVaV3hzYjNjbklEb2dXek16TENBek9WMWNibjA3WEc1Y2JpOHZJRVJ2YmlkMElIVnpaU0FuWW14MVpTY2dibTkwSUhacGMybGliR1VnYjI0Z1kyMWtMbVY0WlZ4dWFXNXpjR1ZqZEM1emRIbHNaWE1nUFNCN1hHNGdJQ2R6Y0dWamFXRnNKem9nSjJONVlXNG5MRnh1SUNBbmJuVnRZbVZ5SnpvZ0ozbGxiR3h2ZHljc1hHNGdJQ2RpYjI5c1pXRnVKem9nSjNsbGJHeHZkeWNzWEc0Z0lDZDFibVJsWm1sdVpXUW5PaUFuWjNKbGVTY3NYRzRnSUNkdWRXeHNKem9nSjJKdmJHUW5MRnh1SUNBbmMzUnlhVzVuSnpvZ0oyZHlaV1Z1Snl4Y2JpQWdKMlJoZEdVbk9pQW5iV0ZuWlc1MFlTY3NYRzRnSUM4dklGd2libUZ0WlZ3aU9pQnBiblJsYm5ScGIyNWhiR3g1SUc1dmRDQnpkSGxzYVc1blhHNGdJQ2R5WldkbGVIQW5PaUFuY21Wa0oxeHVmVHRjYmx4dVhHNW1kVzVqZEdsdmJpQnpkSGxzYVhwbFYybDBhRU52Ykc5eUtITjBjaXdnYzNSNWJHVlVlWEJsS1NCN1hHNGdJSFpoY2lCemRIbHNaU0E5SUdsdWMzQmxZM1F1YzNSNWJHVnpXM04wZVd4bFZIbHdaVjA3WEc1Y2JpQWdhV1lnS0hOMGVXeGxLU0I3WEc0Z0lDQWdjbVYwZFhKdUlDZGNYSFV3TURGaVd5Y2dLeUJwYm5Od1pXTjBMbU52Ykc5eWMxdHpkSGxzWlYxYk1GMGdLeUFuYlNjZ0t5QnpkSElnSzF4dUlDQWdJQ0FnSUNBZ0lDQW5YRngxTURBeFlsc25JQ3NnYVc1emNHVmpkQzVqYjJ4dmNuTmJjM1I1YkdWZFd6RmRJQ3NnSjIwbk8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCemRISTdYRzRnSUgxY2JuMWNibHh1WEc1bWRXNWpkR2x2YmlCemRIbHNhWHBsVG05RGIyeHZjaWh6ZEhJc0lITjBlV3hsVkhsd1pTa2dlMXh1SUNCeVpYUjFjbTRnYzNSeU8xeHVmVnh1WEc1Y2JtWjFibU4wYVc5dUlHRnljbUY1Vkc5SVlYTm9LR0Z5Y21GNUtTQjdYRzRnSUhaaGNpQm9ZWE5vSUQwZ2UzMDdYRzVjYmlBZ1lYSnlZWGt1Wm05eVJXRmphQ2htZFc1amRHbHZiaWgyWVd3c0lHbGtlQ2tnZTF4dUlDQWdJR2hoYzJoYmRtRnNYU0E5SUhSeWRXVTdYRzRnSUgwcE8xeHVYRzRnSUhKbGRIVnliaUJvWVhOb08xeHVmVnh1WEc1Y2JtWjFibU4wYVc5dUlHWnZjbTFoZEZaaGJIVmxLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5a2dlMXh1SUNBdkx5QlFjbTkyYVdSbElHRWdhRzl2YXlCbWIzSWdkWE5sY2kxemNHVmphV1pwWldRZ2FXNXpjR1ZqZENCbWRXNWpkR2x2Ym5NdVhHNGdJQzh2SUVOb1pXTnJJSFJvWVhRZ2RtRnNkV1VnYVhNZ1lXNGdiMkpxWldOMElIZHBkR2dnWVc0Z2FXNXpjR1ZqZENCbWRXNWpkR2x2YmlCdmJpQnBkRnh1SUNCcFppQW9ZM1I0TG1OMWMzUnZiVWx1YzNCbFkzUWdKaVpjYmlBZ0lDQWdJSFpoYkhWbElDWW1YRzRnSUNBZ0lDQnBjMFoxYm1OMGFXOXVLSFpoYkhWbExtbHVjM0JsWTNRcElDWW1YRzRnSUNBZ0lDQXZMeUJHYVd4MFpYSWdiM1YwSUhSb1pTQjFkR2xzSUcxdlpIVnNaU3dnYVhRbmN5QnBibk53WldOMElHWjFibU4wYVc5dUlHbHpJSE53WldOcFlXeGNiaUFnSUNBZ0lIWmhiSFZsTG1sdWMzQmxZM1FnSVQwOUlHVjRjRzl5ZEhNdWFXNXpjR1ZqZENBbUpseHVJQ0FnSUNBZ0x5OGdRV3h6YnlCbWFXeDBaWElnYjNWMElHRnVlU0J3Y205MGIzUjVjR1VnYjJKcVpXTjBjeUIxYzJsdVp5QjBhR1VnWTJseVkzVnNZWElnWTJobFkyc3VYRzRnSUNBZ0lDQWhLSFpoYkhWbExtTnZibk4wY25WamRHOXlJQ1ltSUhaaGJIVmxMbU52Ym5OMGNuVmpkRzl5TG5CeWIzUnZkSGx3WlNBOVBUMGdkbUZzZFdVcEtTQjdYRzRnSUNBZ2RtRnlJSEpsZENBOUlIWmhiSFZsTG1sdWMzQmxZM1FvY21WamRYSnpaVlJwYldWekxDQmpkSGdwTzF4dUlDQWdJR2xtSUNnaGFYTlRkSEpwYm1jb2NtVjBLU2tnZTF4dUlDQWdJQ0FnY21WMElEMGdabTl5YldGMFZtRnNkV1VvWTNSNExDQnlaWFFzSUhKbFkzVnljMlZVYVcxbGN5azdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJSDFjYmx4dUlDQXZMeUJRY21sdGFYUnBkbVVnZEhsd1pYTWdZMkZ1Ym05MElHaGhkbVVnY0hKdmNHVnlkR2xsYzF4dUlDQjJZWElnY0hKcGJXbDBhWFpsSUQwZ1ptOXliV0YwVUhKcGJXbDBhWFpsS0dOMGVDd2dkbUZzZFdVcE8xeHVJQ0JwWmlBb2NISnBiV2wwYVhabEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhCeWFXMXBkR2wyWlR0Y2JpQWdmVnh1WEc0Z0lDOHZJRXh2YjJzZ2RYQWdkR2hsSUd0bGVYTWdiMllnZEdobElHOWlhbVZqZEM1Y2JpQWdkbUZ5SUd0bGVYTWdQU0JQWW1wbFkzUXVhMlY1Y3loMllXeDFaU2s3WEc0Z0lIWmhjaUIyYVhOcFlteGxTMlY1Y3lBOUlHRnljbUY1Vkc5SVlYTm9LR3RsZVhNcE8xeHVYRzRnSUdsbUlDaGpkSGd1YzJodmQwaHBaR1JsYmlrZ2UxeHVJQ0FnSUd0bGVYTWdQU0JQWW1wbFkzUXVaMlYwVDNkdVVISnZjR1Z5ZEhsT1lXMWxjeWgyWVd4MVpTazdYRzRnSUgxY2JseHVJQ0F2THlCSlJTQmtiMlZ6YmlkMElHMWhhMlVnWlhKeWIzSWdabWxsYkdSeklHNXZiaTFsYm5WdFpYSmhZbXhsWEc0Z0lDOHZJR2gwZEhBNkx5OXRjMlJ1TG0xcFkzSnZjMjltZEM1amIyMHZaVzR0ZFhNdmJHbGljbUZ5ZVM5cFpTOWtkM2MxTW5OaWRDaDJQWFp6TGprMEtTNWhjM0I0WEc0Z0lHbG1JQ2hwYzBWeWNtOXlLSFpoYkhWbEtWeHVJQ0FnSUNBZ0ppWWdLR3RsZVhNdWFXNWtaWGhQWmlnbmJXVnpjMkZuWlNjcElENDlJREFnZkh3Z2EyVjVjeTVwYm1SbGVFOW1LQ2RrWlhOamNtbHdkR2x2YmljcElENDlJREFwS1NCN1hHNGdJQ0FnY21WMGRYSnVJR1p2Y20xaGRFVnljbTl5S0haaGJIVmxLVHRjYmlBZ2ZWeHVYRzRnSUM4dklGTnZiV1VnZEhsd1pTQnZaaUJ2WW1wbFkzUWdkMmwwYUc5MWRDQndjbTl3WlhKMGFXVnpJR05oYmlCaVpTQnphRzl5ZEdOMWRIUmxaQzVjYmlBZ2FXWWdLR3RsZVhNdWJHVnVaM1JvSUQwOVBTQXdLU0I3WEc0Z0lDQWdhV1lnS0dselJuVnVZM1JwYjI0b2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNCMllYSWdibUZ0WlNBOUlIWmhiSFZsTG01aGJXVWdQeUFuT2lBbklDc2dkbUZzZFdVdWJtRnRaU0E2SUNjbk8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUdOMGVDNXpkSGxzYVhwbEtDZGJSblZ1WTNScGIyNG5JQ3NnYm1GdFpTQXJJQ2RkSnl3Z0ozTndaV05wWVd3bktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHbHpVbVZuUlhod0tIWmhiSFZsS1NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdOMGVDNXpkSGxzYVhwbEtGSmxaMFY0Y0M1d2NtOTBiM1I1Y0dVdWRHOVRkSEpwYm1jdVkyRnNiQ2gyWVd4MVpTa3NJQ2R5WldkbGVIQW5LVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLR2x6UkdGMFpTaDJZV3gxWlNrcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCamRIZ3VjM1I1YkdsNlpTaEVZWFJsTG5CeWIzUnZkSGx3WlM1MGIxTjBjbWx1Wnk1allXeHNLSFpoYkhWbEtTd2dKMlJoZEdVbktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tHbHpSWEp5YjNJb2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWm05eWJXRjBSWEp5YjNJb2RtRnNkV1VwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhaaGNpQmlZWE5sSUQwZ0p5Y3NJR0Z5Y21GNUlEMGdabUZzYzJVc0lHSnlZV05sY3lBOUlGc25leWNzSUNkOUoxMDdYRzVjYmlBZ0x5OGdUV0ZyWlNCQmNuSmhlU0J6WVhrZ2RHaGhkQ0IwYUdWNUlHRnlaU0JCY25KaGVWeHVJQ0JwWmlBb2FYTkJjbkpoZVNoMllXeDFaU2twSUh0Y2JpQWdJQ0JoY25KaGVTQTlJSFJ5ZFdVN1hHNGdJQ0FnWW5KaFkyVnpJRDBnV3lkYkp5d2dKMTBuWFR0Y2JpQWdmVnh1WEc0Z0lDOHZJRTFoYTJVZ1puVnVZM1JwYjI1eklITmhlU0IwYUdGMElIUm9aWGtnWVhKbElHWjFibU4wYVc5dWMxeHVJQ0JwWmlBb2FYTkdkVzVqZEdsdmJpaDJZV3gxWlNrcElIdGNiaUFnSUNCMllYSWdiaUE5SUhaaGJIVmxMbTVoYldVZ1B5QW5PaUFuSUNzZ2RtRnNkV1V1Ym1GdFpTQTZJQ2NuTzF4dUlDQWdJR0poYzJVZ1BTQW5JRnRHZFc1amRHbHZiaWNnS3lCdUlDc2dKMTBuTzF4dUlDQjlYRzVjYmlBZ0x5OGdUV0ZyWlNCU1pXZEZlSEJ6SUhOaGVTQjBhR0YwSUhSb1pYa2dZWEpsSUZKbFowVjRjSE5jYmlBZ2FXWWdLR2x6VW1WblJYaHdLSFpoYkhWbEtTa2dlMXh1SUNBZ0lHSmhjMlVnUFNBbklDY2dLeUJTWldkRmVIQXVjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5MbU5oYkd3b2RtRnNkV1VwTzF4dUlDQjlYRzVjYmlBZ0x5OGdUV0ZyWlNCa1lYUmxjeUIzYVhSb0lIQnliM0JsY25ScFpYTWdabWx5YzNRZ2MyRjVJSFJvWlNCa1lYUmxYRzRnSUdsbUlDaHBjMFJoZEdVb2RtRnNkV1VwS1NCN1hHNGdJQ0FnWW1GelpTQTlJQ2NnSnlBcklFUmhkR1V1Y0hKdmRHOTBlWEJsTG5SdlZWUkRVM1J5YVc1bkxtTmhiR3dvZG1Gc2RXVXBPMXh1SUNCOVhHNWNiaUFnTHk4Z1RXRnJaU0JsY25KdmNpQjNhWFJvSUcxbGMzTmhaMlVnWm1seWMzUWdjMkY1SUhSb1pTQmxjbkp2Y2x4dUlDQnBaaUFvYVhORmNuSnZjaWgyWVd4MVpTa3BJSHRjYmlBZ0lDQmlZWE5sSUQwZ0p5QW5JQ3NnWm05eWJXRjBSWEp5YjNJb2RtRnNkV1VwTzF4dUlDQjlYRzVjYmlBZ2FXWWdLR3RsZVhNdWJHVnVaM1JvSUQwOVBTQXdJQ1ltSUNnaFlYSnlZWGtnZkh3Z2RtRnNkV1V1YkdWdVozUm9JRDA5SURBcEtTQjdYRzRnSUNBZ2NtVjBkWEp1SUdKeVlXTmxjMXN3WFNBcklHSmhjMlVnS3lCaWNtRmpaWE5iTVYwN1hHNGdJSDFjYmx4dUlDQnBaaUFvY21WamRYSnpaVlJwYldWeklEd2dNQ2tnZTF4dUlDQWdJR2xtSUNocGMxSmxaMFY0Y0NoMllXeDFaU2twSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJqZEhndWMzUjViR2w2WlNoU1pXZEZlSEF1Y0hKdmRHOTBlWEJsTG5SdlUzUnlhVzVuTG1OaGJHd29kbUZzZFdVcExDQW5jbVZuWlhod0p5azdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJqZEhndWMzUjViR2w2WlNnblcwOWlhbVZqZEYwbkxDQW5jM0JsWTJsaGJDY3BPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR04wZUM1elpXVnVMbkIxYzJnb2RtRnNkV1VwTzF4dVhHNGdJSFpoY2lCdmRYUndkWFE3WEc0Z0lHbG1JQ2hoY25KaGVTa2dlMXh1SUNBZ0lHOTFkSEIxZENBOUlHWnZjbTFoZEVGeWNtRjVLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5d2dkbWx6YVdKc1pVdGxlWE1zSUd0bGVYTXBPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJRzkxZEhCMWRDQTlJR3RsZVhNdWJXRndLR1oxYm1OMGFXOXVLR3RsZVNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdadmNtMWhkRkJ5YjNCbGNuUjVLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5d2dkbWx6YVdKc1pVdGxlWE1zSUd0bGVTd2dZWEp5WVhrcE8xeHVJQ0FnSUgwcE8xeHVJQ0I5WEc1Y2JpQWdZM1I0TG5ObFpXNHVjRzl3S0NrN1hHNWNiaUFnY21WMGRYSnVJSEpsWkhWalpWUnZVMmx1WjJ4bFUzUnlhVzVuS0c5MWRIQjFkQ3dnWW1GelpTd2dZbkpoWTJWektUdGNibjFjYmx4dVhHNW1kVzVqZEdsdmJpQm1iM0p0WVhSUWNtbHRhWFJwZG1Vb1kzUjRMQ0IyWVd4MVpTa2dlMXh1SUNCcFppQW9hWE5WYm1SbFptbHVaV1FvZG1Gc2RXVXBLVnh1SUNBZ0lISmxkSFZ5YmlCamRIZ3VjM1I1YkdsNlpTZ25kVzVrWldacGJtVmtKeXdnSjNWdVpHVm1hVzVsWkNjcE8xeHVJQ0JwWmlBb2FYTlRkSEpwYm1jb2RtRnNkV1VwS1NCN1hHNGdJQ0FnZG1GeUlITnBiWEJzWlNBOUlDZGNYQ2NuSUNzZ1NsTlBUaTV6ZEhKcGJtZHBabmtvZG1Gc2RXVXBMbkpsY0d4aFkyVW9MMTVjSW54Y0lpUXZaeXdnSnljcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVjbVZ3YkdGalpTZ3ZKeTluTENCY0lseGNYRnduWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXVjbVZ3YkdGalpTZ3ZYRnhjWEZ3aUwyY3NJQ2RjSWljcElDc2dKMXhjSnljN1hHNGdJQ0FnY21WMGRYSnVJR04wZUM1emRIbHNhWHBsS0hOcGJYQnNaU3dnSjNOMGNtbHVaeWNwTzF4dUlDQjlYRzRnSUdsbUlDaHBjMDUxYldKbGNpaDJZV3gxWlNrcFhHNGdJQ0FnY21WMGRYSnVJR04wZUM1emRIbHNhWHBsS0NjbklDc2dkbUZzZFdVc0lDZHVkVzFpWlhJbktUdGNiaUFnYVdZZ0tHbHpRbTl2YkdWaGJpaDJZV3gxWlNrcFhHNGdJQ0FnY21WMGRYSnVJR04wZUM1emRIbHNhWHBsS0NjbklDc2dkbUZzZFdVc0lDZGliMjlzWldGdUp5azdYRzRnSUM4dklFWnZjaUJ6YjIxbElISmxZWE52YmlCMGVYQmxiMllnYm5Wc2JDQnBjeUJjSW05aWFtVmpkRndpTENCemJ5QnpjR1ZqYVdGc0lHTmhjMlVnYUdWeVpTNWNiaUFnYVdZZ0tHbHpUblZzYkNoMllXeDFaU2twWEc0Z0lDQWdjbVYwZFhKdUlHTjBlQzV6ZEhsc2FYcGxLQ2R1ZFd4c0p5d2dKMjUxYkd3bktUdGNibjFjYmx4dVhHNW1kVzVqZEdsdmJpQm1iM0p0WVhSRmNuSnZjaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnSjFzbklDc2dSWEp5YjNJdWNISnZkRzkwZVhCbExuUnZVM1J5YVc1bkxtTmhiR3dvZG1Gc2RXVXBJQ3NnSjEwbk8xeHVmVnh1WEc1Y2JtWjFibU4wYVc5dUlHWnZjbTFoZEVGeWNtRjVLR04wZUN3Z2RtRnNkV1VzSUhKbFkzVnljMlZVYVcxbGN5d2dkbWx6YVdKc1pVdGxlWE1zSUd0bGVYTXBJSHRjYmlBZ2RtRnlJRzkxZEhCMWRDQTlJRnRkTzF4dUlDQm1iM0lnS0haaGNpQnBJRDBnTUN3Z2JDQTlJSFpoYkhWbExteGxibWQwYURzZ2FTQThJR3c3SUNzcmFTa2dlMXh1SUNBZ0lHbG1JQ2hvWVhOUGQyNVFjbTl3WlhKMGVTaDJZV3gxWlN3Z1UzUnlhVzVuS0drcEtTa2dlMXh1SUNBZ0lDQWdiM1YwY0hWMExuQjFjMmdvWm05eWJXRjBVSEp2Y0dWeWRIa29ZM1I0TENCMllXeDFaU3dnY21WamRYSnpaVlJwYldWekxDQjJhWE5wWW14bFMyVjVjeXhjYmlBZ0lDQWdJQ0FnSUNCVGRISnBibWNvYVNrc0lIUnlkV1VwS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdiM1YwY0hWMExuQjFjMmdvSnljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCclpYbHpMbVp2Y2tWaFkyZ29ablZ1WTNScGIyNG9hMlY1S1NCN1hHNGdJQ0FnYVdZZ0tDRnJaWGt1YldGMFkyZ29MMTVjWEdRckpDOHBLU0I3WEc0Z0lDQWdJQ0J2ZFhSd2RYUXVjSFZ6YUNobWIzSnRZWFJRY205d1pYSjBlU2hqZEhnc0lIWmhiSFZsTENCeVpXTjFjbk5sVkdsdFpYTXNJSFpwYzJsaWJHVkxaWGx6TEZ4dUlDQWdJQ0FnSUNBZ0lHdGxlU3dnZEhKMVpTa3BPMXh1SUNBZ0lIMWNiaUFnZlNrN1hHNGdJSEpsZEhWeWJpQnZkWFJ3ZFhRN1hHNTlYRzVjYmx4dVpuVnVZM1JwYjI0Z1ptOXliV0YwVUhKdmNHVnlkSGtvWTNSNExDQjJZV3gxWlN3Z2NtVmpkWEp6WlZScGJXVnpMQ0IyYVhOcFlteGxTMlY1Y3l3Z2EyVjVMQ0JoY25KaGVTa2dlMXh1SUNCMllYSWdibUZ0WlN3Z2MzUnlMQ0JrWlhOak8xeHVJQ0JrWlhOaklEMGdUMkpxWldOMExtZGxkRTkzYmxCeWIzQmxjblI1UkdWelkzSnBjSFJ2Y2loMllXeDFaU3dnYTJWNUtTQjhmQ0I3SUhaaGJIVmxPaUIyWVd4MVpWdHJaWGxkSUgwN1hHNGdJR2xtSUNoa1pYTmpMbWRsZENrZ2UxeHVJQ0FnSUdsbUlDaGtaWE5qTG5ObGRDa2dlMXh1SUNBZ0lDQWdjM1J5SUQwZ1kzUjRMbk4wZVd4cGVtVW9KMXRIWlhSMFpYSXZVMlYwZEdWeVhTY3NJQ2R6Y0dWamFXRnNKeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lITjBjaUE5SUdOMGVDNXpkSGxzYVhwbEtDZGJSMlYwZEdWeVhTY3NJQ2R6Y0dWamFXRnNKeWs3WEc0Z0lDQWdmVnh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJR2xtSUNoa1pYTmpMbk5sZENrZ2UxeHVJQ0FnSUNBZ2MzUnlJRDBnWTNSNExuTjBlV3hwZW1Vb0oxdFRaWFIwWlhKZEp5d2dKM053WldOcFlXd25LVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdhV1lnS0NGb1lYTlBkMjVRY205d1pYSjBlU2gyYVhOcFlteGxTMlY1Y3l3Z2EyVjVLU2tnZTF4dUlDQWdJRzVoYldVZ1BTQW5XeWNnS3lCclpYa2dLeUFuWFNjN1hHNGdJSDFjYmlBZ2FXWWdLQ0Z6ZEhJcElIdGNiaUFnSUNCcFppQW9ZM1I0TG5ObFpXNHVhVzVrWlhoUFppaGtaWE5qTG5aaGJIVmxLU0E4SURBcElIdGNiaUFnSUNBZ0lHbG1JQ2hwYzA1MWJHd29jbVZqZFhKelpWUnBiV1Z6S1NrZ2UxeHVJQ0FnSUNBZ0lDQnpkSElnUFNCbWIzSnRZWFJXWVd4MVpTaGpkSGdzSUdSbGMyTXVkbUZzZFdVc0lHNTFiR3dwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYzNSeUlEMGdabTl5YldGMFZtRnNkV1VvWTNSNExDQmtaWE5qTG5aaGJIVmxMQ0J5WldOMWNuTmxWR2x0WlhNZ0xTQXhLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoemRISXVhVzVrWlhoUFppZ25YRnh1SnlrZ1BpQXRNU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9ZWEp5WVhrcElIdGNiaUFnSUNBZ0lDQWdJQ0J6ZEhJZ1BTQnpkSEl1YzNCc2FYUW9KMXhjYmljcExtMWhjQ2htZFc1amRHbHZiaWhzYVc1bEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlBZ0p5QXJJR3hwYm1VN1hHNGdJQ0FnSUNBZ0lDQWdmU2t1YW05cGJpZ25YRnh1SnlrdWMzVmljM1J5S0RJcE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJSE4wY2lBOUlDZGNYRzRuSUNzZ2MzUnlMbk53YkdsMEtDZGNYRzRuS1M1dFlYQW9ablZ1WTNScGIyNG9iR2x1WlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NnSUNBbklDc2diR2x1WlR0Y2JpQWdJQ0FnSUNBZ0lDQjlLUzVxYjJsdUtDZGNYRzRuS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J6ZEhJZ1BTQmpkSGd1YzNSNWJHbDZaU2duVzBOcGNtTjFiR0Z5WFNjc0lDZHpjR1ZqYVdGc0p5azdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lHbG1JQ2hwYzFWdVpHVm1hVzVsWkNodVlXMWxLU2tnZTF4dUlDQWdJR2xtSUNoaGNuSmhlU0FtSmlCclpYa3ViV0YwWTJnb0wxNWNYR1FySkM4cEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2MzUnlPMXh1SUNBZ0lIMWNiaUFnSUNCdVlXMWxJRDBnU2xOUFRpNXpkSEpwYm1kcFpua29KeWNnS3lCclpYa3BPMXh1SUNBZ0lHbG1JQ2h1WVcxbExtMWhkR05vS0M5ZVhDSW9XMkV0ZWtFdFdsOWRXMkV0ZWtFdFdsOHdMVGxkS2lsY0lpUXZLU2tnZTF4dUlDQWdJQ0FnYm1GdFpTQTlJRzVoYldVdWMzVmljM1J5S0RFc0lHNWhiV1V1YkdWdVozUm9JQzBnTWlrN1hHNGdJQ0FnSUNCdVlXMWxJRDBnWTNSNExuTjBlV3hwZW1Vb2JtRnRaU3dnSjI1aGJXVW5LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2JtRnRaU0E5SUc1aGJXVXVjbVZ3YkdGalpTZ3ZKeTluTENCY0lseGNYRnduWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDNXlaWEJzWVdObEtDOWNYRnhjWENJdlp5d2dKMXdpSnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0xuSmxjR3hoWTJVb0x5aGVYQ0o4WENJa0tTOW5MQ0JjSWlkY0lpazdYRzRnSUNBZ0lDQnVZVzFsSUQwZ1kzUjRMbk4wZVd4cGVtVW9ibUZ0WlN3Z0ozTjBjbWx1WnljcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCdVlXMWxJQ3NnSnpvZ0p5QXJJSE4wY2p0Y2JuMWNibHh1WEc1bWRXNWpkR2x2YmlCeVpXUjFZMlZVYjFOcGJtZHNaVk4wY21sdVp5aHZkWFJ3ZFhRc0lHSmhjMlVzSUdKeVlXTmxjeWtnZTF4dUlDQjJZWElnYm5WdFRHbHVaWE5GYzNRZ1BTQXdPMXh1SUNCMllYSWdiR1Z1WjNSb0lEMGdiM1YwY0hWMExuSmxaSFZqWlNobWRXNWpkR2x2Ymlod2NtVjJMQ0JqZFhJcElIdGNiaUFnSUNCdWRXMU1hVzVsYzBWemRDc3JPMXh1SUNBZ0lHbG1JQ2hqZFhJdWFXNWtaWGhQWmlnblhGeHVKeWtnUGowZ01Da2diblZ0VEdsdVpYTkZjM1FyS3p0Y2JpQWdJQ0J5WlhSMWNtNGdjSEpsZGlBcklHTjFjaTV5WlhCc1lXTmxLQzljWEhVd01ERmlYRnhiWEZ4a1hGeGtQMjB2Wnl3Z0p5Y3BMbXhsYm1kMGFDQXJJREU3WEc0Z0lIMHNJREFwTzF4dVhHNGdJR2xtSUNoc1pXNW5kR2dnUGlBMk1Da2dlMXh1SUNBZ0lISmxkSFZ5YmlCaWNtRmpaWE5iTUYwZ0sxeHVJQ0FnSUNBZ0lDQWdJQ0FvWW1GelpTQTlQVDBnSnljZ1B5QW5KeUE2SUdKaGMyVWdLeUFuWEZ4dUlDY3BJQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0p5QW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ2IzVjBjSFYwTG1wdmFXNG9KeXhjWEc0Z0lDY3BJQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0p5QW5JQ3RjYmlBZ0lDQWdJQ0FnSUNBZ1luSmhZMlZ6V3pGZE8xeHVJQ0I5WEc1Y2JpQWdjbVYwZFhKdUlHSnlZV05sYzFzd1hTQXJJR0poYzJVZ0t5QW5JQ2NnS3lCdmRYUndkWFF1YW05cGJpZ25MQ0FuS1NBcklDY2dKeUFySUdKeVlXTmxjMXN4WFR0Y2JuMWNibHh1WEc0dkx5Qk9UMVJGT2lCVWFHVnpaU0IwZVhCbElHTm9aV05yYVc1bklHWjFibU4wYVc5dWN5QnBiblJsYm5ScGIyNWhiR3g1SUdSdmJpZDBJSFZ6WlNCZ2FXNXpkR0Z1WTJWdlptQmNiaTh2SUdKbFkyRjFjMlVnYVhRZ2FYTWdabkpoWjJsc1pTQmhibVFnWTJGdUlHSmxJR1ZoYzJsc2VTQm1ZV3RsWkNCM2FYUm9JR0JQWW1wbFkzUXVZM0psWVhSbEtDbGdMbHh1Wm5WdVkzUnBiMjRnYVhOQmNuSmhlU2hoY2lrZ2UxeHVJQ0J5WlhSMWNtNGdRWEp5WVhrdWFYTkJjbkpoZVNoaGNpazdYRzU5WEc1bGVIQnZjblJ6TG1selFYSnlZWGtnUFNCcGMwRnljbUY1TzF4dVhHNW1kVzVqZEdsdmJpQnBjMEp2YjJ4bFlXNG9ZWEpuS1NCN1hHNGdJSEpsZEhWeWJpQjBlWEJsYjJZZ1lYSm5JRDA5UFNBblltOXZiR1ZoYmljN1hHNTlYRzVsZUhCdmNuUnpMbWx6UW05dmJHVmhiaUE5SUdselFtOXZiR1ZoYmp0Y2JseHVablZ1WTNScGIyNGdhWE5PZFd4c0tHRnlaeWtnZTF4dUlDQnlaWFIxY200Z1lYSm5JRDA5UFNCdWRXeHNPMXh1ZlZ4dVpYaHdiM0owY3k1cGMwNTFiR3dnUFNCcGMwNTFiR3c3WEc1Y2JtWjFibU4wYVc5dUlHbHpUblZzYkU5eVZXNWtaV1pwYm1Wa0tHRnlaeWtnZTF4dUlDQnlaWFIxY200Z1lYSm5JRDA5SUc1MWJHdzdYRzU5WEc1bGVIQnZjblJ6TG1selRuVnNiRTl5Vlc1a1pXWnBibVZrSUQwZ2FYTk9kV3hzVDNKVmJtUmxabWx1WldRN1hHNWNibVoxYm1OMGFXOXVJR2x6VG5WdFltVnlLR0Z5WnlrZ2UxeHVJQ0J5WlhSMWNtNGdkSGx3Wlc5bUlHRnlaeUE5UFQwZ0oyNTFiV0psY2ljN1hHNTlYRzVsZUhCdmNuUnpMbWx6VG5WdFltVnlJRDBnYVhOT2RXMWlaWEk3WEc1Y2JtWjFibU4wYVc5dUlHbHpVM1J5YVc1bktHRnlaeWtnZTF4dUlDQnlaWFIxY200Z2RIbHdaVzltSUdGeVp5QTlQVDBnSjNOMGNtbHVaeWM3WEc1OVhHNWxlSEJ2Y25SekxtbHpVM1J5YVc1bklEMGdhWE5UZEhKcGJtYzdYRzVjYm1aMWJtTjBhVzl1SUdselUzbHRZbTlzS0dGeVp5a2dlMXh1SUNCeVpYUjFjbTRnZEhsd1pXOW1JR0Z5WnlBOVBUMGdKM041YldKdmJDYzdYRzU5WEc1bGVIQnZjblJ6TG1selUzbHRZbTlzSUQwZ2FYTlRlVzFpYjJ3N1hHNWNibVoxYm1OMGFXOXVJR2x6Vlc1a1pXWnBibVZrS0dGeVp5a2dlMXh1SUNCeVpYUjFjbTRnWVhKbklEMDlQU0IyYjJsa0lEQTdYRzU5WEc1bGVIQnZjblJ6TG1selZXNWtaV1pwYm1Wa0lEMGdhWE5WYm1SbFptbHVaV1E3WEc1Y2JtWjFibU4wYVc5dUlHbHpVbVZuUlhod0tISmxLU0I3WEc0Z0lISmxkSFZ5YmlCcGMwOWlhbVZqZENoeVpTa2dKaVlnYjJKcVpXTjBWRzlUZEhKcGJtY29jbVVwSUQwOVBTQW5XMjlpYW1WamRDQlNaV2RGZUhCZEp6dGNibjFjYm1WNGNHOXlkSE11YVhOU1pXZEZlSEFnUFNCcGMxSmxaMFY0Y0R0Y2JseHVablZ1WTNScGIyNGdhWE5QWW1wbFkzUW9ZWEpuS1NCN1hHNGdJSEpsZEhWeWJpQjBlWEJsYjJZZ1lYSm5JRDA5UFNBbmIySnFaV04wSnlBbUppQmhjbWNnSVQwOUlHNTFiR3c3WEc1OVhHNWxlSEJ2Y25SekxtbHpUMkpxWldOMElEMGdhWE5QWW1wbFkzUTdYRzVjYm1aMWJtTjBhVzl1SUdselJHRjBaU2hrS1NCN1hHNGdJSEpsZEhWeWJpQnBjMDlpYW1WamRDaGtLU0FtSmlCdlltcGxZM1JVYjFOMGNtbHVaeWhrS1NBOVBUMGdKMXR2WW1wbFkzUWdSR0YwWlYwbk8xeHVmVnh1Wlhod2IzSjBjeTVwYzBSaGRHVWdQU0JwYzBSaGRHVTdYRzVjYm1aMWJtTjBhVzl1SUdselJYSnliM0lvWlNrZ2UxeHVJQ0J5WlhSMWNtNGdhWE5QWW1wbFkzUW9aU2tnSmlaY2JpQWdJQ0FnSUNodlltcGxZM1JVYjFOMGNtbHVaeWhsS1NBOVBUMGdKMXR2WW1wbFkzUWdSWEp5YjNKZEp5QjhmQ0JsSUdsdWMzUmhibU5sYjJZZ1JYSnliM0lwTzF4dWZWeHVaWGh3YjNKMGN5NXBjMFZ5Y205eUlEMGdhWE5GY25KdmNqdGNibHh1Wm5WdVkzUnBiMjRnYVhOR2RXNWpkR2x2YmloaGNtY3BJSHRjYmlBZ2NtVjBkWEp1SUhSNWNHVnZaaUJoY21jZ1BUMDlJQ2RtZFc1amRHbHZiaWM3WEc1OVhHNWxlSEJ2Y25SekxtbHpSblZ1WTNScGIyNGdQU0JwYzBaMWJtTjBhVzl1TzF4dVhHNW1kVzVqZEdsdmJpQnBjMUJ5YVcxcGRHbDJaU2hoY21jcElIdGNiaUFnY21WMGRYSnVJR0Z5WnlBOVBUMGdiblZzYkNCOGZGeHVJQ0FnSUNBZ0lDQWdkSGx3Wlc5bUlHRnlaeUE5UFQwZ0oySnZiMnhsWVc0bklIeDhYRzRnSUNBZ0lDQWdJQ0IwZVhCbGIyWWdZWEpuSUQwOVBTQW5iblZ0WW1WeUp5QjhmRnh1SUNBZ0lDQWdJQ0FnZEhsd1pXOW1JR0Z5WnlBOVBUMGdKM04wY21sdVp5Y2dmSHhjYmlBZ0lDQWdJQ0FnSUhSNWNHVnZaaUJoY21jZ1BUMDlJQ2R6ZVcxaWIyd25JSHg4SUNBdkx5QkZVellnYzNsdFltOXNYRzRnSUNBZ0lDQWdJQ0IwZVhCbGIyWWdZWEpuSUQwOVBTQW5kVzVrWldacGJtVmtKenRjYm4xY2JtVjRjRzl5ZEhNdWFYTlFjbWx0YVhScGRtVWdQU0JwYzFCeWFXMXBkR2wyWlR0Y2JseHVaWGh3YjNKMGN5NXBjMEoxWm1abGNpQTlJSEpsY1hWcGNtVW9KeTR2YzNWd2NHOXlkQzlwYzBKMVptWmxjaWNwTzF4dVhHNW1kVzVqZEdsdmJpQnZZbXBsWTNSVWIxTjBjbWx1WnlodktTQjdYRzRnSUhKbGRIVnliaUJQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5MbU5oYkd3b2J5azdYRzU5WEc1Y2JseHVablZ1WTNScGIyNGdjR0ZrS0c0cElIdGNiaUFnY21WMGRYSnVJRzRnUENBeE1DQS9JQ2N3SnlBcklHNHVkRzlUZEhKcGJtY29NVEFwSURvZ2JpNTBiMU4wY21sdVp5Z3hNQ2s3WEc1OVhHNWNibHh1ZG1GeUlHMXZiblJvY3lBOUlGc25TbUZ1Snl3Z0owWmxZaWNzSUNkTllYSW5MQ0FuUVhCeUp5d2dKMDFoZVNjc0lDZEtkVzRuTENBblNuVnNKeXdnSjBGMVp5Y3NJQ2RUWlhBbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBblQyTjBKeXdnSjA1dmRpY3NJQ2RFWldNblhUdGNibHh1THk4Z01qWWdSbVZpSURFMk9qRTVPak0wWEc1bWRXNWpkR2x2YmlCMGFXMWxjM1JoYlhBb0tTQjdYRzRnSUhaaGNpQmtJRDBnYm1WM0lFUmhkR1VvS1R0Y2JpQWdkbUZ5SUhScGJXVWdQU0JiY0dGa0tHUXVaMlYwU0c5MWNuTW9LU2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoWkNoa0xtZGxkRTFwYm5WMFpYTW9LU2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoWkNoa0xtZGxkRk5sWTI5dVpITW9LU2xkTG1wdmFXNG9Kem9uS1R0Y2JpQWdjbVYwZFhKdUlGdGtMbWRsZEVSaGRHVW9LU3dnYlc5dWRHaHpXMlF1WjJWMFRXOXVkR2dvS1Ywc0lIUnBiV1ZkTG1wdmFXNG9KeUFuS1R0Y2JuMWNibHh1WEc0dkx5QnNiMmNnYVhNZ2FuVnpkQ0JoSUhSb2FXNGdkM0poY0hCbGNpQjBieUJqYjI1emIyeGxMbXh2WnlCMGFHRjBJSEJ5WlhCbGJtUnpJR0VnZEdsdFpYTjBZVzF3WEc1bGVIQnZjblJ6TG14dlp5QTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQmpiMjV6YjJ4bExteHZaeWduSlhNZ0xTQWxjeWNzSUhScGJXVnpkR0Z0Y0NncExDQmxlSEJ2Y25SekxtWnZjbTFoZEM1aGNIQnNlU2hsZUhCdmNuUnpMQ0JoY21kMWJXVnVkSE1wS1R0Y2JuMDdYRzVjYmx4dUx5b3FYRzRnS2lCSmJtaGxjbWwwSUhSb1pTQndjbTkwYjNSNWNHVWdiV1YwYUc5a2N5Qm1jbTl0SUc5dVpTQmpiMjV6ZEhKMVkzUnZjaUJwYm5SdklHRnViM1JvWlhJdVhHNGdLbHh1SUNvZ1ZHaGxJRVoxYm1OMGFXOXVMbkJ5YjNSdmRIbHdaUzVwYm1obGNtbDBjeUJtY205dElHeGhibWN1YW5NZ2NtVjNjbWwwZEdWdUlHRnpJR0VnYzNSaGJtUmhiRzl1WlZ4dUlDb2dablZ1WTNScGIyNGdLRzV2ZENCdmJpQkdkVzVqZEdsdmJpNXdjbTkwYjNSNWNHVXBMaUJPVDFSRk9pQkpaaUIwYUdseklHWnBiR1VnYVhNZ2RHOGdZbVVnYkc5aFpHVmtYRzRnS2lCa2RYSnBibWNnWW05dmRITjBjbUZ3Y0dsdVp5QjBhR2x6SUdaMWJtTjBhVzl1SUc1bFpXUnpJSFJ2SUdKbElISmxkM0pwZEhSbGJpQjFjMmx1WnlCemIyMWxJRzVoZEdsMlpWeHVJQ29nWm5WdVkzUnBiMjV6SUdGeklIQnliM1J2ZEhsd1pTQnpaWFIxY0NCMWMybHVaeUJ1YjNKdFlXd2dTbUYyWVZOamNtbHdkQ0JrYjJWeklHNXZkQ0IzYjNKcklHRnpYRzRnS2lCbGVIQmxZM1JsWkNCa2RYSnBibWNnWW05dmRITjBjbUZ3Y0dsdVp5QW9jMlZsSUcxcGNuSnZjaTVxY3lCcGJpQnlNVEUwT1RBektTNWNiaUFxWEc0Z0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dWZTQmpkRzl5SUVOdmJuTjBjblZqZEc5eUlHWjFibU4wYVc5dUlIZG9hV05vSUc1bFpXUnpJSFJ2SUdsdWFHVnlhWFFnZEdobFhHNGdLaUFnSUNBZ2NISnZkRzkwZVhCbExseHVJQ29nUUhCaGNtRnRJSHRtZFc1amRHbHZibjBnYzNWd1pYSkRkRzl5SUVOdmJuTjBjblZqZEc5eUlHWjFibU4wYVc5dUlIUnZJR2x1YUdWeWFYUWdjSEp2ZEc5MGVYQmxJR1p5YjIwdVhHNGdLaTljYm1WNGNHOXlkSE11YVc1b1pYSnBkSE1nUFNCeVpYRjFhWEpsS0NkcGJtaGxjbWwwY3ljcE8xeHVYRzVsZUhCdmNuUnpMbDlsZUhSbGJtUWdQU0JtZFc1amRHbHZiaWh2Y21sbmFXNHNJR0ZrWkNrZ2UxeHVJQ0F2THlCRWIyNG5kQ0JrYnlCaGJubDBhR2x1WnlCcFppQmhaR1FnYVhOdUozUWdZVzRnYjJKcVpXTjBYRzRnSUdsbUlDZ2hZV1JrSUh4OElDRnBjMDlpYW1WamRDaGhaR1FwS1NCeVpYUjFjbTRnYjNKcFoybHVPMXh1WEc0Z0lIWmhjaUJyWlhseklEMGdUMkpxWldOMExtdGxlWE1vWVdSa0tUdGNiaUFnZG1GeUlHa2dQU0JyWlhsekxteGxibWQwYUR0Y2JpQWdkMmhwYkdVZ0tHa3RMU2tnZTF4dUlDQWdJRzl5YVdkcGJsdHJaWGx6VzJsZFhTQTlJR0ZrWkZ0clpYbHpXMmxkWFR0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnYjNKcFoybHVPMXh1ZlR0Y2JseHVablZ1WTNScGIyNGdhR0Z6VDNkdVVISnZjR1Z5ZEhrb2IySnFMQ0J3Y205d0tTQjdYRzRnSUhKbGRIVnliaUJQWW1wbFkzUXVjSEp2ZEc5MGVYQmxMbWhoYzA5M2JsQnliM0JsY25SNUxtTmhiR3dvYjJKcUxDQndjbTl3S1R0Y2JuMWNiaUpkZlE9PSIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDE0IERhbiBUYW8gPGRhbmllbC50YW9AZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgQW5kcmV3IEVpc2VuYmVyZyA8YW5kcmV3QGVpc2VuYmVyZy5hcz5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0eXBlZCxcbiAgICAgICAgdXRpbGl0eSxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgICAganNkb2MsXG4gICAgICAgIGVzdXRpbHMsXG4gICAgICAgIGhhc093blByb3BlcnR5O1xuXG4gICAgZXN1dGlscyA9IHJlcXVpcmUoJ2VzdXRpbHMnKTtcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpO1xuICAgIHR5cGVkID0gcmVxdWlyZSgnLi90eXBlZCcpO1xuICAgIHV0aWxpdHkgPSByZXF1aXJlKCcuL3V0aWxpdHknKTtcblxuICAgIGZ1bmN0aW9uIHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIGxhc3QpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZShpbmRleCwgbGFzdCk7XG4gICAgfVxuXG4gICAgaGFzT3duUHJvcGVydHkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZnVuYyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwob2JqLCBuYW1lKTtcbiAgICAgICAgfTtcbiAgICB9KCkpO1xuXG4gICAgZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7XG4gICAgICAgIHZhciByZXQgPSB7fSwga2V5O1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FTQ0lJQWxwaGFudW1lcmljKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPj0gMHg2MSAgLyogJ2EnICovICYmIGNoIDw9IDB4N0EgIC8qICd6JyAqLykgfHxcbiAgICAgICAgICAgIChjaCA+PSAweDQxICAvKiAnQScgKi8gJiYgY2ggPD0gMHg1QSAgLyogJ1onICovKSB8fFxuICAgICAgICAgICAgKGNoID49IDB4MzAgIC8qICcwJyAqLyAmJiBjaCA8PSAweDM5ICAvKiAnOScgKi8pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUGFyYW1UaXRsZSh0aXRsZSkge1xuICAgICAgICByZXR1cm4gdGl0bGUgPT09ICdwYXJhbScgfHwgdGl0bGUgPT09ICdhcmd1bWVudCcgfHwgdGl0bGUgPT09ICdhcmcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUHJvcGVydHkodGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIHRpdGxlID09PSAncHJvcGVydHknIHx8IHRpdGxlID09PSAncHJvcCc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHtcbiAgICAgICAgcmV0dXJuIGlzUGFyYW1UaXRsZSh0aXRsZSkgfHwgaXNQcm9wZXJ0eSh0aXRsZSkgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAnYWxpYXMnIHx8IHRpdGxlID09PSAndGhpcycgfHwgdGl0bGUgPT09ICdtaXhlcycgfHwgdGl0bGUgPT09ICdyZXF1aXJlcyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBbGxvd2VkTmFtZSh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUpIHx8IHRpdGxlID09PSAnY29uc3QnIHx8IHRpdGxlID09PSAnY29uc3RhbnQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWxsb3dlZE5lc3RlZCh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNQcm9wZXJ0eSh0aXRsZSkgfHwgaXNQYXJhbVRpdGxlKHRpdGxlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkge1xuICAgICAgICByZXR1cm4gaXNQYXJhbVRpdGxlKHRpdGxlKSB8fCB0aXRsZSA9PT0gJ2RlZmluZScgfHwgdGl0bGUgPT09ICdlbnVtJyB8fFxuICAgICAgICAgICAgdGl0bGUgPT09ICdpbXBsZW1lbnRzJyB8fCB0aXRsZSA9PT0gJ3JldHVybicgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAndGhpcycgfHwgdGl0bGUgPT09ICd0eXBlJyB8fCB0aXRsZSA9PT0gJ3R5cGVkZWYnIHx8XG4gICAgICAgICAgICB0aXRsZSA9PT0gJ3JldHVybnMnIHx8IGlzUHJvcGVydHkodGl0bGUpO1xuICAgIH1cblxuICAgIC8vIENvbnNpZGVyIGRlcHJlY2F0aW9uIGluc3RlYWQgdXNpbmcgJ2lzVHlwZVBhcmFtZXRlclJlcXVpcmVkJyBhbmQgJ1J1bGVzJyBkZWNsYXJhdGlvbiB0byBwaWNrIHdoZW4gYSB0eXBlIGlzIG9wdGlvbmFsL3JlcXVpcmVkXG4gICAgLy8gVGhpcyB3b3VsZCByZXF1aXJlIGNoYW5nZXMgdG8gJ3BhcnNlVHlwZSdcbiAgICBmdW5jdGlvbiBpc0FsbG93ZWRUeXBlKHRpdGxlKSB7XG4gICAgICAgIHJldHVybiBpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkgfHwgdGl0bGUgPT09ICd0aHJvd3MnIHx8IHRpdGxlID09PSAnY29uc3QnIHx8IHRpdGxlID09PSAnY29uc3RhbnQnIHx8XG4gICAgICAgICAgICB0aXRsZSA9PT0gJ25hbWVzcGFjZScgfHwgdGl0bGUgPT09ICdtZW1iZXInIHx8IHRpdGxlID09PSAndmFyJyB8fCB0aXRsZSA9PT0gJ21vZHVsZScgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAnY29uc3RydWN0b3InIHx8IHRpdGxlID09PSAnY2xhc3MnIHx8IHRpdGxlID09PSAnZXh0ZW5kcycgfHwgdGl0bGUgPT09ICdhdWdtZW50cycgfHxcbiAgICAgICAgICAgIHRpdGxlID09PSAncHVibGljJyB8fCB0aXRsZSA9PT0gJ3ByaXZhdGUnIHx8IHRpdGxlID09PSAncHJvdGVjdGVkJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmltKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrLywgJycpLnJlcGxhY2UoL1xccyskLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVud3JhcENvbW1lbnQoZG9jKSB7XG4gICAgICAgIC8vIEpTRG9jIGNvbW1lbnQgaXMgZm9sbG93aW5nIGZvcm1cbiAgICAgICAgLy8gICAvKipcbiAgICAgICAgLy8gICAgKiAuLi4uLi4uXG4gICAgICAgIC8vICAgICovXG4gICAgICAgIC8vIHJlbW92ZSAvKiosICovIGFuZCAqXG4gICAgICAgIHZhciBCRUZPUkVfU1RBUiA9IDAsXG4gICAgICAgICAgICBTVEFSID0gMSxcbiAgICAgICAgICAgIEFGVEVSX1NUQVIgPSAyLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBsZW4sXG4gICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgY2g7XG5cbiAgICAgICAgZG9jID0gZG9jLnJlcGxhY2UoL15cXC9cXCpcXCo/LywgJycpLnJlcGxhY2UoL1xcKlxcLyQvLCAnJyk7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgbGVuID0gZG9jLmxlbmd0aDtcbiAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFSO1xuICAgICAgICByZXN1bHQgPSAnJztcblxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGNoID0gZG9jLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEJFRk9SRV9TVEFSOlxuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEgIC8qICcqJyAqLykge1xuICAgICAgICAgICAgICAgICAgICBtb2RlID0gU1RBUjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGUgPSBBRlRFUl9TVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTVEFSOlxuICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzV2hpdGVTcGFjZShjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb2RlID0gZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY2gpID8gQkVGT1JFX1NUQVIgOiBBRlRFUl9TVEFSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEFGVEVSX1NUQVI6XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFSO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIEpTRG9jIFRhZyBQYXJzZXJcblxuICAgIChmdW5jdGlvbiAoZXhwb3J0cykge1xuICAgICAgICB2YXIgUnVsZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICByZWNvdmVyYWJsZSxcbiAgICAgICAgICAgIHNsb3BweSxcbiAgICAgICAgICAgIHN0cmljdDtcblxuICAgICAgICBmdW5jdGlvbiBhZHZhbmNlKCkge1xuICAgICAgICAgICAgdmFyIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkgJiYgIShjaCA9PT0gMHgwRCAgLyogJ1xccicgKi8gJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBICAvKiAnXFxuJyAqLykpIHtcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzY2FuVGl0bGUoKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUgPSAnJztcbiAgICAgICAgICAgIC8vIHdhc3RlICdAJ1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuXG4gICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgaXNBU0NJSUFscGhhbnVtZXJpYyhzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgdGl0bGUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzZWVrQ29udGVudCgpIHtcbiAgICAgICAgICAgIHZhciBjaCwgd2FpdGluZywgbGFzdCA9IGluZGV4O1xuXG4gICAgICAgICAgICB3YWl0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB3aGlsZSAobGFzdCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQobGFzdCk7XG4gICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoKSAmJiAhKGNoID09PSAweDBEICAvKiAnXFxyJyAqLyAmJiBzb3VyY2UuY2hhckNvZGVBdChsYXN0ICsgMSkgPT09IDB4MEEgIC8qICdcXG4nICovKSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2FpdGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4NDAgIC8qICdAJyAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3QgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsYXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHlwZSBleHByZXNzaW9uIG1heSBoYXZlIG5lc3QgYnJhY2UsIHN1Y2ggYXMsXG4gICAgICAgIC8vIHsgeyBvazogc3RyaW5nIH0gfVxuICAgICAgICAvL1xuICAgICAgICAvLyB0aGVyZWZvcmUsIHNjYW5uaW5nIHR5cGUgZXhwcmVzc2lvbiB3aXRoIGJhbGFuY2luZyBicmFjZXMuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlVHlwZSh0aXRsZSwgbGFzdCkge1xuICAgICAgICAgICAgdmFyIGNoLCBicmFjZSwgdHlwZSwgZGlyZWN0ID0gZmFsc2U7XG5cblxuICAgICAgICAgICAgLy8gc2VhcmNoICd7J1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHg3QiAgLyogJ3snICovKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBkaXJlY3QgcGF0dGVyblxuICAgICAgICAgICAgICAgICAgICBkaXJlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKGRpcmVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0eXBlIGV4cHJlc3Npb24geyBpcyBmb3VuZFxuICAgICAgICAgICAgYnJhY2UgPSAxO1xuICAgICAgICAgICAgdHlwZSA9ICcnO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHg3RCAgLyogJ30nICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmFjZSAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyYWNlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDdCICAvKiAneycgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHlwZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYnJhY2UgIT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBicmFjZXMgaXMgbm90IGJhbGFuY2VkXG4gICAgICAgICAgICAgICAgcmV0dXJuIHV0aWxpdHkudGhyb3dFcnJvcignQnJhY2VzIGFyZSBub3QgYmFsYW5jZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aXRsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZWQucGFyc2VQYXJhbVR5cGUodHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHlwZWQucGFyc2VUeXBlKHR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2NhbklkZW50aWZpZXIobGFzdCkge1xuICAgICAgICAgICAgdmFyIGlkZW50aWZpZXI7XG4gICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZGVudGlmaWVyID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCAmJiBlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyUGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgaWRlbnRpZmllciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNraXBXaGl0ZVNwYWNlKGxhc3QpIHtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxhc3QgJiYgKGVzdXRpbHMuY29kZS5pc1doaXRlU3BhY2Uoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSB8fCBlc3V0aWxzLmNvZGUuaXNMaW5lVGVybWluYXRvcihzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSkge1xuICAgICAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlTmFtZShsYXN0LCBhbGxvd0JyYWNrZXRzLCBhbGxvd05lc3RlZFBhcmFtcykge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSAnJywgdXNlQnJhY2tldHM7XG5cbiAgICAgICAgICAgIHNraXBXaGl0ZVNwYWNlKGxhc3QpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gbGFzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYWxsb3dCcmFja2V0cyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUIgIC8qICdbJyAqLykge1xuICAgICAgICAgICAgICAgIHVzZUJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBuYW1lID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hbWUgKz0gc2NhbklkZW50aWZpZXIobGFzdCk7XG5cbiAgICAgICAgICAgIGlmIChhbGxvd05lc3RlZFBhcmFtcykge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0EgLyogJzonICovICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT09ICdtb2R1bGUnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09PSAnZXh0ZXJuYWwnIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09PSAnZXZlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBzY2FuSWRlbnRpZmllcihsYXN0KTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUIgIC8qICdbJyAqLyAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDVEICAvKiAnXScgKi8pe1xuICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MkUgIC8qICcuJyAqLyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDIzICAvKiAnIycgKi8gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHg3RSAgLyogJ34nICovKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICBuYW1lICs9IHNjYW5JZGVudGlmaWVyKGxhc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVzZUJyYWNrZXRzKSB7XG4gICAgICAgICAgICAgICAgLy8gZG8gd2UgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXM/XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzRCAgLyogJz0nICovKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3VtZSB0aGUgJz0nJyBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNjYW4gaW4gdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NUQgIC8qICddJyAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGFzdCAgfHwgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDVEICAvKiAnXScgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmV2ZXIgZm91bmQgYSBjbG9zaW5nICddJ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IHRoZSBsYXN0ICddJ1xuICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNraXBUb1RhZygpIHtcbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NDAgIC8qICdAJyAqLykge1xuICAgICAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1dGlsaXR5LmFzc2VydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NDAgIC8qICdAJyAqLyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIFRhZ1BhcnNlcihvcHRpb25zLCB0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgdGhpcy5fdGFnID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmxpbmVOdW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFnLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbGFzdCA9IDA7XG4gICAgICAgICAgICAvLyBzcGFjZSB0byBzYXZlIHNwZWNpYWwgaW5mb3JtYXRpb24gZm9yIHRpdGxlIHBhcnNlcnMuXG4gICAgICAgICAgICB0aGlzLl9leHRyYSA9IHsgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZEVycm9yKGVyciwgLi4uKVxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmFkZEVycm9yID0gZnVuY3Rpb24gYWRkRXJyb3IoZXJyb3JUZXh0KSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICAgICAgbXNnID0gZXJyb3JUZXh0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC8lKFxcZCkvZyxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS5hc3NlcnQoaW5kZXggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLmVycm9ycykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5lcnJvcnMgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IobXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RhZy5lcnJvcnMucHVzaChtc2cpO1xuICAgICAgICAgICAgcmV0dXJuIHJlY292ZXJhYmxlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gdHlwZSByZXF1aXJlZCB0aXRsZXNcbiAgICAgICAgICAgIGlmIChpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlwZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyB0eXBlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZy50eXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQWxsb3dlZFR5cGUodGhpcy5fdGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gb3B0aW9uYWwgdHlwZXNcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlwZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFzdCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvL0ZvciBvcHRpb25hbCB0eXBlcywgbGV0cyBkcm9wIHRoZSB0aHJvd24gZXJyb3Igd2hlbiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgZmlsZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuX3BhcnNlTmFtZVBhdGggPSBmdW5jdGlvbiAob3B0aW9uYWwpIHtcbiAgICAgICAgICAgIHZhciBuYW1lO1xuICAgICAgICAgICAgbmFtZSA9IHBhcnNlTmFtZSh0aGlzLl9sYXN0LCBzbG9wcHkgJiYgaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyBuYW1lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RhZy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VOYW1lUGF0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZU5hbWVQYXRoKGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlTmFtZVBhdGhPcHRpb25hbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZU5hbWVQYXRoKHRydWUpO1xuICAgICAgICB9O1xuXG5cbiAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZU5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXNzaWduLCBuYW1lO1xuXG4gICAgICAgICAgICAvLyBwYXJhbSwgcHJvcGVydHkgcmVxdWlyZXMgbmFtZVxuICAgICAgICAgICAgaWYgKGlzQWxsb3dlZE5hbWUodGhpcy5fdGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSBwYXJzZU5hbWUodGhpcy5fbGFzdCwgc2xvcHB5ICYmIGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSksIGlzQWxsb3dlZE5lc3RlZCh0aGlzLl90aXRsZSkpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hbWVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGUgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIHBhcnNlZCBidXQgaW50ZXJwcmV0ZWQgYXMgYSB0eXBlXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0J3MgYWxzbyBwb3NzaWJsZSB0aGlzIGlzIGEgc2xvcHB5IGRlY2xhcmF0aW9uLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmVcbiAgICAgICAgICAgICAgICAgICAgLy8gZml4ZWQgYXQgdGhlIGVuZFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSAmJiB0aGlzLl90YWcudHlwZSAmJiB0aGlzLl90YWcudHlwZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9leHRyYS5uYW1lID0gdGhpcy5fdGFnLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcubmFtZSA9IHRoaXMuX3RhZy50eXBlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0YWcgbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMuX3RhZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdbJyAmJiBuYW1lLmNoYXJBdChuYW1lLmxlbmd0aCAtIDEpID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4dHJhY3QgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgaXMgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBleGFtcGxlOiBAcGFyYW0ge3N0cmluZ30gW3NvbWVib2R5PUpvaG4gRG9lXSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduID0gbmFtZS5zdWJzdHJpbmcoMSwgbmFtZS5sZW5ndGggLSAxKS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2lnblsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZ1snZGVmYXVsdCddID0gYXNzaWduWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSBhc3NpZ25bMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gYW4gb3B0aW9uYWwgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhZy50eXBlICYmIHRoaXMuX3RhZy50eXBlLnR5cGUgIT09ICdPcHRpb25hbFR5cGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdPcHRpb25hbFR5cGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLl90YWcudHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VEZXNjcmlwdGlvbiA9IGZ1bmN0aW9uIHBhcnNlRGVzY3JpcHRpb24oKSB7XG4gICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICgoL14tXFxzKy8pLnRlc3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24uc3Vic3RyaW5nKDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl90YWcuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VLaW5kID0gZnVuY3Rpb24gcGFyc2VLaW5kKCkge1xuICAgICAgICAgICAgdmFyIGtpbmQsIGtpbmRzO1xuICAgICAgICAgICAga2luZHMgPSB7XG4gICAgICAgICAgICAgICAgJ2NsYXNzJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnY29uc3RhbnQnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdldmVudCc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2V4dGVybmFsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZmlsZSc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2Z1bmN0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnbWVtYmVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnbWl4aW4nOiB0cnVlLFxuICAgICAgICAgICAgICAgICdtb2R1bGUnOiB0cnVlLFxuICAgICAgICAgICAgICAgICduYW1lc3BhY2UnOiB0cnVlLFxuICAgICAgICAgICAgICAgICd0eXBlZGVmJzogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGtpbmQgPSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTtcbiAgICAgICAgICAgIHRoaXMuX3RhZy5raW5kID0ga2luZDtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcGVydHkoa2luZHMsIGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdJbnZhbGlkIGtpbmQgbmFtZSBcXCclMFxcJycsIGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlQWNjZXNzID0gZnVuY3Rpb24gcGFyc2VBY2Nlc3MoKSB7XG4gICAgICAgICAgICB2YXIgYWNjZXNzO1xuICAgICAgICAgICAgYWNjZXNzID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7XG4gICAgICAgICAgICB0aGlzLl90YWcuYWNjZXNzID0gYWNjZXNzO1xuICAgICAgICAgICAgaWYgKGFjY2VzcyAhPT0gJ3ByaXZhdGUnICYmIGFjY2VzcyAhPT0gJ3Byb3RlY3RlZCcgJiYgYWNjZXNzICE9PSAncHVibGljJykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxpZCBhY2Nlc3MgbmFtZSBcXCclMFxcJycsIGFjY2VzcykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VWYXJpYXRpb24gPSBmdW5jdGlvbiBwYXJzZVZhcmlhdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB2YXJpYXRpb24sIHRleHQ7XG4gICAgICAgICAgICB0ZXh0ID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7XG4gICAgICAgICAgICB2YXJpYXRpb24gPSBwYXJzZUZsb2F0KHRleHQsIDEwKTtcbiAgICAgICAgICAgIHRoaXMuX3RhZy52YXJpYXRpb24gPSB2YXJpYXRpb247XG4gICAgICAgICAgICBpZiAoaXNOYU4odmFyaWF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignSW52YWxpZCB2YXJpYXRpb24gXFwnJTBcXCcnLCB0ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5lbnN1cmVFbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2hvdWxkQmVFbXB0eSA9IHRyaW0oc2xpY2VTb3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpO1xuICAgICAgICAgICAgaWYgKHNob3VsZEJlRW1wdHkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ1Vua25vd24gY29udGVudCBcXCclMFxcJycsIHNob3VsZEJlRW1wdHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmVwaWxvZ3VlID0gZnVuY3Rpb24gZXBpbG9ndWUoKSB7XG4gICAgICAgICAgICB2YXIgZGVzY3JpcHRpb247XG5cbiAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5fdGFnLmRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgLy8gdW4tZml4IHBvdGVudGlhbGx5IHNsb3BweSBkZWNsYXJhdGlvblxuICAgICAgICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSkgJiYgIXRoaXMuX3RhZy50eXBlICYmIGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLmNoYXJBdCgwKSA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSB0aGlzLl9leHRyYS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFzbG9wcHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgdGFnIG5hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBSdWxlcyA9IHtcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hY2Nlc3MuaHRtbFxuICAgICAgICAgICAgJ2FjY2Vzcyc6IFsncGFyc2VBY2Nlc3MnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hbGlhcy5odG1sXG4gICAgICAgICAgICAnYWxpYXMnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtYXVnbWVudHMuaHRtbFxuICAgICAgICAgICAgJ2F1Z21lbnRzJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWNvbnN0cnVjdG9yLmh0bWxcbiAgICAgICAgICAgICdjb25zdHJ1Y3Rvcic6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1jb25zdHJ1Y3Rvci5odG1sXG4gICAgICAgICAgICAnY2xhc3MnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZXh0ZW5kcy5odG1sXG4gICAgICAgICAgICAnZXh0ZW5kcyc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1kZXByZWNhdGVkLmh0bWxcbiAgICAgICAgICAgICdkZXByZWNhdGVkJzogWydwYXJzZURlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZ2xvYmFsLmh0bWxcbiAgICAgICAgICAgICdnbG9iYWwnOiBbJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWlubmVyLmh0bWxcbiAgICAgICAgICAgICdpbm5lcic6IFsnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtaW5zdGFuY2UuaHRtbFxuICAgICAgICAgICAgJ2luc3RhbmNlJzogWydlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1raW5kLmh0bWxcbiAgICAgICAgICAgICdraW5kJzogWydwYXJzZUtpbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1taXhlcy5odG1sXG4gICAgICAgICAgICAnbWl4ZXMnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWl4aW4uaHRtbFxuICAgICAgICAgICAgJ21peGluJzogWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWxcbiAgICAgICAgICAgICdtZW1iZXInOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWV0aG9kLmh0bWxcbiAgICAgICAgICAgICdtZXRob2QnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tb2R1bGUuaHRtbFxuICAgICAgICAgICAgJ21vZHVsZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tZXRob2QuaHRtbFxuICAgICAgICAgICAgJ2Z1bmMnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tZXRob2QuaHRtbFxuICAgICAgICAgICAgJ2Z1bmN0aW9uJzogWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWxcbiAgICAgICAgICAgICd2YXInOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbmFtZS5odG1sXG4gICAgICAgICAgICAnbmFtZSc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1uYW1lc3BhY2UuaHRtbFxuICAgICAgICAgICAgJ25hbWVzcGFjZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1wcml2YXRlLmh0bWxcbiAgICAgICAgICAgICdwcml2YXRlJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXByb3RlY3RlZC5odG1sXG4gICAgICAgICAgICAncHJvdGVjdGVkJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXB1YmxpYy5odG1sXG4gICAgICAgICAgICAncHVibGljJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXJlYWRvbmx5Lmh0bWxcbiAgICAgICAgICAgICdyZWFkb25seSc6IFsnZW5zdXJlRW5kJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcmVxdWlyZXMuaHRtbFxuICAgICAgICAgICAgJ3JlcXVpcmVzJzogWydwYXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXNpbmNlLmh0bWxcbiAgICAgICAgICAgICdzaW5jZSc6IFsncGFyc2VEZXNjcmlwdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXN0YXRpYy5odG1sXG4gICAgICAgICAgICAnc3RhdGljJzogWydlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zdW1tYXJ5Lmh0bWxcbiAgICAgICAgICAgICdzdW1tYXJ5JzogWydwYXJzZURlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdGhpcy5odG1sXG4gICAgICAgICAgICAndGhpcyc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSxcbiAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy10b2RvLmh0bWxcbiAgICAgICAgICAgICd0b2RvJzogWydwYXJzZURlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdHlwZWRlZi5odG1sXG4gICAgICAgICAgICAndHlwZWRlZic6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXZhcmlhdGlvbi5odG1sXG4gICAgICAgICAgICAndmFyaWF0aW9uJzogWydwYXJzZVZhcmlhdGlvbiddLFxuICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXZlcnNpb24uaHRtbFxuICAgICAgICAgICAgJ3ZlcnNpb24nOiBbJ3BhcnNlRGVzY3JpcHRpb24nXVxuICAgICAgICB9O1xuXG4gICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSgpIHtcbiAgICAgICAgICAgIHZhciBpLCBpeiwgc2VxdWVuY2VzLCBtZXRob2Q7XG5cbiAgICAgICAgICAgIC8vIGVtcHR5IHRpdGxlXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RpdGxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgdGl0bGUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNlZWsgdG8gY29udGVudCBsYXN0IGluZGV4LlxuICAgICAgICAgICAgdGhpcy5fbGFzdCA9IHNlZWtDb250ZW50KHRoaXMuX3RpdGxlKTtcblxuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5KFJ1bGVzLCB0aGlzLl90aXRsZSkpIHtcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZXMgPSBSdWxlc1t0aGlzLl90aXRsZV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgc2VxdWVuY2VzXG4gICAgICAgICAgICAgICAgc2VxdWVuY2VzID0gWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lJywgJ3BhcnNlRGVzY3JpcHRpb24nLCAnZXBpbG9ndWUnXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBzZXF1ZW5jZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgICAgIG1ldGhvZCA9IHNlcXVlbmNlc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNbbWV0aG9kXSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2VlayBnbG9iYWwgaW5kZXggdG8gZW5kIG9mIHRoaXMgdGFnLlxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLl9sYXN0O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RhZztcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBwYXJzZVRhZyhvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgdGl0bGUsIHBhcnNlcjtcblxuICAgICAgICAgICAgLy8gc2tpcCB0byB0YWdcbiAgICAgICAgICAgIGlmICghc2tpcFRvVGFnKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc2NhbiB0aXRsZVxuICAgICAgICAgICAgdGl0bGUgPSBzY2FuVGl0bGUoKTtcblxuICAgICAgICAgICAgLy8gY29uc3RydWN0IHRhZyBwYXJzZXJcbiAgICAgICAgICAgIHBhcnNlciA9IG5ldyBUYWdQYXJzZXIob3B0aW9ucywgdGl0bGUpO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gUGFyc2UgSlNEb2NcbiAgICAgICAgLy9cblxuICAgICAgICBmdW5jdGlvbiBzY2FuSlNEb2NEZXNjcmlwdGlvbihwcmVzZXJ2ZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9ICcnLCBjaCwgYXRBbGxvd2VkO1xuXG4gICAgICAgICAgICBhdEFsbG93ZWQgPSB0cnVlO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXRBbGxvd2VkICYmIGNoID09PSAweDQwICAvKiAnQCcgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBhdEFsbG93ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXRBbGxvd2VkICYmICFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBhdEFsbG93ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwcmVzZXJ2ZVdoaXRlc3BhY2UgPyBkZXNjcmlwdGlvbiA6IHRyaW0oZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcGFyc2UoY29tbWVudCwgb3B0aW9ucykge1xuICAgICAgICAgICAgdmFyIHRhZ3MgPSBbXSwgdGFnLCBkZXNjcmlwdGlvbiwgaW50ZXJlc3RpbmdUYWdzLCBpLCBpejtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnVud3JhcCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudW53cmFwKSB7XG4gICAgICAgICAgICAgICAgc291cmNlID0gdW53cmFwQ29tbWVudChjb21tZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc291cmNlID0gY29tbWVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYXJyYXkgb2YgcmVsZXZhbnQgdGFnc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGFncykge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KG9wdGlvbnMudGFncykpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RpbmdUYWdzID0geyB9O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG9wdGlvbnMudGFncy5sZW5ndGg7IGkgPCBpejsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudGFnc1tpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmVzdGluZ1RhZ3Nbb3B0aW9ucy50YWdzW2ldXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcignSW52YWxpZCBcInRhZ3NcIiBwYXJhbWV0ZXI6ICcgKyBvcHRpb25zLnRhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCdJbnZhbGlkIFwidGFnc1wiIHBhcmFtZXRlcjogJyArIG9wdGlvbnMudGFncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICAgICAgbGluZU51bWJlciA9IDA7XG4gICAgICAgICAgICByZWNvdmVyYWJsZSA9IG9wdGlvbnMucmVjb3ZlcmFibGU7XG4gICAgICAgICAgICBzbG9wcHkgPSBvcHRpb25zLnNsb3BweTtcbiAgICAgICAgICAgIHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0O1xuXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHNjYW5KU0RvY0Rlc2NyaXB0aW9uKG9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlKTtcblxuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICB0YWcgPSBwYXJzZVRhZyhvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRhZykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFpbnRlcmVzdGluZ1RhZ3MgfHwgaW50ZXJlc3RpbmdUYWdzLmhhc093blByb3BlcnR5KHRhZy50aXRsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFncy5wdXNoKHRhZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICB0YWdzOiB0YWdzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbiAgICB9KGpzZG9jID0ge30pKTtcblxuICAgIGV4cG9ydHMudmVyc2lvbiA9IHV0aWxpdHkuVkVSU0lPTjtcbiAgICBleHBvcnRzLnBhcnNlID0ganNkb2MucGFyc2U7XG4gICAgZXhwb3J0cy5wYXJzZVR5cGUgPSB0eXBlZC5wYXJzZVR5cGU7XG4gICAgZXhwb3J0cy5wYXJzZVBhcmFtVHlwZSA9IHR5cGVkLnBhcnNlUGFyYW1UeXBlO1xuICAgIGV4cG9ydHMudW53cmFwQ29tbWVudCA9IHVud3JhcENvbW1lbnQ7XG4gICAgZXhwb3J0cy5TeW50YXggPSBzaGFsbG93Q29weSh0eXBlZC5TeW50YXgpO1xuICAgIGV4cG9ydHMuRXJyb3IgPSB1dGlsaXR5LkRvY3RyaW5lRXJyb3I7XG4gICAgZXhwb3J0cy50eXBlID0ge1xuICAgICAgICBTeW50YXg6IGV4cG9ydHMuU3ludGF4LFxuICAgICAgICBwYXJzZVR5cGU6IHR5cGVkLnBhcnNlVHlwZSxcbiAgICAgICAgcGFyc2VQYXJhbVR5cGU6IHR5cGVkLnBhcnNlUGFyYW1UeXBlLFxuICAgICAgICBzdHJpbmdpZnk6IHR5cGVkLnN0cmluZ2lmeVxuICAgIH07XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDE0IERhbiBUYW8gPGRhbmllbC50YW9AZ21haWwuY29tPlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgQW5kcmV3IEVpc2VuYmVyZyA8YW5kcmV3QGVpc2VuYmVyZy5hcz5cblxuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4vLyBcInR5cGVkXCIsIHRoZSBUeXBlIEV4cHJlc3Npb24gUGFyc2VyIGZvciBkb2N0cmluZS5cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgU3ludGF4LFxuICAgICAgICBUb2tlbixcbiAgICAgICAgc291cmNlLFxuICAgICAgICBsZW5ndGgsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBwcmV2aW91cyxcbiAgICAgICAgdG9rZW4sXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBlc3V0aWxzLFxuICAgICAgICB1dGlsaXR5O1xuXG4gICAgZXN1dGlscyA9IHJlcXVpcmUoJ2VzdXRpbHMnKTtcbiAgICB1dGlsaXR5ID0gcmVxdWlyZSgnLi91dGlsaXR5Jyk7XG5cbiAgICBTeW50YXggPSB7XG4gICAgICAgIE51bGxhYmxlTGl0ZXJhbDogJ051bGxhYmxlTGl0ZXJhbCcsXG4gICAgICAgIEFsbExpdGVyYWw6ICdBbGxMaXRlcmFsJyxcbiAgICAgICAgTnVsbExpdGVyYWw6ICdOdWxsTGl0ZXJhbCcsXG4gICAgICAgIFVuZGVmaW5lZExpdGVyYWw6ICdVbmRlZmluZWRMaXRlcmFsJyxcbiAgICAgICAgVm9pZExpdGVyYWw6ICdWb2lkTGl0ZXJhbCcsXG4gICAgICAgIFVuaW9uVHlwZTogJ1VuaW9uVHlwZScsXG4gICAgICAgIEFycmF5VHlwZTogJ0FycmF5VHlwZScsXG4gICAgICAgIFJlY29yZFR5cGU6ICdSZWNvcmRUeXBlJyxcbiAgICAgICAgRmllbGRUeXBlOiAnRmllbGRUeXBlJyxcbiAgICAgICAgRnVuY3Rpb25UeXBlOiAnRnVuY3Rpb25UeXBlJyxcbiAgICAgICAgUGFyYW1ldGVyVHlwZTogJ1BhcmFtZXRlclR5cGUnLFxuICAgICAgICBSZXN0VHlwZTogJ1Jlc3RUeXBlJyxcbiAgICAgICAgTm9uTnVsbGFibGVUeXBlOiAnTm9uTnVsbGFibGVUeXBlJyxcbiAgICAgICAgT3B0aW9uYWxUeXBlOiAnT3B0aW9uYWxUeXBlJyxcbiAgICAgICAgTnVsbGFibGVUeXBlOiAnTnVsbGFibGVUeXBlJyxcbiAgICAgICAgTmFtZUV4cHJlc3Npb246ICdOYW1lRXhwcmVzc2lvbicsXG4gICAgICAgIFR5cGVBcHBsaWNhdGlvbjogJ1R5cGVBcHBsaWNhdGlvbidcbiAgICB9O1xuXG4gICAgVG9rZW4gPSB7XG4gICAgICAgIElMTEVHQUw6IDAsICAgIC8vIElMTEVHQUxcbiAgICAgICAgRE9UX0xUOiAxLCAgICAgLy8gLjxcbiAgICAgICAgUkVTVDogMiwgICAgICAgLy8gLi4uXG4gICAgICAgIExUOiAzLCAgICAgICAgIC8vIDxcbiAgICAgICAgR1Q6IDQsICAgICAgICAgLy8gPlxuICAgICAgICBMUEFSRU46IDUsICAgICAvLyAoXG4gICAgICAgIFJQQVJFTjogNiwgICAgIC8vIClcbiAgICAgICAgTEJSQUNFOiA3LCAgICAgLy8ge1xuICAgICAgICBSQlJBQ0U6IDgsICAgICAvLyB9XG4gICAgICAgIExCUkFDSzogOSwgICAgLy8gW1xuICAgICAgICBSQlJBQ0s6IDEwLCAgICAvLyBdXG4gICAgICAgIENPTU1BOiAxMSwgICAgIC8vICxcbiAgICAgICAgQ09MT046IDEyLCAgICAgLy8gOlxuICAgICAgICBTVEFSOiAxMywgICAgICAvLyAqXG4gICAgICAgIFBJUEU6IDE0LCAgICAgIC8vIHxcbiAgICAgICAgUVVFU1RJT046IDE1LCAgLy8gP1xuICAgICAgICBCQU5HOiAxNiwgICAgICAvLyAhXG4gICAgICAgIEVRVUFMOiAxNywgICAgIC8vID1cbiAgICAgICAgTkFNRTogMTgsICAgICAgLy8gbmFtZSB0b2tlblxuICAgICAgICBTVFJJTkc6IDE5LCAgICAvLyBzdHJpbmdcbiAgICAgICAgTlVNQkVSOiAyMCwgICAgLy8gbnVtYmVyXG4gICAgICAgIEVPRjogMjFcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gaXNUeXBlTmFtZShjaCkge1xuICAgICAgICByZXR1cm4gJz48KCl7fVtdLDoqfD8hPScuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkgPT09IC0xICYmICFlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKGNoKSAmJiAhZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY2gpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIENvbnRleHQocHJldmlvdXMsIGluZGV4LCB0b2tlbiwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcHJldmlvdXMgPSBwcmV2aW91cztcbiAgICAgICAgdGhpcy5faW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5fdG9rZW4gPSB0b2tlbjtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBDb250ZXh0LnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwcmV2aW91cyA9IHRoaXMuX3ByZXZpb3VzO1xuICAgICAgICBpbmRleCA9IHRoaXMuX2luZGV4O1xuICAgICAgICB0b2tlbiA9IHRoaXMuX3Rva2VuO1xuICAgICAgICB2YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIH07XG5cbiAgICBDb250ZXh0LnNhdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udGV4dChwcmV2aW91cywgaW5kZXgsIHRva2VuLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7XG4gICAgICAgIHZhciBjaCA9IHNvdXJjZS5jaGFyQXQoaW5kZXgpO1xuICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICByZXR1cm4gY2g7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2NhbkhleEVzY2FwZShwcmVmaXgpIHtcbiAgICAgICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwO1xuXG4gICAgICAgIGxlbiA9IChwcmVmaXggPT09ICd1JykgPyA0IDogMjtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgZXN1dGlscy5jb2RlLmlzSGV4RGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgIGNoID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYW5TdHJpbmcoKSB7XG4gICAgICAgIHZhciBzdHIgPSAnJywgcXVvdGUsIGNoLCBjb2RlLCB1bmVzY2FwZWQsIHJlc3RvcmU7IC8vVE9ETyByZXZpZXcgcmVtb3ZhbCBvY3RhbCA9IGZhbHNlXG4gICAgICAgIHF1b3RlID0gc291cmNlLmNoYXJBdChpbmRleCk7XG4gICAgICAgICsraW5kZXg7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaCA9IGFkdmFuY2UoKTtcblxuICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkge1xuICAgICAgICAgICAgICAgIHF1b3RlID0gJyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBjaCA9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xccic7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcdCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkID0gc2NhbkhleEVzY2FwZShjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxiJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFxmJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFx2JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXByZWNhdGluZyB1bnVzZWQgY29kZS4gVE9ETyByZXZpZXcgcmVtb3ZhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBvY3RhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETyBSZXZpZXcgUmVtb3ZhbCBvY3RhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihhZHZhbmNlKCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJpbmcgc3RhcnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggMCwgMSwgMiwgM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gpID49IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdXRpbHMuY29kZS5pc09jdGFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKGFkdmFuY2UoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAgJ1xccicgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBICAvKiAnXFxuJyAqLykge1xuICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXN1dGlscy5jb2RlLmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHF1b3RlICE9PSAnJykge1xuICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHF1b3RlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IHN0cjtcbiAgICAgICAgcmV0dXJuIFRva2VuLlNUUklORztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2FuTnVtYmVyKCkge1xuICAgICAgICB2YXIgbnVtYmVyLCBjaDtcblxuICAgICAgICBudW1iZXIgPSAnJztcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICAgICAgaWYgKGNoICE9PSAweDJFICAvKiAnLicgKi8pIHtcbiAgICAgICAgICAgIG51bWJlciA9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4NzggIC8qICd4JyAqLyB8fCBjaCA9PT0gMHg1OCAgLyogJ1gnICovKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0hleERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgMHhcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludChudW1iZXIsIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5VTUJFUjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVzdXRpbHMuY29kZS5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQobnVtYmVyLCA4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5VTUJFUjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmICghZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaCA9PT0gMHgyRSAgLyogJy4nICovKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKCFlc3V0aWxzLmNvZGUuaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSAweDY1ICAvKiAnZScgKi8gfHwgY2ggPT09IDB4NDUgIC8qICdFJyAqLykge1xuICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcblxuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09IDB4MkIgIC8qICcrJyAqLyB8fCBjaCA9PT0gMHgyRCAgLyogJy0nICovKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVzdXRpbHMuY29kZS5pc0RlY2ltYWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KG51bWJlcik7XG4gICAgICAgIHJldHVybiBUb2tlbi5OVU1CRVI7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBzY2FuVHlwZU5hbWUoKSB7XG4gICAgICAgIHZhciBjaCwgY2gyO1xuXG4gICAgICAgIHZhbHVlID0gYWR2YW5jZSgpO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGggJiYgaXNUeXBlTmFtZShzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRSAgLyogJy4nICovKSB7XG4gICAgICAgICAgICAgICAgaWYgKChpbmRleCArIDEpID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4uSUxMRUdBTDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2gyID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAoY2gyID09PSAweDNDICAvKiAnPCcgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWUgKz0gYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBUb2tlbi5OQU1FO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgIHZhciBjaDtcblxuICAgICAgICBwcmV2aW91cyA9IGluZGV4O1xuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBlc3V0aWxzLmNvZGUuaXNXaGl0ZVNwYWNlKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkVPRjtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgIGNhc2UgMHgyNzogIC8qICcnJyAqL1xuICAgICAgICBjYXNlIDB4MjI6ICAvKiAnXCInICovXG4gICAgICAgICAgICB0b2tlbiA9IHNjYW5TdHJpbmcoKTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4M0E6ICAvKiAnOicgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uQ09MT047XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDJDOiAgLyogJywnICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkNPTU1BO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgyODogIC8qICcoJyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5MUEFSRU47XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDI5OiAgLyogJyknICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJQQVJFTjtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4NUI6ICAvKiAnWycgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTEJSQUNLO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHg1RDogIC8qICddJyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5SQlJBQ0s7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDdCOiAgLyogJ3snICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxCUkFDRTtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4N0Q6ICAvKiAnfScgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNFO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgyRTogIC8qICcuJyAqL1xuICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4M0MgIC8qICc8JyAqLykge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7ICAvLyAnLidcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOyAgLy8gJzwnXG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRE9UX0xUO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDJFICAvKiAnLicgKi8gJiYgaW5kZXggKyAyIDwgbGVuZ3RoICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMikgPT09IDB4MkUgIC8qICcuJyAqLykge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7ICAvLyAnLidcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOyAgLy8gJy4nXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsgIC8vICcuJ1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJFU1Q7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZXN1dGlscy5jb2RlLmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHNjYW5OdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uSUxMRUdBTDtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4M0M6ICAvKiAnPCcgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTFQ7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgY2FzZSAweDNFOiAgLyogJz4nICovXG4gICAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgICB0b2tlbiA9IFRva2VuLkdUO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgyQTogIC8qICcqJyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5TVEFSO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHg3QzogIC8qICd8JyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5QSVBFO1xuICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuXG4gICAgICAgIGNhc2UgMHgzRjogIC8qICc/JyAqL1xuICAgICAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5RVUVTVElPTjtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4MjE6ICAvKiAnIScgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uQkFORztcbiAgICAgICAgICAgIHJldHVybiB0b2tlbjtcblxuICAgICAgICBjYXNlIDB4M0Q6ICAvKiAnPScgKi9cbiAgICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRVFVQUw7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChlc3V0aWxzLmNvZGUuaXNEZWNpbWFsRGlnaXQoY2gpKSB7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSBzY2FuTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0eXBlIHN0cmluZyBwZXJtaXRzIGZvbGxvd2luZyBjYXNlLFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIG5hbWVzcGFjZS5tb2R1bGUuTXlDbGFzc1xuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIHRoaXMgcmVkdWNlZCAxIHRva2VuIFRLX05BTUVcbiAgICAgICAgICAgIHV0aWxpdHkuYXNzZXJ0KGlzVHlwZU5hbWUoY2gpKTtcbiAgICAgICAgICAgIHRva2VuID0gc2NhblR5cGVOYW1lKCk7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25zdW1lKHRhcmdldCwgdGV4dCkge1xuICAgICAgICB1dGlsaXR5LmFzc2VydCh0b2tlbiA9PT0gdGFyZ2V0LCB0ZXh0IHx8ICdjb25zdW1lZCB0b2tlbiBub3QgbWF0Y2hlZCcpO1xuICAgICAgICBuZXh0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhwZWN0KHRhcmdldCwgbWVzc2FnZSkge1xuICAgICAgICBpZiAodG9rZW4gIT09IHRhcmdldCkge1xuICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKG1lc3NhZ2UgfHwgJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgfVxuXG4gICAgLy8gVW5pb25UeXBlIDo9ICcoJyBUeXBlVW5pb25MaXN0ICcpJ1xuICAgIC8vXG4gICAgLy8gVHlwZVVuaW9uTGlzdCA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgIHwgTm9uZW1wdHlUeXBlVW5pb25MaXN0XG4gICAgLy9cbiAgICAvLyBOb25lbXB0eVR5cGVVbmlvbkxpc3QgOj1cbiAgICAvLyAgICAgVHlwZUV4cHJlc3Npb25cbiAgICAvLyAgIHwgVHlwZUV4cHJlc3Npb24gJ3wnIE5vbmVtcHR5VHlwZVVuaW9uTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlVW5pb25UeXBlKCkge1xuICAgICAgICB2YXIgZWxlbWVudHM7XG4gICAgICAgIGNvbnN1bWUoVG9rZW4uTFBBUkVOLCAnVW5pb25UeXBlIHNob3VsZCBzdGFydCB3aXRoICgnKTtcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcbiAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHtcbiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVR5cGVFeHByZXNzaW9uKCkpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUlBBUkVOKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uUElQRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3VtZShUb2tlbi5SUEFSRU4sICdVbmlvblR5cGUgc2hvdWxkIGVuZCB3aXRoICknKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmlvblR5cGUsXG4gICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBcnJheVR5cGUgOj0gJ1snIEVsZW1lbnRUeXBlTGlzdCAnXSdcbiAgICAvL1xuICAgIC8vIEVsZW1lbnRUeXBlTGlzdCA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgfCBUeXBlRXhwcmVzc2lvblxuICAgIC8vICB8ICcuLi4nIFR5cGVFeHByZXNzaW9uXG4gICAgLy8gIHwgVHlwZUV4cHJlc3Npb24gJywnIEVsZW1lbnRUeXBlTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXlUeXBlKCkge1xuICAgICAgICB2YXIgZWxlbWVudHM7XG4gICAgICAgIGNvbnN1bWUoVG9rZW4uTEJSQUNLLCAnQXJyYXlUeXBlIHNob3VsZCBzdGFydCB3aXRoIFsnKTtcbiAgICAgICAgZWxlbWVudHMgPSBbXTtcbiAgICAgICAgd2hpbGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0spIHtcbiAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkge1xuICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUkVTVCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXN0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VUeXBlRXhwcmVzc2lvbigpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNLKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkNPTU1BKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoVG9rZW4uUkJSQUNLKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFN5bnRheC5BcnJheVR5cGUsXG4gICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUZpZWxkTmFtZSgpIHtcbiAgICAgICAgdmFyIHYgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FIHx8IHRva2VuID09PSBUb2tlbi5TVFJJTkcpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OVU1CRVIpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTlVNQkVSKTtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodik7XG4gICAgICAgIH1cblxuICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTtcbiAgICB9XG5cbiAgICAvLyBGaWVsZFR5cGUgOj1cbiAgICAvLyAgICAgRmllbGROYW1lXG4gICAgLy8gICB8IEZpZWxkTmFtZSAnOicgVHlwZUV4cHJlc3Npb25cbiAgICAvL1xuICAgIC8vIEZpZWxkTmFtZSA6PVxuICAgIC8vICAgICBOYW1lRXhwcmVzc2lvblxuICAgIC8vICAgfCBTdHJpbmdMaXRlcmFsXG4gICAgLy8gICB8IE51bWJlckxpdGVyYWxcbiAgICAvLyAgIHwgUmVzZXJ2ZWRJZGVudGlmaWVyXG4gICAgZnVuY3Rpb24gcGFyc2VGaWVsZFR5cGUoKSB7XG4gICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAga2V5ID0gcGFyc2VGaWVsZE5hbWUoKTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT0xPTikge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT0xPTik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5GaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlVHlwZUV4cHJlc3Npb24oKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4LkZpZWxkVHlwZSxcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBSZWNvcmRUeXBlIDo9ICd7JyBGaWVsZFR5cGVMaXN0ICd9J1xuICAgIC8vXG4gICAgLy8gRmllbGRUeXBlTGlzdCA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgIHwgRmllbGRUeXBlXG4gICAgLy8gICB8IEZpZWxkVHlwZSAnLCcgRmllbGRUeXBlTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZSgpIHtcbiAgICAgICAgdmFyIGZpZWxkcztcblxuICAgICAgICBjb25zdW1lKFRva2VuLkxCUkFDRSwgJ1JlY29yZFR5cGUgc2hvdWxkIHN0YXJ0IHdpdGggeycpO1xuICAgICAgICBmaWVsZHMgPSBbXTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT01NQSkge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aGlsZSAodG9rZW4gIT09IFRva2VuLlJCUkFDRSkge1xuICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHBhcnNlRmllbGRUeXBlKCkpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNFKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5DT01NQSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4cGVjdChUb2tlbi5SQlJBQ0UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlY29yZFR5cGUsXG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIE5hbWVFeHByZXNzaW9uIDo9XG4gICAgLy8gICAgSWRlbnRpZmllclxuICAgIC8vICB8IFRhZ0lkZW50aWZpZXIgJzonIElkZW50aWZpZXJcbiAgICAvL1xuICAgIC8vIFRhZyBpZGVudGlmaWVyIGlzIG9uZSBvZiBcIm1vZHVsZVwiLCBcImV4dGVybmFsXCIgb3IgXCJldmVudFwiXG4gICAgLy8gSWRlbnRpZmllciBpcyB0aGUgc2FtZSBhcyBUb2tlbi5OQU1FLCBpbmNsdWRpbmcgYW55IGRvdHMsIHNvbWV0aGluZyBsaWtlXG4gICAgLy8gbmFtZXNwYWNlLm1vZHVsZS5NeUNsYXNzXG4gICAgZnVuY3Rpb24gcGFyc2VOYW1lRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIG5hbWUgPSB2YWx1ZTtcbiAgICAgICAgZXhwZWN0KFRva2VuLk5BTUUpO1xuXG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09MT04gJiYgKFxuICAgICAgICAgICAgICAgIG5hbWUgPT09ICdtb2R1bGUnIHx8XG4gICAgICAgICAgICAgICAgbmFtZSA9PT0gJ2V4dGVybmFsJyB8fFxuICAgICAgICAgICAgICAgIG5hbWUgPT09ICdldmVudCcpKSB7XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTE9OKTtcbiAgICAgICAgICAgIG5hbWUgKz0gJzonICsgdmFsdWU7XG4gICAgICAgICAgICBleHBlY3QoVG9rZW4uTkFNRSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5hbWVFeHByZXNzaW9uLFxuICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIFR5cGVFeHByZXNzaW9uTGlzdCA6PVxuICAgIC8vICAgICBUb3BMZXZlbFR5cGVFeHByZXNzaW9uXG4gICAgLy8gICB8IFRvcExldmVsVHlwZUV4cHJlc3Npb24gJywnIFR5cGVFeHByZXNzaW9uTGlzdFxuICAgIGZ1bmN0aW9uIHBhcnNlVHlwZUV4cHJlc3Npb25MaXN0KCkge1xuICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTtcblxuICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVG9wKCkpO1xuICAgICAgICB3aGlsZSAodG9rZW4gPT09IFRva2VuLkNPTU1BKSB7XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTU1BKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUb3AoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgIH1cblxuICAgIC8vIFR5cGVOYW1lIDo9XG4gICAgLy8gICAgIE5hbWVFeHByZXNzaW9uXG4gICAgLy8gICB8IE5hbWVFeHByZXNzaW9uIFR5cGVBcHBsaWNhdGlvblxuICAgIC8vXG4gICAgLy8gVHlwZUFwcGxpY2F0aW9uIDo9XG4gICAgLy8gICAgICcuPCcgVHlwZUV4cHJlc3Npb25MaXN0ICc+J1xuICAgIC8vICAgfCAnPCcgVHlwZUV4cHJlc3Npb25MaXN0ICc+JyAgIC8vIHRoaXMgaXMgZXh0ZW5zaW9uIG9mIGRvY3RyaW5lXG4gICAgZnVuY3Rpb24gcGFyc2VUeXBlTmFtZSgpIHtcbiAgICAgICAgdmFyIGV4cHIsIGFwcGxpY2F0aW9ucztcblxuICAgICAgICBleHByID0gcGFyc2VOYW1lRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkRPVF9MVCB8fCB0b2tlbiA9PT0gVG9rZW4uTFQpIHtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9ucyA9IHBhcnNlVHlwZUV4cHJlc3Npb25MaXN0KCk7XG4gICAgICAgICAgICBleHBlY3QoVG9rZW4uR1QpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVHlwZUFwcGxpY2F0aW9uLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsXG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25zOiBhcHBsaWNhdGlvbnNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG4gICAgLy8gUmVzdWx0VHlwZSA6PVxuICAgIC8vICAgICA8PGVtcHR5Pj5cbiAgICAvLyAgIHwgJzonIHZvaWRcbiAgICAvLyAgIHwgJzonIFR5cGVFeHByZXNzaW9uXG4gICAgLy9cbiAgICAvLyBCTkYgaXMgYWJvdmVcbiAgICAvLyBidXQsIHdlIHJlbW92ZSA8PGVtcHR5Pj4gcGF0dGVybiwgc28gdG9rZW4gaXMgYWx3YXlzIFR5cGVUb2tlbjo6Q09MT05cbiAgICBmdW5jdGlvbiBwYXJzZVJlc3VsdFR5cGUoKSB7XG4gICAgICAgIGNvbnN1bWUoVG9rZW4uQ09MT04sICdSZXN1bHRUeXBlIHNob3VsZCBzdGFydCB3aXRoIDonKTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FICYmIHZhbHVlID09PSAndm9pZCcpIHtcbiAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTkFNRSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Wb2lkTGl0ZXJhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VUeXBlRXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIC8vIFBhcmFtZXRlcnNUeXBlIDo9XG4gICAgLy8gICAgIFJlc3RQYXJhbWV0ZXJUeXBlXG4gICAgLy8gICB8IE5vblJlc3RQYXJhbWV0ZXJzVHlwZVxuICAgIC8vICAgfCBOb25SZXN0UGFyYW1ldGVyc1R5cGUgJywnIFJlc3RQYXJhbWV0ZXJUeXBlXG4gICAgLy9cbiAgICAvLyBSZXN0UGFyYW1ldGVyVHlwZSA6PVxuICAgIC8vICAgICAnLi4uJ1xuICAgIC8vICAgICAnLi4uJyBJZGVudGlmaWVyXG4gICAgLy9cbiAgICAvLyBOb25SZXN0UGFyYW1ldGVyc1R5cGUgOj1cbiAgICAvLyAgICAgUGFyYW1ldGVyVHlwZSAnLCcgTm9uUmVzdFBhcmFtZXRlcnNUeXBlXG4gICAgLy8gICB8IFBhcmFtZXRlclR5cGVcbiAgICAvLyAgIHwgT3B0aW9uYWxQYXJhbWV0ZXJzVHlwZVxuICAgIC8vXG4gICAgLy8gT3B0aW9uYWxQYXJhbWV0ZXJzVHlwZSA6PVxuICAgIC8vICAgICBPcHRpb25hbFBhcmFtZXRlclR5cGVcbiAgICAvLyAgIHwgT3B0aW9uYWxQYXJhbWV0ZXJUeXBlLCBPcHRpb25hbFBhcmFtZXRlcnNUeXBlXG4gICAgLy9cbiAgICAvLyBPcHRpb25hbFBhcmFtZXRlclR5cGUgOj0gUGFyYW1ldGVyVHlwZT1cbiAgICAvL1xuICAgIC8vIFBhcmFtZXRlclR5cGUgOj0gVHlwZUV4cHJlc3Npb24gfCBJZGVudGlmaWVyICc6JyBUeXBlRXhwcmVzc2lvblxuICAgIC8vXG4gICAgLy8gSWRlbnRpZmllciBpcyBcIm5ld1wiIG9yIFwidGhpc1wiXG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXJzVHlwZSgpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IFtdLCBvcHRpb25hbFNlcXVlbmNlID0gZmFsc2UsIGV4cHIsIHJlc3QgPSBmYWxzZTtcblxuICAgICAgICB3aGlsZSAodG9rZW4gIT09IFRva2VuLlJQQVJFTikge1xuICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5SRVNUKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVzdFBhcmFtZXRlclR5cGVcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLlJFU1QpO1xuICAgICAgICAgICAgICAgIHJlc3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHByID0gcGFyc2VUeXBlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgaWYgKGV4cHIudHlwZSA9PT0gU3ludGF4Lk5hbWVFeHByZXNzaW9uICYmIHRva2VuID09PSBUb2tlbi5DT0xPTikge1xuICAgICAgICAgICAgICAgIC8vIElkZW50aWZpZXIgJzonIFR5cGVFeHByZXNzaW9uXG4gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT0xPTik7XG4gICAgICAgICAgICAgICAgZXhwciA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlBhcmFtZXRlclR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGV4cHIubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VUeXBlRXhwcmVzc2lvbigpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uRVFVQUwpIHtcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkVRVUFMKTtcbiAgICAgICAgICAgICAgICBleHByID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguT3B0aW9uYWxUeXBlLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBvcHRpb25hbFNlcXVlbmNlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsU2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdXRpbGl0eS50aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgICAgICBleHByID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmVzdFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW1zLnB1c2goZXhwcik7XG4gICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikge1xuICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5DT01NQSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvblR5cGUgOj0gJ2Z1bmN0aW9uJyBGdW5jdGlvblNpZ25hdHVyZVR5cGVcbiAgICAvL1xuICAgIC8vIEZ1bmN0aW9uU2lnbmF0dXJlVHlwZSA6PVxuICAgIC8vICAgfCBUeXBlUGFyYW1ldGVycyAnKCcgJyknIFJlc3VsdFR5cGVcbiAgICAvLyAgIHwgVHlwZVBhcmFtZXRlcnMgJygnIFBhcmFtZXRlcnNUeXBlICcpJyBSZXN1bHRUeXBlXG4gICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAndGhpcycgJzonIFR5cGVOYW1lICcpJyBSZXN1bHRUeXBlXG4gICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAndGhpcycgJzonIFR5cGVOYW1lICcsJyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZVxuICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25UeXBlKCkge1xuICAgICAgICB2YXIgaXNOZXcsIHRoaXNCaW5kaW5nLCBwYXJhbXMsIHJlc3VsdCwgZm5UeXBlO1xuICAgICAgICB1dGlsaXR5LmFzc2VydCh0b2tlbiA9PT0gVG9rZW4uTkFNRSAmJiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJywgJ0Z1bmN0aW9uVHlwZSBzaG91bGQgc3RhcnQgd2l0aCBcXCdmdW5jdGlvblxcJycpO1xuICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpO1xuXG4gICAgICAgIC8vIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVyIGlzIG5vdCBpbXBsZW1lbnRpbmcgVHlwZVBhcmFtZXRlcnMuXG4gICAgICAgIC8vIFNvIHdlIGRvIG5vdC4gaWYgd2UgZG9uJ3QgZ2V0ICcoJywgd2Ugc2VlIGl0IGFzIGVycm9yLlxuICAgICAgICBleHBlY3QoVG9rZW4uTFBBUkVOKTtcblxuICAgICAgICBpc05ldyA9IGZhbHNlO1xuICAgICAgICBwYXJhbXMgPSBbXTtcbiAgICAgICAgdGhpc0JpbmRpbmcgPSBudWxsO1xuICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikge1xuICAgICAgICAgICAgLy8gUGFyYW1ldGVyc1R5cGUgb3IgJ3RoaXMnXG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLk5BTUUgJiZcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlID09PSAndGhpcycgfHwgdmFsdWUgPT09ICduZXcnKSkge1xuICAgICAgICAgICAgICAgIC8vICd0aGlzJyBvciAnbmV3J1xuICAgICAgICAgICAgICAgIC8vICduZXcnIGlzIENsb3N1cmUgQ29tcGlsZXIgZXh0ZW5zaW9uXG4gICAgICAgICAgICAgICAgaXNOZXcgPSB2YWx1ZSA9PT0gJ25ldyc7XG4gICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uQ09MT04pO1xuICAgICAgICAgICAgICAgIHRoaXNCaW5kaW5nID0gcGFyc2VUeXBlTmFtZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09NTUEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1ldGVyc1R5cGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1ldGVyc1R5cGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChUb2tlbi5SUEFSRU4pO1xuXG4gICAgICAgIHJlc3VsdCA9IG51bGw7XG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09MT04pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlUmVzdWx0VHlwZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm5UeXBlID0ge1xuICAgICAgICAgICAgdHlwZTogU3ludGF4LkZ1bmN0aW9uVHlwZSxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgcmVzdWx0OiByZXN1bHRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXNCaW5kaW5nKSB7XG4gICAgICAgICAgICAvLyBhdm9pZCBhZGRpbmcgbnVsbCAnbmV3JyBhbmQgJ3RoaXMnIHByb3BlcnRpZXNcbiAgICAgICAgICAgIGZuVHlwZVsndGhpcyddID0gdGhpc0JpbmRpbmc7XG4gICAgICAgICAgICBpZiAoaXNOZXcpIHtcbiAgICAgICAgICAgICAgICBmblR5cGVbJ25ldyddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm5UeXBlO1xuICAgIH1cblxuICAgIC8vIEJhc2ljVHlwZUV4cHJlc3Npb24gOj1cbiAgICAvLyAgICAgJyonXG4gICAgLy8gICB8ICdudWxsJ1xuICAgIC8vICAgfCAndW5kZWZpbmVkJ1xuICAgIC8vICAgfCBUeXBlTmFtZVxuICAgIC8vICAgfCBGdW5jdGlvblR5cGVcbiAgICAvLyAgIHwgVW5pb25UeXBlXG4gICAgLy8gICB8IFJlY29yZFR5cGVcbiAgICAvLyAgIHwgQXJyYXlUeXBlXG4gICAgZnVuY3Rpb24gcGFyc2VCYXNpY1R5cGVFeHByZXNzaW9uKCkge1xuICAgICAgICB2YXIgY29udGV4dDtcbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICBjYXNlIFRva2VuLlNUQVI6XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLlNUQVIpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQWxsTGl0ZXJhbFxuICAgICAgICAgICAgfTtcblxuICAgICAgICBjYXNlIFRva2VuLkxQQVJFTjpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVVuaW9uVHlwZSgpO1xuXG4gICAgICAgIGNhc2UgVG9rZW4uTEJSQUNLOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlUeXBlKCk7XG5cbiAgICAgICAgY2FzZSBUb2tlbi5MQlJBQ0U6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmRUeXBlKCk7XG5cbiAgICAgICAgY2FzZSBUb2tlbi5OQU1FOlxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsTGl0ZXJhbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmRlZmluZWRMaXRlcmFsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGV4dCA9IENvbnRleHQuc2F2ZSgpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25UeXBlKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVOYW1lKCk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHlwZUV4cHJlc3Npb24gOj1cbiAgICAvLyAgICAgQmFzaWNUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgfCAnPycgQmFzaWNUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgfCAnIScgQmFzaWNUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgfCBCYXNpY1R5cGVFeHByZXNzaW9uICc/J1xuICAgIC8vICAgfCBCYXNpY1R5cGVFeHByZXNzaW9uICchJ1xuICAgIC8vICAgfCAnPydcbiAgICAvLyAgIHwgQmFzaWNUeXBlRXhwcmVzc2lvbiAnW10nXG4gICAgZnVuY3Rpb24gcGFyc2VUeXBlRXhwcmVzc2lvbigpIHtcbiAgICAgICAgdmFyIGV4cHI7XG5cbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5RVUVTVElPTikge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5RVUVTVElPTik7XG4gICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTU1BIHx8IHRva2VuID09PSBUb2tlbi5FUVVBTCB8fCB0b2tlbiA9PT0gVG9rZW4uUkJSQUNFIHx8XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID09PSBUb2tlbi5SUEFSRU4gfHwgdG9rZW4gPT09IFRva2VuLlBJUEUgfHwgdG9rZW4gPT09IFRva2VuLkVPRiB8fFxuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9PT0gVG9rZW4uUkJSQUNLIHx8IHRva2VuID09PSBUb2tlbi5HVCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsYWJsZUxpdGVyYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbGFibGVUeXBlLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlQmFzaWNUeXBlRXhwcmVzc2lvbigpLFxuICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQkFORykge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5CQU5HKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5vbk51bGxhYmxlVHlwZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBwYXJzZUJhc2ljVHlwZUV4cHJlc3Npb24oKSxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gcGFyc2VCYXNpY1R5cGVFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQkFORykge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5CQU5HKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5vbk51bGxhYmxlVHlwZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICAgICAgICAgIHByZWZpeDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlFVRVNUSU9OKSB7XG4gICAgICAgICAgICBjb25zdW1lKFRva2VuLlFVRVNUSU9OKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxlVHlwZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICAgICAgICAgIHByZWZpeDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkxCUkFDSykge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5MQlJBQ0spO1xuICAgICAgICAgICAgZXhwZWN0KFRva2VuLlJCUkFDSywgJ2V4cGVjdGVkIGFuIGFycmF5LXN0eWxlIHR5cGUgZGVjbGFyYXRpb24gKCcgKyB2YWx1ZSArICdbXSknKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlR5cGVBcHBsaWNhdGlvbixcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1lRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FycmF5J1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYXBwbGljYXRpb25zOiBbZXhwcl1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICAvLyBUb3BMZXZlbFR5cGVFeHByZXNzaW9uIDo9XG4gICAgLy8gICAgICBUeXBlRXhwcmVzc2lvblxuICAgIC8vICAgIHwgVHlwZVVuaW9uTGlzdFxuICAgIC8vXG4gICAgLy8gVGhpcyBydWxlIGlzIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVyIGV4dGVuc2lvbiwgbm90IEVTNFxuICAgIC8vIGxpa2UsXG4gICAgLy8gICB7IG51bWJlciB8IHN0cmluZyB9XG4gICAgLy8gSWYgc3RyaWN0IHRvIEVTNCwgd2Ugc2hvdWxkIHdyaXRlIGl0IGFzXG4gICAgLy8gICB7IChudW1iZXJ8c3RyaW5nKSB9XG4gICAgZnVuY3Rpb24gcGFyc2VUb3AoKSB7XG4gICAgICAgIHZhciBleHByLCBlbGVtZW50cztcblxuICAgICAgICBleHByID0gcGFyc2VUeXBlRXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlBJUEUpIHtcbiAgICAgICAgICAgIHJldHVybiBleHByO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudHMgPSBbIGV4cHIgXTtcbiAgICAgICAgY29uc3VtZShUb2tlbi5QSVBFKTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUElQRSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5QSVBFKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBTeW50YXguVW5pb25UeXBlLFxuICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VUb3BQYXJhbVR5cGUoKSB7XG4gICAgICAgIHZhciBleHByO1xuXG4gICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5SRVNUKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlc3RUeXBlLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlVG9wKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gcGFyc2VUb3AoKTtcbiAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5FUVVBTCkge1xuICAgICAgICAgICAgY29uc3VtZShUb2tlbi5FUVVBTCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5PcHRpb25hbFR5cGUsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwclxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlVHlwZShzcmMsIG9wdCkge1xuICAgICAgICB2YXIgZXhwcjtcblxuICAgICAgICBzb3VyY2UgPSBzcmM7XG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgICAgIGluZGV4ID0gMDtcbiAgICAgICAgcHJldmlvdXMgPSAwO1xuXG4gICAgICAgIG5leHQoKTtcbiAgICAgICAgZXhwciA9IHBhcnNlVG9wKCk7XG5cbiAgICAgICAgaWYgKG9wdCAmJiBvcHQubWlkc3RyZWFtKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsXG4gICAgICAgICAgICAgICAgaW5kZXg6IHByZXZpb3VzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcignbm90IHJlYWNoIHRvIEVPRicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbVR5cGUoc3JjLCBvcHQpIHtcbiAgICAgICAgdmFyIGV4cHI7XG5cbiAgICAgICAgc291cmNlID0gc3JjO1xuICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIHByZXZpb3VzID0gMDtcblxuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVRvcFBhcmFtVHlwZSgpO1xuXG4gICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLFxuICAgICAgICAgICAgICAgIGluZGV4OiBwcmV2aW91c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICB1dGlsaXR5LnRocm93RXJyb3IoJ25vdCByZWFjaCB0byBFT0YnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ2lmeUltcGwobm9kZSwgY29tcGFjdCwgdG9wTGV2ZWwpIHtcbiAgICAgICAgdmFyIHJlc3VsdCwgaSwgaXo7XG5cbiAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVMaXRlcmFsOlxuICAgICAgICAgICAgcmVzdWx0ID0gJz8nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguQWxsTGl0ZXJhbDpcbiAgICAgICAgICAgIHJlc3VsdCA9ICcqJztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4Lk51bGxMaXRlcmFsOlxuICAgICAgICAgICAgcmVzdWx0ID0gJ251bGwnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguVW5kZWZpbmVkTGl0ZXJhbDpcbiAgICAgICAgICAgIHJlc3VsdCA9ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguVm9pZExpdGVyYWw6XG4gICAgICAgICAgICByZXN1bHQgPSAndm9pZCc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5VbmlvblR5cGU6XG4gICAgICAgICAgICBpZiAoIXRvcExldmVsKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJygnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmVsZW1lbnRzW2ldLCBjb21wYWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICd8JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdG9wTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguQXJyYXlUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gJ1snO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmVsZW1lbnRzW2ldLCBjb21wYWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAnLCAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdCArPSAnXSc7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5SZWNvcmRUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gJ3snO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmZpZWxkcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5maWVsZHNbaV0sIGNvbXBhY3QpO1xuICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICE9PSBpeikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ICs9ICd9JztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LkZpZWxkVHlwZTpcbiAgICAgICAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5rZXkgKyAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3RyaW5naWZ5SW1wbChub2RlLnZhbHVlLCBjb21wYWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5rZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5GdW5jdGlvblR5cGU6XG4gICAgICAgICAgICByZXN1bHQgPSBjb21wYWN0ID8gJ2Z1bmN0aW9uKCcgOiAnZnVuY3Rpb24gKCc7XG5cbiAgICAgICAgICAgIGlmIChub2RlWyd0aGlzJ10pIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZVsnbmV3J10pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IChjb21wYWN0ID8gJ25ldzonIDogJ25ldzogJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IChjb21wYWN0ID8gJ3RoaXM6JyA6ICd0aGlzOiAnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlWyd0aGlzJ10sIGNvbXBhY3QpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUucGFyYW1zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUucGFyYW1zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLnBhcmFtc1tpXSwgY29tcGFjdCk7XG4gICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCArPSAnKSc7XG5cbiAgICAgICAgICAgIGlmIChub2RlLnJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3RyaW5naWZ5SW1wbChub2RlLnJlc3VsdCwgY29tcGFjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5QYXJhbWV0ZXJUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5uYW1lICsgKGNvbXBhY3QgPyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LlJlc3RUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gJy4uLic7XG4gICAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4Lk5vbk51bGxhYmxlVHlwZTpcbiAgICAgICAgICAgIGlmIChub2RlLnByZWZpeCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9ICchJyArIHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpICsgJyEnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguT3B0aW9uYWxUeXBlOlxuICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpICsgJz0nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVUeXBlOlxuICAgICAgICAgICAgaWYgKG5vZGUucHJlZml4KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gJz8nICsgc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnPyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN5bnRheC5OYW1lRXhwcmVzc2lvbjpcbiAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUubmFtZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3ludGF4LlR5cGVBcHBsaWNhdGlvbjpcbiAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KSArICcuPCc7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUuYXBwbGljYXRpb25zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmFwcGxpY2F0aW9uc1tpXSwgY29tcGFjdCk7XG4gICAgICAgICAgICAgICAgaWYgKChpICsgMSkgIT09IGl6KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gJz4nO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHV0aWxpdHkudGhyb3dFcnJvcignVW5rbm93biB0eXBlICcgKyBub2RlLnR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdpZnkobm9kZSwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUltcGwobm9kZSwgb3B0aW9ucy5jb21wYWN0LCBvcHRpb25zLnRvcExldmVsKTtcbiAgICB9XG5cbiAgICBleHBvcnRzLnBhcnNlVHlwZSA9IHBhcnNlVHlwZTtcbiAgICBleHBvcnRzLnBhcnNlUGFyYW1UeXBlID0gcGFyc2VQYXJhbVR5cGU7XG4gICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7XG4gICAgZXhwb3J0cy5TeW50YXggPSBTeW50YXg7XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBWRVJTSU9OO1xuXG4gICAgVkVSU0lPTiA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4gICAgZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAgIGZ1bmN0aW9uIERvY3RyaW5lRXJyb3IobWVzc2FnZSkge1xuICAgICAgICB0aGlzLm5hbWUgPSAnRG9jdHJpbmVFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuICAgIERvY3RyaW5lRXJyb3IucHJvdG90eXBlID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIE1pZGRsZSA9IGZ1bmN0aW9uICgpIHsgfTtcbiAgICAgICAgTWlkZGxlLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcbiAgICAgICAgcmV0dXJuIG5ldyBNaWRkbGUoKTtcbiAgICB9KCkpO1xuICAgIERvY3RyaW5lRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRG9jdHJpbmVFcnJvcjtcbiAgICBleHBvcnRzLkRvY3RyaW5lRXJyb3IgPSBEb2N0cmluZUVycm9yO1xuXG4gICAgZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBEb2N0cmluZUVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBleHBvcnRzLnRocm93RXJyb3IgPSB0aHJvd0Vycm9yO1xuXG4gICAgZXhwb3J0cy5hc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTtcbn0oKSk7XG5cbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgJ0FTIElTJ1xuICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGZ1bmN0aW9uIGlzRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdBcnJheUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnQXNzaWdubWVudEV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnQmluYXJ5RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdDYWxsRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdDb25kaXRpb25hbEV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnRnVuY3Rpb25FeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ0lkZW50aWZpZXInOlxuICAgICAgICAgICAgY2FzZSAnTGl0ZXJhbCc6XG4gICAgICAgICAgICBjYXNlICdMb2dpY2FsRXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ05ld0V4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnT2JqZWN0RXhwcmVzc2lvbic6XG4gICAgICAgICAgICBjYXNlICdTZXF1ZW5jZUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnVGhpc0V4cHJlc3Npb24nOlxuICAgICAgICAgICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1VwZGF0ZUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0l0ZXJhdGlvblN0YXRlbWVudChub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdEb1doaWxlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0ZvckluU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0ZvclN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdXaGlsZVN0YXRlbWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU3RhdGVtZW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Jsb2NrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0JyZWFrU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0NvbnRpbnVlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0RlYnVnZ2VyU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0RvV2hpbGVTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRW1wdHlTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnRXhwcmVzc2lvblN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdGb3JJblN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdGb3JTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnSWZTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnTGFiZWxlZFN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdSZXR1cm5TdGF0ZW1lbnQnOlxuICAgICAgICAgICAgY2FzZSAnU3dpdGNoU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1Rocm93U3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1RyeVN0YXRlbWVudCc6XG4gICAgICAgICAgICBjYXNlICdWYXJpYWJsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ1doaWxlU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1dpdGhTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NvdXJjZUVsZW1lbnQobm9kZSkge1xuICAgICAgcmV0dXJuIGlzU3RhdGVtZW50KG5vZGUpIHx8IG5vZGUgIT0gbnVsbCAmJiBub2RlLnR5cGUgPT09ICdGdW5jdGlvbkRlY2xhcmF0aW9uJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFpbGluZ1N0YXRlbWVudChub2RlKSB7XG4gICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0lmU3RhdGVtZW50JzpcbiAgICAgICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY29uc2VxdWVudDtcblxuICAgICAgICBjYXNlICdMYWJlbGVkU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnRm9yU3RhdGVtZW50JzpcbiAgICAgICAgY2FzZSAnRm9ySW5TdGF0ZW1lbnQnOlxuICAgICAgICBjYXNlICdXaGlsZVN0YXRlbWVudCc6XG4gICAgICAgIGNhc2UgJ1dpdGhTdGF0ZW1lbnQnOlxuICAgICAgICAgICAgcmV0dXJuIG5vZGUuYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Byb2JsZW1hdGljSWZTdGF0ZW1lbnQobm9kZSkge1xuICAgICAgICB2YXIgY3VycmVudDtcblxuICAgICAgICBpZiAobm9kZS50eXBlICE9PSAnSWZTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gbm9kZS5jb25zZXF1ZW50O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC50eXBlID09PSAnSWZTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuYWx0ZXJuYXRlID09IG51bGwpICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSB0cmFpbGluZ1N0YXRlbWVudChjdXJyZW50KTtcbiAgICAgICAgfSB3aGlsZSAoY3VycmVudCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBpc0V4cHJlc3Npb246IGlzRXhwcmVzc2lvbixcbiAgICAgICAgaXNTdGF0ZW1lbnQ6IGlzU3RhdGVtZW50LFxuICAgICAgICBpc0l0ZXJhdGlvblN0YXRlbWVudDogaXNJdGVyYXRpb25TdGF0ZW1lbnQsXG4gICAgICAgIGlzU291cmNlRWxlbWVudDogaXNTb3VyY2VFbGVtZW50LFxuICAgICAgICBpc1Byb2JsZW1hdGljSWZTdGF0ZW1lbnQ6IGlzUHJvYmxlbWF0aWNJZlN0YXRlbWVudCxcblxuICAgICAgICB0cmFpbGluZ1N0YXRlbWVudDogdHJhaWxpbmdTdGF0ZW1lbnRcbiAgICB9O1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG4gIENvcHlyaWdodCAoQykgMjAxNCBJdmFuIE5pa3VsaW4gPGlmYWFhbkBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgUmVnZXgsIE5PTl9BU0NJSV9XSElURVNQQUNFUztcblxuICAgIC8vIFNlZSBgdG9vbHMvZ2VuZXJhdGUtaWRlbnRpZmllci1yZWdleC5qc2AuXG4gICAgUmVnZXggPSB7XG4gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiBuZXcgUmVnRXhwKCdbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk3N1xcdTA5NzktXFx1MDk3RlxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGMFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjk3XFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE4MC1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQkMwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdJyksXG4gICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5ldyBSZWdFeHAoJ1tcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDMwMC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0ODMtXFx1MDQ4N1xcdTA0OEEtXFx1MDUyN1xcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjEwLVxcdTA2MUFcXHUwNjIwLVxcdTA2NjlcXHUwNjZFLVxcdTA2RDNcXHUwNkQ1LVxcdTA2RENcXHUwNkRGLVxcdTA2RThcXHUwNkVBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMC1cXHUwNzRBXFx1MDc0RC1cXHUwN0IxXFx1MDdDMC1cXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgyRFxcdTA4NDAtXFx1MDg1QlxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOEU0LVxcdTA4RkVcXHUwOTAwLVxcdTA5NjNcXHUwOTY2LVxcdTA5NkZcXHUwOTcxLVxcdTA5NzdcXHUwOTc5LVxcdTA5N0ZcXHUwOTgxLVxcdTA5ODNcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJDLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRVxcdTA5RDdcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFM1xcdTA5RTYtXFx1MDlGMVxcdTBBMDEtXFx1MEEwM1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEEzQ1xcdTBBM0UtXFx1MEE0MlxcdTBBNDdcXHUwQTQ4XFx1MEE0Qi1cXHUwQTREXFx1MEE1MVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTY2LVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkMtXFx1MEFDNVxcdTBBQzctXFx1MEFDOVxcdTBBQ0ItXFx1MEFDRFxcdTBBRDBcXHUwQUUwLVxcdTBBRTNcXHUwQUU2LVxcdTBBRUZcXHUwQjAxLVxcdTBCMDNcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzQy1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU2XFx1MEI1N1xcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYzXFx1MEI2Ni1cXHUwQjZGXFx1MEI3MVxcdTBCODJcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCQkUtXFx1MEJDMlxcdTBCQzYtXFx1MEJDOFxcdTBCQ0EtXFx1MEJDRFxcdTBCRDBcXHUwQkQ3XFx1MEJFNi1cXHUwQkVGXFx1MEMwMS1cXHUwQzAzXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRC1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzU4XFx1MEM1OVxcdTBDNjAtXFx1MEM2M1xcdTBDNjYtXFx1MEM2RlxcdTBDODJcXHUwQzgzXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCQy1cXHUwQ0M0XFx1MENDNi1cXHUwQ0M4XFx1MENDQS1cXHUwQ0NEXFx1MENENVxcdTBDRDZcXHUwQ0RFXFx1MENFMC1cXHUwQ0UzXFx1MENFNi1cXHUwQ0VGXFx1MENGMVxcdTBDRjJcXHUwRDAyXFx1MEQwM1xcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0QtXFx1MEQ0NFxcdTBENDYtXFx1MEQ0OFxcdTBENEEtXFx1MEQ0RVxcdTBENTdcXHUwRDYwLVxcdTBENjNcXHUwRDY2LVxcdTBENkZcXHUwRDdBLVxcdTBEN0ZcXHUwRDgyXFx1MEQ4M1xcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEUwMS1cXHUwRTNBXFx1MEU0MC1cXHUwRTRFXFx1MEU1MC1cXHUwRTU5XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjlcXHUwRUJCLVxcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVDOC1cXHUwRUNEXFx1MEVEMC1cXHUwRUQ5XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGMThcXHUwRjE5XFx1MEYyMC1cXHUwRjI5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRS1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY3MS1cXHUwRjg0XFx1MEY4Ni1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMDAtXFx1MTA0OVxcdTEwNTAtXFx1MTA5RFxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzVELVxcdTEzNUZcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjBcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTRcXHUxNzIwLVxcdTE3MzRcXHUxNzQwLVxcdTE3NTNcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzcyXFx1MTc3M1xcdTE3ODAtXFx1MTdEM1xcdTE3RDdcXHUxN0RDXFx1MTdERFxcdTE3RTAtXFx1MTdFOVxcdTE4MEItXFx1MTgwRFxcdTE4MTAtXFx1MTgxOVxcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5MjAtXFx1MTkyQlxcdTE5MzAtXFx1MTkzQlxcdTE5NDYtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTE5RDAtXFx1MTlEOVxcdTFBMDAtXFx1MUExQlxcdTFBMjAtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0YtXFx1MUE4OVxcdTFBOTAtXFx1MUE5OVxcdTFBQTdcXHUxQjAwLVxcdTFCNEJcXHUxQjUwLVxcdTFCNTlcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCRjNcXHUxQzAwLVxcdTFDMzdcXHUxQzQwLVxcdTFDNDlcXHUxQzRELVxcdTFDN0RcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRjZcXHUxRDAwLVxcdTFERTZcXHUxREZDLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjAwQ1xcdTIwMERcXHUyMDNGXFx1MjA0MFxcdTIwNTRcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIwRDAtXFx1MjBEQ1xcdTIwRTFcXHUyMEU1LVxcdTIwRjBcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE2MC1cXHUyMTg4XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ3Ri1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkRFMC1cXHUyREZGXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyRlxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOTlcXHUzMDlBXFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJEXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJBXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REI1XFx1NEUwMC1cXHU5RkNDXFx1QTAwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjJCXFx1QTY0MC1cXHVBNjZGXFx1QTY3NC1cXHVBNjdEXFx1QTY3Ri1cXHVBNjk3XFx1QTY5Ri1cXHVBNkYxXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODI3XFx1QTg0MC1cXHVBODczXFx1QTg4MC1cXHVBOEM0XFx1QThEMC1cXHVBOEQ5XFx1QThFMC1cXHVBOEY3XFx1QThGQlxcdUE5MDAtXFx1QTkyRFxcdUE5MzAtXFx1QTk1M1xcdUE5NjAtXFx1QTk3Q1xcdUE5ODAtXFx1QTlDMFxcdUE5Q0YtXFx1QTlEOVxcdUFBMDAtXFx1QUEzNlxcdUFBNDAtXFx1QUE0RFxcdUFBNTAtXFx1QUE1OVxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdCXFx1QUE4MC1cXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVGXFx1QUFGMi1cXHVBQUY2XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUJDMC1cXHVBQkVBXFx1QUJFQ1xcdUFCRURcXHVBQkYwLVxcdUFCRjlcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFELVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyNlxcdUZFMzNcXHVGRTM0XFx1RkU0RC1cXHVGRTRGXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYxMC1cXHVGRjE5XFx1RkYyMS1cXHVGRjNBXFx1RkYzRlxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ10nKVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gaXNEZWNpbWFsRGlnaXQoY2gpIHx8ICAgIC8vIDAuLjlcbiAgICAgICAgICAgICg5NyA8PSBjaCAmJiBjaCA8PSAxMDIpIHx8ICAvLyBhLi5mXG4gICAgICAgICAgICAoNjUgPD0gY2ggJiYgY2ggPD0gNzApOyAgICAgLy8gQS4uRlxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2N0YWxEaWdpdChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU1KTsgICAvLyAwLi43XG4gICAgfVxuXG4gICAgLy8gNy4yIFdoaXRlIFNwYWNlXG5cbiAgICBOT05fQVNDSUlfV0hJVEVTUEFDRVMgPSBbXG4gICAgICAgIDB4MTY4MCwgMHgxODBFLFxuICAgICAgICAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSxcbiAgICAgICAgMHgyMDJGLCAweDIwNUYsXG4gICAgICAgIDB4MzAwMCxcbiAgICAgICAgMHhGRUZGXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkge1xuICAgICAgICByZXR1cm4gKGNoID09PSAweDIwKSB8fCAoY2ggPT09IDB4MDkpIHx8IChjaCA9PT0gMHgwQikgfHwgKGNoID09PSAweDBDKSB8fCAoY2ggPT09IDB4QTApIHx8XG4gICAgICAgICAgICAoY2ggPj0gMHgxNjgwICYmIE5PTl9BU0NJSV9XSElURVNQQUNFUy5pbmRleE9mKGNoKSA+PSAwKTtcbiAgICB9XG5cbiAgICAvLyA3LjMgTGluZSBUZXJtaW5hdG9yc1xuXG4gICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihjaCkge1xuICAgICAgICByZXR1cm4gKGNoID09PSAweDBBKSB8fCAoY2ggPT09IDB4MEQpIHx8IChjaCA9PT0gMHgyMDI4KSB8fCAoY2ggPT09IDB4MjAyOSk7XG4gICAgfVxuXG4gICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzXG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgICAgIC8vIGEuLnpcbiAgICAgICAgICAgIChjaCA+PSA2NSAmJiBjaCA8PSA5MCkgfHwgICAgICAgICAvLyBBLi5aXG4gICAgICAgICAgICAoY2ggPT09IDM2KSB8fCAoY2ggPT09IDk1KSB8fCAgICAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA9PT0gOTIpIHx8ICAgICAgICAgICAgICAgICAgICAvLyBcXCAoYmFja3NsYXNoKVxuICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFydChjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgICAgIC8vIGEuLnpcbiAgICAgICAgICAgIChjaCA+PSA2NSAmJiBjaCA8PSA5MCkgfHwgICAgICAgICAvLyBBLi5aXG4gICAgICAgICAgICAoY2ggPj0gNDggJiYgY2ggPD0gNTcpIHx8ICAgICAgICAgLy8gMC4uOVxuICAgICAgICAgICAgKGNoID09PSAzNikgfHwgKGNoID09PSA5NSkgfHwgICAgIC8vICQgKGRvbGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpXG4gICAgICAgICAgICAoY2ggPT09IDkyKSB8fCAgICAgICAgICAgICAgICAgICAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfVxuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIGlzRGVjaW1hbERpZ2l0OiBpc0RlY2ltYWxEaWdpdCxcbiAgICAgICAgaXNIZXhEaWdpdDogaXNIZXhEaWdpdCxcbiAgICAgICAgaXNPY3RhbERpZ2l0OiBpc09jdGFsRGlnaXQsXG4gICAgICAgIGlzV2hpdGVTcGFjZTogaXNXaGl0ZVNwYWNlLFxuICAgICAgICBpc0xpbmVUZXJtaW5hdG9yOiBpc0xpbmVUZXJtaW5hdG9yLFxuICAgICAgICBpc0lkZW50aWZpZXJTdGFydDogaXNJZGVudGlmaWVyU3RhcnQsXG4gICAgICAgIGlzSWRlbnRpZmllclBhcnQ6IGlzSWRlbnRpZmllclBhcnRcbiAgICB9O1xufSgpKTtcbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iLCIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTMgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGNvZGUgPSByZXF1aXJlKCcuL2NvZGUnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZEVTNihpZCkge1xuICAgICAgICBzd2l0Y2ggKGlkKSB7XG4gICAgICAgIGNhc2UgJ2ltcGxlbWVudHMnOlxuICAgICAgICBjYXNlICdpbnRlcmZhY2UnOlxuICAgICAgICBjYXNlICdwYWNrYWdlJzpcbiAgICAgICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICAgIGNhc2UgJ3Byb3RlY3RlZCc6XG4gICAgICAgIGNhc2UgJ3B1YmxpYyc6XG4gICAgICAgIGNhc2UgJ3N0YXRpYyc6XG4gICAgICAgIGNhc2UgJ2xldCc6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzS2V5d29yZEVTNShpZCwgc3RyaWN0KSB7XG4gICAgICAgIC8vIHlpZWxkIHNob3VsZCBub3QgYmUgdHJlYXRlZCBhcyBrZXl3b3JkIHVuZGVyIG5vbi1zdHJpY3QgbW9kZS5cbiAgICAgICAgaWYgKCFzdHJpY3QgJiYgaWQgPT09ICd5aWVsZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNLZXl3b3JkRVM2KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzS2V5d29yZEVTNihpZCwgc3RyaWN0KSB7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkRVM2KGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaWYnKSB8fCAoaWQgPT09ICdpbicpIHx8IChpZCA9PT0gJ2RvJyk7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd2YXInKSB8fCAoaWQgPT09ICdmb3InKSB8fCAoaWQgPT09ICduZXcnKSB8fCAoaWQgPT09ICd0cnknKTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlkID09PSAnY2FzZScpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9PT0gJ3dpdGgnKSB8fCAoaWQgPT09ICdlbnVtJyk7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09PSAnY2F0Y2gnKSB8fFxuICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAnY29uc3QnKSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8XG4gICAgICAgICAgICAgICAgKGlkID09PSAnY2xhc3MnKSB8fCAoaWQgPT09ICdzdXBlcicpO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlkID09PSAnZGVsZXRlJykgfHxcbiAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAoaWQgPT09ICdleHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5JykgfHwgKGlkID09PSAnZXh0ZW5kcycpO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdjb250aW51ZScpIHx8IChpZCA9PT0gJ2RlYnVnZ2VyJyk7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICByZXR1cm4gKGlkID09PSAnaW5zdGFuY2VvZicpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSZXNlcnZlZFdvcmRFUzUoaWQsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gaWQgPT09ICdudWxsJyB8fCBpZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFsc2UnIHx8IGlzS2V5d29yZEVTNShpZCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Jlc2VydmVkV29yZEVTNihpZCwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBpZCA9PT0gJ251bGwnIHx8IGlkID09PSAndHJ1ZScgfHwgaWQgPT09ICdmYWxzZScgfHwgaXNLZXl3b3JkRVM2KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVzdHJpY3RlZFdvcmQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkID09PSAnZXZhbCcgfHwgaWQgPT09ICdhcmd1bWVudHMnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllck5hbWUoaWQpIHtcbiAgICAgICAgdmFyIGksIGl6LCBjaDtcblxuICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjaCA9IGlkLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIGlmICghY29kZS5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgY2ggPT09IDkyKSB7ICAvLyBcXCAoYmFja3NsYXNoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMSwgaXogPSBpZC5sZW5ndGg7IGkgPCBpejsgKytpKSB7XG4gICAgICAgICAgICBjaCA9IGlkLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICBpZiAoIWNvZGUuaXNJZGVudGlmaWVyUGFydChjaCkgfHwgY2ggPT09IDkyKSB7ICAvLyBcXCAoYmFja3NsYXNoKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJFUzUoaWQsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gaXNJZGVudGlmaWVyTmFtZShpZCkgJiYgIWlzUmVzZXJ2ZWRXb3JkRVM1KGlkLCBzdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllckVTNihpZCwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBpc0lkZW50aWZpZXJOYW1lKGlkKSAmJiAhaXNSZXNlcnZlZFdvcmRFUzYoaWQsIHN0cmljdCk7XG4gICAgfVxuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgIGlzS2V5d29yZEVTNTogaXNLZXl3b3JkRVM1LFxuICAgICAgICBpc0tleXdvcmRFUzY6IGlzS2V5d29yZEVTNixcbiAgICAgICAgaXNSZXNlcnZlZFdvcmRFUzU6IGlzUmVzZXJ2ZWRXb3JkRVM1LFxuICAgICAgICBpc1Jlc2VydmVkV29yZEVTNjogaXNSZXNlcnZlZFdvcmRFUzYsXG4gICAgICAgIGlzUmVzdHJpY3RlZFdvcmQ6IGlzUmVzdHJpY3RlZFdvcmQsXG4gICAgICAgIGlzSWRlbnRpZmllck5hbWU6IGlzSWRlbnRpZmllck5hbWUsXG4gICAgICAgIGlzSWRlbnRpZmllckVTNTogaXNJZGVudGlmaWVyRVM1LFxuICAgICAgICBpc0lkZW50aWZpZXJFUzY6IGlzSWRlbnRpZmllckVTNlxuICAgIH07XG59KCkpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGV4cG9ydHMuYXN0ID0gcmVxdWlyZSgnLi9hc3QnKTtcbiAgICBleHBvcnRzLmNvZGUgPSByZXF1aXJlKCcuL2NvZGUnKTtcbiAgICBleHBvcnRzLmtleXdvcmQgPSByZXF1aXJlKCcuL2tleXdvcmQnKTtcbn0oKSk7XG4vKiB2aW06IHNldCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqL1xuIiwibW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwibW9kdWxlLmV4cG9ydHM9e1xuICBcIm5hbWVcIjogXCJkb2N0cmluZVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiSlNEb2MgcGFyc2VyXCIsXG4gIFwiaG9tZXBhZ2VcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9Db25zdGVsbGF0aW9uL2RvY3RyaW5lLmh0bWxcIixcbiAgXCJtYWluXCI6IFwibGliL2RvY3RyaW5lLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjAuNy4wXCIsXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0wLjEwLjBcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHtcbiAgICBcImxpYlwiOiBcIi4vbGliXCJcbiAgfSxcbiAgXCJmaWxlc1wiOiBbXG4gICAgXCJsaWJcIixcbiAgICBcIkxJQ0VOU0UuQlNEXCIsXG4gICAgXCJMSUNFTlNFLmNsb3N1cmUtY29tcGlsZXJcIixcbiAgICBcIkxJQ0VOU0UuZXNwcmltYVwiLFxuICAgIFwiUkVBRE1FLm1kXCJcbiAgXSxcbiAgXCJtYWludGFpbmVyc1wiOiBbXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwiY29uc3RlbGxhdGlvblwiLFxuICAgICAgXCJlbWFpbFwiOiBcInV0YXRhbmUudGVhQGdtYWlsLmNvbVwiXG4gICAgfSxcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJuemFrYXNcIixcbiAgICAgIFwiZW1haWxcIjogXCJuaWNob2xhc0BuY3pjb25zdWx0aW5nLmNvbVwiXG4gICAgfVxuICBdLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXNsaW50L2RvY3RyaW5lLmdpdFwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcImNvdmVyYWxsc1wiOiBcIl4yLjExLjJcIixcbiAgICBcImd1bHBcIjogXCJeMy44LjEwXCIsXG4gICAgXCJndWxwLWJ1bXBcIjogXCJeMC4xLjEzXCIsXG4gICAgXCJndWxwLWVzbGludFwiOiBcIl4wLjUuMFwiLFxuICAgIFwiZ3VscC1maWx0ZXJcIjogXCJeMi4wLjJcIixcbiAgICBcImd1bHAtZ2l0XCI6IFwiXjEuMC4wXCIsXG4gICAgXCJndWxwLWlzdGFuYnVsXCI6IFwiXjAuNi4wXCIsXG4gICAgXCJndWxwLWpzaGludFwiOiBcIl4xLjkuMFwiLFxuICAgIFwiZ3VscC1tb2NoYVwiOiBcIl4yLjAuMFwiLFxuICAgIFwiZ3VscC10YWctdmVyc2lvblwiOiBcIl4xLjIuMVwiLFxuICAgIFwianNoaW50LXN0eWxpc2hcIjogXCJeMS4wLjBcIixcbiAgICBcInNob3VsZFwiOiBcIl41LjAuMVwiXG4gIH0sXG4gIFwibGljZW5zZXNcIjogW1xuICAgIHtcbiAgICAgIFwidHlwZVwiOiBcIkJTRFwiLFxuICAgICAgXCJ1cmxcIjogXCJodHRwOi8vZ2l0aHViLmNvbS9lc2xpbnQvZG9jdHJpbmUvcmF3L21hc3Rlci9MSUNFTlNFLkJTRFwiXG4gICAgfVxuICBdLFxuICBcInNjcmlwdHNcIjoge1xuICAgIFwidGVzdFwiOiBcImd1bHBcIixcbiAgICBcInVuaXQtdGVzdFwiOiBcImd1bHAgdGVzdFwiLFxuICAgIFwibGludFwiOiBcImd1bHAgbGludFwiLFxuICAgIFwiY292ZXJhbGxzXCI6IFwiY2F0IC4vY292ZXJhZ2UvbGNvdi5pbmZvIHwgY292ZXJhbGxzICYmIHJtIC1yZiAuL2NvdmVyYWdlXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiZXN1dGlsc1wiOiBcIl4xLjEuNlwiLFxuICAgIFwiaXNhcnJheVwiOiBcIjAuMC4xXCJcbiAgfSxcbiAgXCJnaXRIZWFkXCI6IFwiMGQwNTllNDIyYmRmZDYzMGVhYTE1ZDU4MzU2N2M4NjY4OTIzZjdlNlwiLFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9kb2N0cmluZS9pc3N1ZXNcIlxuICB9LFxuICBcIl9pZFwiOiBcImRvY3RyaW5lQDAuNy4wXCIsXG4gIFwiX3NoYXN1bVwiOiBcImRjYzk1ODk4NTBiMDQzZDZlNThhYmUyNGI1NjFjY2Q1NzE3NmNmZDNcIixcbiAgXCJfZnJvbVwiOiBcImRvY3RyaW5lQCpcIixcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjEuNC4yOFwiLFxuICBcIl9ucG1Vc2VyXCI6IHtcbiAgICBcIm5hbWVcIjogXCJuemFrYXNcIixcbiAgICBcImVtYWlsXCI6IFwibmljaG9sYXNAbmN6Y29uc3VsdGluZy5jb21cIlxuICB9LFxuICBcImRpc3RcIjoge1xuICAgIFwic2hhc3VtXCI6IFwiZGNjOTU4OTg1MGIwNDNkNmU1OGFiZTI0YjU2MWNjZDU3MTc2Y2ZkM1wiLFxuICAgIFwidGFyYmFsbFwiOiBcImh0dHA6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9jdHJpbmUvLS9kb2N0cmluZS0wLjcuMC50Z3pcIlxuICB9LFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvY3RyaW5lLy0vZG9jdHJpbmUtMC43LjAudGd6XCJcbn1cbiIsIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG4gKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiAqL1xuXG4vLyBqc2hpbnQgbm9kZTogdHJ1ZVxuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGVJbmRleChlbGVtZW50LCBuYW1lKSB7XG4gIGlmICghZWxlbWVudC5hdHRycykge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgbiA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50LmF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGVsZW1lbnQuYXR0cnNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWZmIFtlbGVtZW50XSBoYXMgdGhlIGF0dHJpYnV0ZSBbbmFtZV0sIGBmYWxzZWBcbiAqICAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBoYXNBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xuICByZXR1cm4gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSkgIT09IC0xO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH0gVGhlIHN0cmluZyB2YWx1ZSBvZiBhdHRyaWJ1dGUgYG5hbWVgLCBvciBgbnVsbGAuXG4gKi9cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZShlbGVtZW50LCBuYW1lKSB7XG4gIHZhciBpID0gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSk7XG4gIGlmIChpID4gLTEpIHtcbiAgICByZXR1cm4gZWxlbWVudC5hdHRyc1tpXS52YWx1ZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpID0gZ2V0QXR0cmlidXRlSW5kZXgoZWxlbWVudCwgbmFtZSk7XG4gIGlmIChpID4gLTEpIHtcbiAgICBlbGVtZW50LmF0dHJzW2ldLnZhbHVlID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5hdHRycy5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSkge1xuICB2YXIgaSA9IGdldEF0dHJpYnV0ZUluZGV4KGVsZW1lbnQsIG5hbWUpO1xuICBpZiAoaSA+IC0xKSB7XG4gICAgZWxlbWVudC5hdHRycy5zcGxpY2UoaSwgMSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzVGFnTmFtZShuYW1lKSB7XG4gIHZhciBuID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS50YWdOYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gbjtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHJlZ2V4Lm1hdGNoKHRhZ05hbWUpYCBmaW5kcyBhIG1hdGNoLlxuICpcbiAqIFRoaXMgd2lsbCB1c2UgdGhlIGxvd2VyY2FzZWQgdGFnTmFtZSBmb3IgY29tcGFyaXNvbi5cbiAqIFxuICogQHBhcmFtICB7UmVnRXhwfSByZWdleFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzTWF0Y2hpbmdUYWdOYW1lKHJlZ2V4KSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLnRhZ05hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3Qobm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNDbGFzcyhuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIGF0dHIgPSBnZXRBdHRyaWJ1dGUobm9kZSwgJ2NsYXNzJyk7XG4gICAgaWYgKCFhdHRyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBhdHRyLnNwbGl0KCcgJykuaW5kZXhPZihuYW1lKSA+IC0xO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjb2xsYXBzZVRleHRSYW5nZShwYXJlbnQsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRleHQgPSAnJztcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgdGV4dCArPSBnZXRUZXh0Q29udGVudChwYXJlbnQuY2hpbGROb2Rlc1tpXSk7XG4gIH1cbiAgcGFyZW50LmNoaWxkTm9kZXMuc3BsaWNlKHN0YXJ0LCAoZW5kIC0gc3RhcnQpICsgMSk7XG4gIGlmICh0ZXh0KSB7XG4gICAgdmFyIHRuID0gbmV3VGV4dE5vZGUodGV4dCk7XG4gICAgdG4ucGFyZW50Tm9kZSA9IHBhcmVudDtcbiAgICBwYXJlbnQuY2hpbGROb2Rlcy5zcGxpY2Uoc3RhcnQsIDAsIHRuKTtcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgdGV4dCBpbnNpZGUgYW4gZWxlbWVudFxuICpcbiAqIEVxdWl2YWxlbnQgdG8gYGVsZW1lbnQubm9ybWFsaXplKClgIGluIHRoZSBicm93c2VyXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05vZGUvbm9ybWFsaXplXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShub2RlKSB7XG4gIGlmICghKGlzRWxlbWVudChub2RlKSB8fCBpc0RvY3VtZW50KG5vZGUpIHx8IGlzRG9jdW1lbnRGcmFnbWVudChub2RlKSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIHRleHRSYW5nZVN0YXJ0ID0gLTE7XG4gIGZvciAodmFyIGkgPSBub2RlLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgbjsgaSA+PSAwOyBpLS0pIHtcbiAgICBuID0gbm9kZS5jaGlsZE5vZGVzW2ldO1xuICAgIGlmIChpc1RleHROb2RlKG4pKSB7XG4gICAgICBpZiAodGV4dFJhbmdlU3RhcnQgPT0gLTEpIHtcbiAgICAgICAgdGV4dFJhbmdlU3RhcnQgPSBpO1xuICAgICAgfVxuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgLy8gY29sbGFwc2UgbGVhZGluZyB0ZXh0IG5vZGVzXG4gICAgICAgIGNvbGxhcHNlVGV4dFJhbmdlKG5vZGUsIDAsIHRleHRSYW5nZVN0YXJ0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVjdXJzZVxuICAgICAgbm9ybWFsaXplKG4pO1xuICAgICAgLy8gY29sbGFwc2UgdGhlIHJhbmdlIGFmdGVyIHRoaXMgbm9kZVxuICAgICAgaWYgKHRleHRSYW5nZVN0YXJ0ID4gLTEpIHtcbiAgICAgICAgY29sbGFwc2VUZXh0UmFuZ2Uobm9kZSwgaSArIDEsIHRleHRSYW5nZVN0YXJ0KTtcbiAgICAgICAgdGV4dFJhbmdlU3RhcnQgPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHRleHQgdmFsdWUgb2YgYSBub2RlIG9yIGVsZW1lbnRcbiAqXG4gKiBFcXVpdmFsZW50IHRvIGBub2RlLnRleHRDb250ZW50YCBpbiB0aGUgYnJvd3NlclxuICovXG5mdW5jdGlvbiBnZXRUZXh0Q29udGVudChub2RlKSB7XG4gIGlmIChpc0NvbW1lbnROb2RlKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUuZGF0YTtcbiAgfVxuICBpZiAoaXNUZXh0Tm9kZShub2RlKSkge1xuICAgIHJldHVybiBub2RlLnZhbHVlO1xuICB9XG4gIHZhciBzdWJ0cmVlID0gbm9kZVdhbGtBbGwobm9kZSwgaXNUZXh0Tm9kZSk7XG4gIHJldHVybiBzdWJ0cmVlLm1hcChnZXRUZXh0Q29udGVudCkuam9pbignJyk7XG59XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0IHZhbHVlIG9mIGEgbm9kZSBvciBlbGVtZW50XG4gKlxuICogRXF1aXZhbGVudCB0byBgbm9kZS50ZXh0Q29udGVudCA9IHZhbHVlYCBpbiB0aGUgYnJvd3NlclxuICovXG5mdW5jdGlvbiBzZXRUZXh0Q29udGVudChub2RlLCB2YWx1ZSkge1xuICBpZiAoaXNDb21tZW50Tm9kZShub2RlKSkge1xuICAgIG5vZGUuZGF0YSA9IHZhbHVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUobm9kZSkpIHtcbiAgICBub2RlLnZhbHVlID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRuID0gbmV3VGV4dE5vZGUodmFsdWUpO1xuICAgIHRuLnBhcmVudE5vZGUgPSBub2RlO1xuICAgIG5vZGUuY2hpbGROb2RlcyA9IFt0bl07XG4gIH1cbn1cblxuLyoqXG4gKiBNYXRjaCB0aGUgdGV4dCBpbnNpZGUgYW4gZWxlbWVudCwgdGV4dG5vZGUsIG9yIGNvbW1lbnRcbiAqXG4gKiBOb3RlOiBub2RlV2Fsa0FsbCB3aXRoIGhhc1RleHRWYWx1ZSBtYXkgcmV0dXJuIGFuIHRleHRub2RlIGFuZCBpdHMgcGFyZW50IGlmXG4gKiB0aGUgdGV4dG5vZGUgaXMgdGhlIG9ubHkgY2hpbGQgaW4gdGhhdCBwYXJlbnQuXG4gKi9cbmZ1bmN0aW9uIGhhc1RleHRWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXRUZXh0Q29udGVudChub2RlKSA9PT0gdmFsdWU7XG4gIH07XG59XG5cbi8qKlxuICogT1IgYW4gYXJyYXkgb2YgcHJlZGljYXRlc1xuICovXG5mdW5jdGlvbiBPUigvKiAuLi5ydWxlcyAqLykge1xuICB2YXIgcnVsZXMgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgcnVsZXNbaV0gPSBhcmd1bWVudHNbaV07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocnVsZXNbaV0obm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBBTkQgYW4gYXJyYXkgb2YgcHJlZGljYXRlc1xuICovXG5mdW5jdGlvbiBBTkQoLyogLi4ucnVsZXMgKi8pIHtcbiAgdmFyIHJ1bGVzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHJ1bGVzW2ldID0gYXJndW1lbnRzW2ldO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFydWxlc1tpXShub2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuXG4vKipcbiAqIG5lZ2F0ZSBhbiBpbmRpdmlkdWFsIHByZWRpY2F0ZSwgb3IgYSBncm91cCB3aXRoIEFORCBvciBPUlxuICovXG5mdW5jdGlvbiBOT1QocHJlZGljYXRlRm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gIXByZWRpY2F0ZUZuKG5vZGUpO1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcmVkaWNhdGUgdGhhdCBtYXRjaGVzIGFueSBub2RlIHdpdGggYSBwYXJlbnQgbWF0Y2hpbmcgYHByZWRpY2F0ZUZuYC5cbiAqL1xuZnVuY3Rpb24gcGFyZW50TWF0Y2hlcyhwcmVkaWNhdGVGbikge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgd2hpbGUocGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwcmVkaWNhdGVGbihwYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzQXR0cihhdHRyKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldEF0dHJpYnV0ZUluZGV4KG5vZGUsIGF0dHIpID4gLTE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0F0dHJWYWx1ZShhdHRyLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobm9kZSwgYXR0cikgPT09IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc0RvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnQnO1xufVxuXG5mdW5jdGlvbiBpc0RvY3VtZW50RnJhZ21lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudC1mcmFnbWVudCc7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lID09PSBub2RlLnRhZ05hbWU7XG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jztcbn1cblxuZnVuY3Rpb24gaXNDb21tZW50Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2NvbW1lbnQnO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYG1hcGZuYCB0byBgbm9kZWAgYW5kIHRoZSB0cmVlIGJlbG93IGBub2RlYCwgcmV0dXJuaW5nIGEgZmxhdHRlbmVkXG4gKiBsaXN0IG9mIHJlc3VsdHMuXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdHJlZU1hcChub2RlLCBtYXBmbikge1xuICB2YXIgcmVzdWx0cyA9IFtdO1xuICBub2RlV2Fsayhub2RlLCBmdW5jdGlvbihub2RlKXtcbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQobWFwZm4obm9kZSkpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIFdhbGsgdGhlIHRyZWUgZG93biBmcm9tIGBub2RlYCwgYXBwbHlpbmcgdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogUmV0dXJuIHRoZSBmaXJzdCBub2RlIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcHJlZGljYXRlLlxuICpcbiAqIEByZXR1cm5zIHtOb2RlfSBgbnVsbGAgaWYgbm8gbm9kZSBtYXRjaGVzLCBwYXJzZTUgbm9kZSBvYmplY3QgaWYgYSBub2RlXG4gKiBtYXRjaGVzXG4gKi9cbmZ1bmN0aW9uIG5vZGVXYWxrKG5vZGUsIHByZWRpY2F0ZSkge1xuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgdmFyIG1hdGNoID0gbnVsbDtcbiAgaWYgKG5vZGUuY2hpbGROb2Rlcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXRjaCA9IG5vZGVXYWxrKG5vZGUuY2hpbGROb2Rlc1tpXSwgcHJlZGljYXRlKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdGNoO1xufVxuXG4vKipcbiAqIFdhbGsgdGhlIHRyZWUgZG93biBmcm9tIGBub2RlYCwgYXBwbHlpbmcgdGhlIGBwcmVkaWNhdGVgIGZ1bmN0aW9uLlxuICogQWxsIG5vZGVzIG1hdGNoaW5nIHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gZnJvbSBgbm9kZWAgdG8gbGVhdmVzIHdpbGwgYmVcbiAqIHJldHVybmVkLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheVtOb2RlXX1cbiAqL1xuZnVuY3Rpb24gbm9kZVdhbGtBbGwobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIGlmICghbWF0Y2hlcykge1xuICAgIG1hdGNoZXMgPSBbXTtcbiAgfVxuICBpZiAocHJlZGljYXRlKG5vZGUpKSB7XG4gICAgbWF0Y2hlcy5wdXNoKG5vZGUpO1xuICB9XG4gIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbm9kZVdhbGtBbGwobm9kZS5jaGlsZE5vZGVzW2ldLCBwcmVkaWNhdGUsIG1hdGNoZXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gX3JldmVyc2VOb2RlV2Fsa0FsbChub2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMpIHtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgbWF0Y2hlcyA9IFtdO1xuICB9XG4gIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBub2RlV2Fsa0FsbChub2RlLmNoaWxkTm9kZXNbaV0sIHByZWRpY2F0ZSwgbWF0Y2hlcyk7XG4gICAgfVxuICB9XG4gIGlmIChwcmVkaWNhdGUobm9kZSkpIHtcbiAgICBtYXRjaGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtgLCBidXQgb25seSByZXR1cm5zIG5vZGVzIHRoYXQgYXJlIGVpdGhlclxuICogYW5jZXN0b3JzIG9yIGVhcmxpZXIgY291c2lucy9zaWJsaW5ncyBpbiB0aGUgZG9jdW1lbnQuXG4gKlxuICogTm9kZXMgYXJlIHNlYXJjaGVkIGluIHJldmVyc2UgZG9jdW1lbnQgb3JkZXIsIHN0YXJ0aW5nIGZyb20gdGhlIHNpYmxpbmdcbiAqIHByaW9yIHRvIGBub2RlYC5cbiAqL1xuZnVuY3Rpb24gbm9kZVdhbGtQcmlvcihub2RlLCBwcmVkaWNhdGUpIHtcbiAgLy8gU2VhcmNoIG91ciBlYXJsaWVyIHNpYmxpbmdzIGFuZCB0aGVpciBkZXNjZW5kZW50cy5cbiAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkge1xuICAgIHZhciBpZHggPSBwYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgIHZhciBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZE5vZGVzLnNsaWNlKDAsIGlkeCk7XG4gICAgZm9yICh2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIHNpYmxpbmcgPSBzaWJsaW5nc1tpXTtcbiAgICAgIGlmIChwcmVkaWNhdGUoc2libGluZykpIHtcbiAgICAgICAgcmV0dXJuIHNpYmxpbmc7XG4gICAgICB9XG4gICAgICB2YXIgZm91bmQgPSBub2RlV2Fsa1ByaW9yKHNpYmxpbmcsIHByZWRpY2F0ZSk7XG4gICAgfVxuICAgIGlmIChwcmVkaWNhdGUocGFyZW50KSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVXYWxrUHJpb3IocGFyZW50LCBwcmVkaWNhdGUpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtBbGxgLCBidXQgb25seSByZXR1cm5zIG5vZGVzIHRoYXQgYXJlIGVpdGhlciBcbiAqIGFuY2VzdG9ycyBvciBlYXJsaWVyIGNvdXNpbnMvc2libGluZ3MgaW4gdGhlIGRvY3VtZW50LlxuICpcbiAqIE5vZGVzIGFyZSByZXR1cm5lZCBpbiByZXZlcnNlIGRvY3VtZW50IG9yZGVyLCBzdGFydGluZyBmcm9tIGBub2RlYC5cbiAqL1xuZnVuY3Rpb24gbm9kZVdhbGtBbGxQcmlvcihub2RlLCBwcmVkaWNhdGUsIG1hdGNoZXMpIHtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgbWF0Y2hlcyA9IFtdO1xuICB9XG4gIGlmIChwcmVkaWNhdGUobm9kZSkpIHtcbiAgICBtYXRjaGVzLnB1c2gobm9kZSk7XG4gIH1cbiAgLy8gU2VhcmNoIG91ciBlYXJsaWVyIHNpYmxpbmdzIGFuZCB0aGVpciBkZXNjZW5kZW50cy5cbiAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkge1xuICAgIHZhciBpZHggPSBwYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKG5vZGUpO1xuICAgIHZhciBzaWJsaW5ncyA9IHBhcmVudC5jaGlsZE5vZGVzLnNsaWNlKDAsIGlkeCk7XG4gICAgZm9yICh2YXIgaSA9IHNpYmxpbmdzLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuICAgICAgX3JldmVyc2VOb2RlV2Fsa0FsbChzaWJsaW5nc1tpXSwgcHJlZGljYXRlLCBtYXRjaGVzKTtcbiAgICB9XG4gICAgbm9kZVdhbGtBbGxQcmlvcihwYXJlbnQsIHByZWRpY2F0ZSwgbWF0Y2hlcyk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBgbm9kZVdhbGtgLCBidXQgb25seSBtYXRjaGVzIGVsZW1lbnRzXG4gKlxuICogQHJldHVybnMge0VsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5KG5vZGUsIHByZWRpY2F0ZSkge1xuICB2YXIgZWxlbWVudFByZWRpY2F0ZSA9IEFORChpc0VsZW1lbnQsIHByZWRpY2F0ZSk7XG4gIHJldHVybiBub2RlV2Fsayhub2RlLCBlbGVtZW50UHJlZGljYXRlKTtcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIGBub2RlV2Fsa0FsbGAsIGJ1dCBvbmx5IG1hdGNoZXMgZWxlbWVudHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheVtFbGVtZW50XX1cbiAqL1xuZnVuY3Rpb24gcXVlcnlBbGwobm9kZSwgcHJlZGljYXRlLCBtYXRjaGVzKSB7XG4gIHZhciBlbGVtZW50UHJlZGljYXRlID0gQU5EKGlzRWxlbWVudCwgcHJlZGljYXRlKTtcbiAgcmV0dXJuIG5vZGVXYWxrQWxsKG5vZGUsIGVsZW1lbnRQcmVkaWNhdGUsIG1hdGNoZXMpO1xufVxuXG5mdW5jdGlvbiBuZXdUZXh0Tm9kZSh2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIG5vZGVOYW1lOiAnI3RleHQnLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBwYXJlbnROb2RlOiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5ld0NvbW1lbnROb2RlKGNvbW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlTmFtZTogJyNjb21tZW50JyxcbiAgICBkYXRhOiBjb21tZW50LFxuICAgIHBhcmVudE5vZGU6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbmV3RWxlbWVudCh0YWdOYW1lLCBuYW1lc3BhY2UpIHtcbiAgcmV0dXJuIHtcbiAgICBub2RlTmFtZTogdGFnTmFtZSxcbiAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgIGNoaWxkTm9kZXM6IFtdLFxuICAgIG5hbWVzcGFjZVVSSTogbmFtZXNwYWNlIHx8ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyxcbiAgICBhdHRyczogW10sXG4gICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZShvbGROb2RlLCBuZXdOb2RlKSB7XG4gIGluc2VydEJlZm9yZShvbGROb2RlLnBhcmVudE5vZGUsIG9sZE5vZGUsIG5ld05vZGUpO1xuICByZW1vdmUob2xkTm9kZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShub2RlKSB7XG4gIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHtcbiAgICB2YXIgaWR4ID0gcGFyZW50LmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcbiAgICBwYXJlbnQuY2hpbGROb2Rlcy5zcGxpY2UoaWR4LCAxKTtcbiAgfVxuICBub2RlLnBhcmVudE5vZGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50LCBvbGROb2RlLCBuZXdOb2RlKSB7XG4gIHJlbW92ZShuZXdOb2RlKTtcbiAgdmFyIGlkeCA9IHBhcmVudC5jaGlsZE5vZGVzLmluZGV4T2Yob2xkTm9kZSk7XG4gIHBhcmVudC5jaGlsZE5vZGVzLnNwbGljZShpZHgsIDAsIG5ld05vZGUpO1xuICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZChwYXJlbnQsIG5vZGUpIHtcbiAgcmVtb3ZlKG5vZGUpO1xuICBwYXJlbnQuY2hpbGROb2Rlcy5wdXNoKG5vZGUpO1xuICBub2RlLnBhcmVudE5vZGUgPSBwYXJlbnQ7XG59XG5cbnZhciBwYXJzZTUgPSByZXF1aXJlKCdwYXJzZTUnKTtcbmZ1bmN0aW9uIHBhcnNlKHRleHQsIG9wdGlvbnMpIHtcbiAgdmFyIHBhcnNlciA9IG5ldyBwYXJzZTUuUGFyc2VyKHBhcnNlNS5UcmVlQWRhcHRlcnMuZGVmYXVsdCwgb3B0aW9ucyk7XG4gIHJldHVybiBwYXJzZXIucGFyc2UodGV4dCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQodGV4dCkge1xuICB2YXIgcGFyc2VyID0gbmV3IHBhcnNlNS5QYXJzZXIoKTtcbiAgcmV0dXJuIHBhcnNlci5wYXJzZUZyYWdtZW50KHRleHQpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemUoYXN0KSB7XG4gIHZhciBzZXJpYWxpemVyID0gbmV3IHBhcnNlNS5TZXJpYWxpemVyKCk7XG4gIHJldHVybiBzZXJpYWxpemVyLnNlcmlhbGl6ZShhc3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0QXR0cmlidXRlOiBnZXRBdHRyaWJ1dGUsXG4gIGhhc0F0dHJpYnV0ZTogaGFzQXR0cmlidXRlLFxuICBzZXRBdHRyaWJ1dGU6IHNldEF0dHJpYnV0ZSxcbiAgcmVtb3ZlQXR0cmlidXRlOiByZW1vdmVBdHRyaWJ1dGUsXG4gIGdldFRleHRDb250ZW50OiBnZXRUZXh0Q29udGVudCxcbiAgc2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuICByZW1vdmU6IHJlbW92ZSxcbiAgcmVwbGFjZTogcmVwbGFjZSxcbiAgYXBwZW5kOiBhcHBlbmQsXG4gIGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcbiAgaXNEb2N1bWVudDogaXNEb2N1bWVudCxcbiAgaXNEb2N1bWVudEZyYWdtZW50OiBpc0RvY3VtZW50RnJhZ21lbnQsXG4gIGlzRWxlbWVudDogaXNFbGVtZW50LFxuICBpc1RleHROb2RlOiBpc1RleHROb2RlLFxuICBpc0NvbW1lbnROb2RlOiBpc0NvbW1lbnROb2RlLFxuICBxdWVyeTogcXVlcnksXG4gIHF1ZXJ5QWxsOiBxdWVyeUFsbCxcbiAgbm9kZVdhbGs6IG5vZGVXYWxrLFxuICBub2RlV2Fsa0FsbDogbm9kZVdhbGtBbGwsXG4gIG5vZGVXYWxrUHJpb3I6IG5vZGVXYWxrUHJpb3IsXG4gIG5vZGVXYWxrQWxsUHJpb3I6IG5vZGVXYWxrQWxsUHJpb3IsXG4gIHRyZWVNYXA6IHRyZWVNYXAsXG4gIHByZWRpY2F0ZXM6IHtcbiAgICBoYXNDbGFzczogaGFzQ2xhc3MsXG4gICAgaGFzQXR0cjogaGFzQXR0cixcbiAgICBoYXNBdHRyVmFsdWU6IGhhc0F0dHJWYWx1ZSxcbiAgICBoYXNNYXRjaGluZ1RhZ05hbWU6IGhhc01hdGNoaW5nVGFnTmFtZSxcbiAgICBoYXNUYWdOYW1lOiBoYXNUYWdOYW1lLFxuICAgIGhhc1RleHRWYWx1ZTogaGFzVGV4dFZhbHVlLFxuICAgIEFORDogQU5ELFxuICAgIE9SOiBPUixcbiAgICBOT1Q6IE5PVCxcbiAgICBwYXJlbnRNYXRjaGVzOiBwYXJlbnRNYXRjaGVzXG4gIH0sXG4gIGNvbnN0cnVjdG9yczoge1xuICAgIHRleHQ6IG5ld1RleHROb2RlLFxuICAgIGNvbW1lbnQ6IG5ld0NvbW1lbnROb2RlLFxuICAgIGVsZW1lbnQ6IG5ld0VsZW1lbnRcbiAgfSxcbiAgcGFyc2U6IHBhcnNlLFxuICBwYXJzZUZyYWdtZW50OiBwYXJzZUZyYWdtZW50LFxuICBzZXJpYWxpemU6IHNlcmlhbGl6ZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydHMuUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdHJlZV9jb25zdHJ1Y3Rpb24vcGFyc2VyJyk7XHJcbmV4cG9ydHMuU2ltcGxlQXBpUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvc2ltcGxlX2FwaS9zaW1wbGVfYXBpX3BhcnNlcicpO1xyXG5leHBvcnRzLlRyZWVTZXJpYWxpemVyID1cclxuZXhwb3J0cy5TZXJpYWxpemVyID0gcmVxdWlyZSgnLi9saWIvc2VyaWFsaXphdGlvbi9zZXJpYWxpemVyJyk7XHJcbmV4cG9ydHMuSnNEb21QYXJzZXIgPSByZXF1aXJlKCcuL2xpYi9qc2RvbS9qc2RvbV9wYXJzZXInKTtcclxuXHJcbmV4cG9ydHMuVHJlZUFkYXB0ZXJzID0ge1xyXG4gICAgZGVmYXVsdDogcmVxdWlyZSgnLi9saWIvdHJlZV9hZGFwdGVycy9kZWZhdWx0JyksXHJcbiAgICBodG1scGFyc2VyMjogcmVxdWlyZSgnLi9saWIvdHJlZV9hZGFwdGVycy9odG1scGFyc2VyMicpXHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcblxuLy9Db25zdFxudmFyIFZBTElEX0RPQ1RZUEVfTkFNRSA9ICdodG1sJyxcbiAgICBRVUlSS1NfTU9ERV9TWVNURU1fSUQgPSAnaHR0cDovL3d3dy5pYm0uY29tL2RhdGEvZHRkL3YxMS9pYm14aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCcsXG4gICAgUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xuICAgICAgICBcIisvL3NpbG1hcmlsLy9kdGQgaHRtbCBwcm8gdjByMTEgMTk5NzAxMDEvL2VuXCIsXG4gICAgICAgIFwiLS8vYWR2YXNvZnQgbHRkLy9kdGQgaHRtbCAzLjAgYXN3ZWRpdCArIGV4dGVuc2lvbnMvL2VuXCIsXG4gICAgICAgIFwiLS8vYXMvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMS8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgbGV2ZWwgMi8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDEvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdCBsZXZlbCAyLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDIuMWUvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy4wLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMC8vZW4vL1wiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIDMuMiBmaW5hbC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCAzLjIvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgMy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAwLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDEvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAyLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDIvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAzLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvL2VuLy8zLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vZW4vLzIuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy9lblwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy9lbi8vMi4wXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvL2VuXCIsXG4gICAgICAgIFwiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vZW4vLzMuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuLy8yLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvL2VuLy8zLjBcIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9pZXRmLy9kdGQgaHRtbC8vZW4vLzIuMFwiLFxuICAgICAgICBcIi0vL2lldGYvL2R0ZCBodG1sLy9lbi8vMy4wXCIsXG4gICAgICAgIFwiLS8vbWV0cml1cy8vZHRkIG1ldHJpdXMgcHJlc2VudGF0aW9uYWwvL2VuXCIsXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwgc3RyaWN0Ly9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCB0YWJsZXMvL2VuXCIsXG4gICAgICAgIFwiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwgc3RyaWN0Ly9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCB0YWJsZXMvL2VuXCIsXG4gICAgICAgIFwiLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgc3RyaWN0IGh0bWwvL2VuXCIsXG4gICAgICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIDIuMC8vZW5cIixcbiAgICAgICAgXCItLy9vJ3JlaWxseSBhbmQgYXNzb2NpYXRlcy8vZHRkIGh0bWwgZXh0ZW5kZWQgMS4wLy9lblwiLFxuICAgICAgICBcIi0vL3NweWdsYXNzLy9kdGQgaHRtbCAyLjAgZXh0ZW5kZWQvL2VuXCIsXG4gICAgICAgIFwiLS8vc3EvL2R0ZCBodG1sIDIuMCBob3RtZXRhbCArIGV4dGVuc2lvbnMvL2VuXCIsXG4gICAgICAgIFwiLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy9zdW4gbWljcm9zeXN0ZW1zIGNvcnAuLy9kdGQgaG90amF2YSBzdHJpY3QgaHRtbC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMgMTk5NS0wMy0yNC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMiBkcmFmdC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMiBmaW5hbC8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMi8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCBodG1sIDMuMnMgZHJhZnQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCA0LjAgZnJhbWVzZXQvL2VuXCIsXG4gICAgICAgIFwiLS8vdzNjLy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsLy9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDE5OTYwNzEyLy9lblwiLFxuICAgICAgICBcIi0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDk3MDQyMS8vZW5cIixcbiAgICAgICAgXCItLy93M2MvL2R0ZCB3MyBodG1sLy9lblwiLFxuICAgICAgICBcIi0vL3czby8vZHRkIHczIGh0bWwgMy4wLy9lblwiLFxuICAgICAgICBcIi0vL3czby8vZHRkIHczIGh0bWwgMy4wLy9lbi8vXCIsXG4gICAgICAgIFwiLS8vd2VidGVjaHMvL2R0ZCBtb3ppbGxhIGh0bWwgMi4wLy9lblwiLFxuICAgICAgICBcIi0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sLy9lblwiXG4gICAgXSxcbiAgICBRVUlSS1NfTU9ERV9OT19TWVNURU1fSURfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xuICAgICAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIGZyYW1lc2V0Ly8nLFxuICAgICAgICAnLS8vdzNjLy9kdGQgaHRtbCA0LjAxIHRyYW5zaXRpb25hbC8vJ1xuICAgIF0sXG4gICAgUVVJUktTX01PREVfUFVCTElDX0lEUyA9IFtcbiAgICAgICAgJy0vL3czby8vZHRkIHczIGh0bWwgc3RyaWN0IDMuMC8vZW4vLycsXG4gICAgICAgICctL3czYy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsL2VuJyxcbiAgICAgICAgJ2h0bWwnXG4gICAgXTtcblxuXG4vL1V0aWxzXG5mdW5jdGlvbiBlbnF1b3RlRG9jdHlwZUlkKGlkKSB7XG4gICAgdmFyIHF1b3RlID0gaWQuaW5kZXhPZignXCInKSAhPT0gLTEgPyAnXFwnJyA6ICdcIic7XG5cbiAgICByZXR1cm4gcXVvdGUgKyBpZCArIHF1b3RlO1xufVxuXG5cbi8vQVBJXG5leHBvcnRzLmlzUXVpcmtzID0gZnVuY3Rpb24gKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIGlmIChuYW1lICE9PSBWQUxJRF9ET0NUWVBFX05BTUUpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgaWYgKHN5c3RlbUlkICYmIHN5c3RlbUlkLnRvTG93ZXJDYXNlKCkgPT09IFFVSVJLU19NT0RFX1NZU1RFTV9JRClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAocHVibGljSWQgIT09IG51bGwpIHtcbiAgICAgICAgcHVibGljSWQgPSBwdWJsaWNJZC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChRVUlSS1NfTU9ERV9QVUJMSUNfSURTLmluZGV4T2YocHVibGljSWQpID4gLTEpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICB2YXIgcHJlZml4ZXMgPSBRVUlSS1NfTU9ERV9QVUJMSUNfSURfUFJFRklYRVM7XG5cbiAgICAgICAgaWYgKHN5c3RlbUlkID09PSBudWxsKVxuICAgICAgICAgICAgcHJlZml4ZXMgPSBwcmVmaXhlcy5jb25jYXQoUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHB1YmxpY0lkLmluZGV4T2YocHJlZml4ZXNbaV0pID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5zZXJpYWxpemVDb250ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIHZhciBzdHIgPSAnIURPQ1RZUEUgJyArIG5hbWU7XG5cbiAgICBpZiAocHVibGljSWQgIT09IG51bGwpXG4gICAgICAgIHN0ciArPSAnIFBVQkxJQyAnICsgZW5xdW90ZURvY3R5cGVJZChwdWJsaWNJZCk7XG5cbiAgICBlbHNlIGlmIChzeXN0ZW1JZCAhPT0gbnVsbClcbiAgICAgICAgc3RyICs9ICcgU1lTVEVNJztcblxuICAgIGlmIChzeXN0ZW1JZCAhPT0gbnVsbClcbiAgICAgICAgc3RyICs9ICcgJyArIGVucXVvdGVEb2N0eXBlSWQoc3lzdGVtSWQpO1xuXG4gICAgcmV0dXJuIHN0cjtcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxyXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4vaHRtbCcpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gSFRNTC5UQUdfTkFNRVMsXHJcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUyxcclxuICAgIEFUVFJTID0gSFRNTC5BVFRSUztcclxuXHJcblxyXG4vL01JTUUgdHlwZXNcclxudmFyIE1JTUVfVFlQRVMgPSB7XHJcbiAgICBURVhUX0hUTUw6ICd0ZXh0L2h0bWwnLFxyXG4gICAgQVBQTElDQVRJT05fWE1MOiAnYXBwbGljYXRpb24veGh0bWwreG1sJ1xyXG59O1xyXG5cclxuLy9BdHRyaWJ1dGVzXHJcbnZhciBERUZJTklUSU9OX1VSTF9BVFRSID0gJ2RlZmluaXRpb251cmwnLFxyXG4gICAgQURKVVNURURfREVGSU5JVElPTl9VUkxfQVRUUiA9ICdkZWZpbml0aW9uVVJMJyxcclxuICAgIFNWR19BVFRSU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICAgICAnYXR0cmlidXRlbmFtZSc6ICdhdHRyaWJ1dGVOYW1lJyxcclxuICAgICAgICAnYXR0cmlidXRldHlwZSc6ICdhdHRyaWJ1dGVUeXBlJyxcclxuICAgICAgICAnYmFzZWZyZXF1ZW5jeSc6ICdiYXNlRnJlcXVlbmN5JyxcclxuICAgICAgICAnYmFzZXByb2ZpbGUnOiAnYmFzZVByb2ZpbGUnLFxyXG4gICAgICAgICdjYWxjbW9kZSc6ICdjYWxjTW9kZScsXHJcbiAgICAgICAgJ2NsaXBwYXRodW5pdHMnOiAnY2xpcFBhdGhVbml0cycsXHJcbiAgICAgICAgJ2NvbnRlbnRzY3JpcHR0eXBlJzogJ2NvbnRlbnRTY3JpcHRUeXBlJyxcclxuICAgICAgICAnY29udGVudHN0eWxldHlwZSc6ICdjb250ZW50U3R5bGVUeXBlJyxcclxuICAgICAgICAnZGlmZnVzZWNvbnN0YW50JzogJ2RpZmZ1c2VDb25zdGFudCcsXHJcbiAgICAgICAgJ2VkZ2Vtb2RlJzogJ2VkZ2VNb2RlJyxcclxuICAgICAgICAnZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZCc6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcclxuICAgICAgICAnZmlsdGVycmVzJzogJ2ZpbHRlclJlcycsXHJcbiAgICAgICAgJ2ZpbHRlcnVuaXRzJzogJ2ZpbHRlclVuaXRzJyxcclxuICAgICAgICAnZ2x5cGhyZWYnOiAnZ2x5cGhSZWYnLFxyXG4gICAgICAgICdncmFkaWVudHRyYW5zZm9ybSc6ICdncmFkaWVudFRyYW5zZm9ybScsXHJcbiAgICAgICAgJ2dyYWRpZW50dW5pdHMnOiAnZ3JhZGllbnRVbml0cycsXHJcbiAgICAgICAgJ2tlcm5lbG1hdHJpeCc6ICdrZXJuZWxNYXRyaXgnLFxyXG4gICAgICAgICdrZXJuZWx1bml0bGVuZ3RoJzogJ2tlcm5lbFVuaXRMZW5ndGgnLFxyXG4gICAgICAgICdrZXlwb2ludHMnOiAna2V5UG9pbnRzJyxcclxuICAgICAgICAna2V5c3BsaW5lcyc6ICdrZXlTcGxpbmVzJyxcclxuICAgICAgICAna2V5dGltZXMnOiAna2V5VGltZXMnLFxyXG4gICAgICAgICdsZW5ndGhhZGp1c3QnOiAnbGVuZ3RoQWRqdXN0JyxcclxuICAgICAgICAnbGltaXRpbmdjb25lYW5nbGUnOiAnbGltaXRpbmdDb25lQW5nbGUnLFxyXG4gICAgICAgICdtYXJrZXJoZWlnaHQnOiAnbWFya2VySGVpZ2h0JyxcclxuICAgICAgICAnbWFya2VydW5pdHMnOiAnbWFya2VyVW5pdHMnLFxyXG4gICAgICAgICdtYXJrZXJ3aWR0aCc6ICdtYXJrZXJXaWR0aCcsXHJcbiAgICAgICAgJ21hc2tjb250ZW50dW5pdHMnOiAnbWFza0NvbnRlbnRVbml0cycsXHJcbiAgICAgICAgJ21hc2t1bml0cyc6ICdtYXNrVW5pdHMnLFxyXG4gICAgICAgICdudW1vY3RhdmVzJzogJ251bU9jdGF2ZXMnLFxyXG4gICAgICAgICdwYXRobGVuZ3RoJzogJ3BhdGhMZW5ndGgnLFxyXG4gICAgICAgICdwYXR0ZXJuY29udGVudHVuaXRzJzogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxyXG4gICAgICAgICdwYXR0ZXJudHJhbnNmb3JtJzogJ3BhdHRlcm5UcmFuc2Zvcm0nLFxyXG4gICAgICAgICdwYXR0ZXJudW5pdHMnOiAncGF0dGVyblVuaXRzJyxcclxuICAgICAgICAncG9pbnRzYXR4JzogJ3BvaW50c0F0WCcsXHJcbiAgICAgICAgJ3BvaW50c2F0eSc6ICdwb2ludHNBdFknLFxyXG4gICAgICAgICdwb2ludHNhdHonOiAncG9pbnRzQXRaJyxcclxuICAgICAgICAncHJlc2VydmVhbHBoYSc6ICdwcmVzZXJ2ZUFscGhhJyxcclxuICAgICAgICAncHJlc2VydmVhc3BlY3RyYXRpbyc6ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcclxuICAgICAgICAncHJpbWl0aXZldW5pdHMnOiAncHJpbWl0aXZlVW5pdHMnLFxyXG4gICAgICAgICdyZWZ4JzogJ3JlZlgnLFxyXG4gICAgICAgICdyZWZ5JzogJ3JlZlknLFxyXG4gICAgICAgICdyZXBlYXRjb3VudCc6ICdyZXBlYXRDb3VudCcsXHJcbiAgICAgICAgJ3JlcGVhdGR1cic6ICdyZXBlYXREdXInLFxyXG4gICAgICAgICdyZXF1aXJlZGV4dGVuc2lvbnMnOiAncmVxdWlyZWRFeHRlbnNpb25zJyxcclxuICAgICAgICAncmVxdWlyZWRmZWF0dXJlcyc6ICdyZXF1aXJlZEZlYXR1cmVzJyxcclxuICAgICAgICAnc3BlY3VsYXJjb25zdGFudCc6ICdzcGVjdWxhckNvbnN0YW50JyxcclxuICAgICAgICAnc3BlY3VsYXJleHBvbmVudCc6ICdzcGVjdWxhckV4cG9uZW50JyxcclxuICAgICAgICAnc3ByZWFkbWV0aG9kJzogJ3NwcmVhZE1ldGhvZCcsXHJcbiAgICAgICAgJ3N0YXJ0b2Zmc2V0JzogJ3N0YXJ0T2Zmc2V0JyxcclxuICAgICAgICAnc3RkZGV2aWF0aW9uJzogJ3N0ZERldmlhdGlvbicsXHJcbiAgICAgICAgJ3N0aXRjaHRpbGVzJzogJ3N0aXRjaFRpbGVzJyxcclxuICAgICAgICAnc3VyZmFjZXNjYWxlJzogJ3N1cmZhY2VTY2FsZScsXHJcbiAgICAgICAgJ3N5c3RlbWxhbmd1YWdlJzogJ3N5c3RlbUxhbmd1YWdlJyxcclxuICAgICAgICAndGFibGV2YWx1ZXMnOiAndGFibGVWYWx1ZXMnLFxyXG4gICAgICAgICd0YXJnZXR4JzogJ3RhcmdldFgnLFxyXG4gICAgICAgICd0YXJnZXR5JzogJ3RhcmdldFknLFxyXG4gICAgICAgICd0ZXh0bGVuZ3RoJzogJ3RleHRMZW5ndGgnLFxyXG4gICAgICAgICd2aWV3Ym94JzogJ3ZpZXdCb3gnLFxyXG4gICAgICAgICd2aWV3dGFyZ2V0JzogJ3ZpZXdUYXJnZXQnLFxyXG4gICAgICAgICd4Y2hhbm5lbHNlbGVjdG9yJzogJ3hDaGFubmVsU2VsZWN0b3InLFxyXG4gICAgICAgICd5Y2hhbm5lbHNlbGVjdG9yJzogJ3lDaGFubmVsU2VsZWN0b3InLFxyXG4gICAgICAgICd6b29tYW5kcGFuJzogJ3pvb21BbmRQYW4nXHJcbiAgICB9LFxyXG4gICAgWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQID0ge1xyXG4gICAgICAgICd4bGluazphY3R1YXRlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2FjdHVhdGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6YXJjcm9sZSc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdhcmNyb2xlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOmhyZWYnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAnaHJlZicsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bGluazpyb2xlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3JvbGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LfSxcclxuICAgICAgICAneGxpbms6c2hvdyc6IHtwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdzaG93JywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnRpdGxlJzoge3ByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3RpdGxlJywgbmFtZXNwYWNlOiBOUy5YTElOS30sXHJcbiAgICAgICAgJ3hsaW5rOnR5cGUnOiB7cHJlZml4OiAneGxpbmsnLCBuYW1lOiAndHlwZScsIG5hbWVzcGFjZTogTlMuWExJTkt9LFxyXG4gICAgICAgICd4bWw6YmFzZSc6IHtwcmVmaXg6ICd4bWwnLCBuYW1lOiAnYmFzZScsIG5hbWVzcGFjZTogTlMuWE1MfSxcclxuICAgICAgICAneG1sOmxhbmcnOiB7cHJlZml4OiAneG1sJywgbmFtZTogJ2xhbmcnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbDpzcGFjZSc6IHtwcmVmaXg6ICd4bWwnLCBuYW1lOiAnc3BhY2UnLCBuYW1lc3BhY2U6IE5TLlhNTH0sXHJcbiAgICAgICAgJ3htbG5zJzoge3ByZWZpeDogJycsIG5hbWU6ICd4bWxucycsIG5hbWVzcGFjZTogTlMuWE1MTlN9LFxyXG4gICAgICAgICd4bWxuczp4bGluayc6IHtwcmVmaXg6ICd4bWxucycsIG5hbWU6ICd4bGluaycsIG5hbWVzcGFjZTogTlMuWE1MTlN9XHJcblxyXG4gICAgfTtcclxuXHJcbi8vU1ZHIHRhZyBuYW1lcyBhZGp1c3RtZW50IG1hcFxyXG52YXIgU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUCA9IHtcclxuICAgICdhbHRnbHlwaCc6ICdhbHRHbHlwaCcsXHJcbiAgICAnYWx0Z2x5cGhkZWYnOiAnYWx0R2x5cGhEZWYnLFxyXG4gICAgJ2FsdGdseXBoaXRlbSc6ICdhbHRHbHlwaEl0ZW0nLFxyXG4gICAgJ2FuaW1hdGVjb2xvcic6ICdhbmltYXRlQ29sb3InLFxyXG4gICAgJ2FuaW1hdGVtb3Rpb24nOiAnYW5pbWF0ZU1vdGlvbicsXHJcbiAgICAnYW5pbWF0ZXRyYW5zZm9ybSc6ICdhbmltYXRlVHJhbnNmb3JtJyxcclxuICAgICdjbGlwcGF0aCc6ICdjbGlwUGF0aCcsXHJcbiAgICAnZmVibGVuZCc6ICdmZUJsZW5kJyxcclxuICAgICdmZWNvbG9ybWF0cml4JzogJ2ZlQ29sb3JNYXRyaXgnLFxyXG4gICAgJ2ZlY29tcG9uZW50dHJhbnNmZXInOiAnZmVDb21wb25lbnRUcmFuc2ZlcicsXHJcbiAgICAnZmVjb21wb3NpdGUnOiAnZmVDb21wb3NpdGUnLFxyXG4gICAgJ2ZlY29udm9sdmVtYXRyaXgnOiAnZmVDb252b2x2ZU1hdHJpeCcsXHJcbiAgICAnZmVkaWZmdXNlbGlnaHRpbmcnOiAnZmVEaWZmdXNlTGlnaHRpbmcnLFxyXG4gICAgJ2ZlZGlzcGxhY2VtZW50bWFwJzogJ2ZlRGlzcGxhY2VtZW50TWFwJyxcclxuICAgICdmZWRpc3RhbnRsaWdodCc6ICdmZURpc3RhbnRMaWdodCcsXHJcbiAgICAnZmVmbG9vZCc6ICdmZUZsb29kJyxcclxuICAgICdmZWZ1bmNhJzogJ2ZlRnVuY0EnLFxyXG4gICAgJ2ZlZnVuY2InOiAnZmVGdW5jQicsXHJcbiAgICAnZmVmdW5jZyc6ICdmZUZ1bmNHJyxcclxuICAgICdmZWZ1bmNyJzogJ2ZlRnVuY1InLFxyXG4gICAgJ2ZlZ2F1c3NpYW5ibHVyJzogJ2ZlR2F1c3NpYW5CbHVyJyxcclxuICAgICdmZWltYWdlJzogJ2ZlSW1hZ2UnLFxyXG4gICAgJ2ZlbWVyZ2UnOiAnZmVNZXJnZScsXHJcbiAgICAnZmVtZXJnZW5vZGUnOiAnZmVNZXJnZU5vZGUnLFxyXG4gICAgJ2ZlbW9ycGhvbG9neSc6ICdmZU1vcnBob2xvZ3knLFxyXG4gICAgJ2Zlb2Zmc2V0JzogJ2ZlT2Zmc2V0JyxcclxuICAgICdmZXBvaW50bGlnaHQnOiAnZmVQb2ludExpZ2h0JyxcclxuICAgICdmZXNwZWN1bGFybGlnaHRpbmcnOiAnZmVTcGVjdWxhckxpZ2h0aW5nJyxcclxuICAgICdmZXNwb3RsaWdodCc6ICdmZVNwb3RMaWdodCcsXHJcbiAgICAnZmV0aWxlJzogJ2ZlVGlsZScsXHJcbiAgICAnZmV0dXJidWxlbmNlJzogJ2ZlVHVyYnVsZW5jZScsXHJcbiAgICAnZm9yZWlnbm9iamVjdCc6ICdmb3JlaWduT2JqZWN0JyxcclxuICAgICdnbHlwaHJlZic6ICdnbHlwaFJlZicsXHJcbiAgICAnbGluZWFyZ3JhZGllbnQnOiAnbGluZWFyR3JhZGllbnQnLFxyXG4gICAgJ3JhZGlhbGdyYWRpZW50JzogJ3JhZGlhbEdyYWRpZW50JyxcclxuICAgICd0ZXh0cGF0aCc6ICd0ZXh0UGF0aCdcclxufTtcclxuXHJcbi8vVGFncyB0aGF0IGNhdXNlcyBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XHJcbnZhciBFWElUU19GT1JFSUdOX0NPTlRFTlQgPSB7fTtcclxuXHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQklHXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLkJMT0NLUVVPVEVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQk9EWV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5CUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5DRU5URVJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuQ09ERV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5ERF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5ESVZdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRExdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRFRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRU1dID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuRU1CRURdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDFdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDJdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDNdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDRdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSDZdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuSEVBRF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5IUl0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5JXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLklNR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5MSV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5MSVNUSU5HXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk1FTlVdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuTUVUQV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5OT0JSXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLk9MXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlBdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuUFJFXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlJVQlldID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TTUFMTF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TUEFOXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNUUk9OR10gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5TVFJJS0VdID0gdHJ1ZTtcclxuRVhJVFNfRk9SRUlHTl9DT05URU5UWyQuU1VCXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlNVUF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5UQUJMRV0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5UVF0gPSB0cnVlO1xyXG5FWElUU19GT1JFSUdOX0NPTlRFTlRbJC5VXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlVMXSA9IHRydWU7XHJcbkVYSVRTX0ZPUkVJR05fQ09OVEVOVFskLlZBUl0gPSB0cnVlO1xyXG5cclxuLy9DaGVjayBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XHJcbmV4cG9ydHMuY2F1c2VzRXhpdCA9IGZ1bmN0aW9uIChzdGFydFRhZ1Rva2VuKSB7XHJcbiAgICB2YXIgdG4gPSBzdGFydFRhZ1Rva2VuLnRhZ05hbWU7XHJcblxyXG4gICAgaWYgKHRuID09PSAkLkZPTlQgJiYgKFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuQ09MT1IpICE9PSBudWxsIHx8XHJcbiAgICAgICAgVG9rZW5pemVyLmdldFRva2VuQXR0cihzdGFydFRhZ1Rva2VuLCBBVFRSUy5TSVpFKSAhPT0gbnVsbCB8fFxyXG4gICAgICAgIFRva2VuaXplci5nZXRUb2tlbkF0dHIoc3RhcnRUYWdUb2tlbiwgQVRUUlMuRkFDRSkgIT09IG51bGwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEVYSVRTX0ZPUkVJR05fQ09OVEVOVFt0bl07XHJcbn07XHJcblxyXG4vL1Rva2VuIGFkanVzdG1lbnRzXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5NYXRoTUxBdHRycyA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0b2tlbi5hdHRyc1tpXS5uYW1lID09PSBERUZJTklUSU9OX1VSTF9BVFRSKSB7XHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBBREpVU1RFRF9ERUZJTklUSU9OX1VSTF9BVFRSO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnRzLmFkanVzdFRva2VuU1ZHQXR0cnMgPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgYWRqdXN0ZWRBdHRyTmFtZSA9IFNWR19BVFRSU19BREpVU1RNRU5UX01BUFt0b2tlbi5hdHRyc1tpXS5uYW1lXTtcclxuXHJcbiAgICAgICAgaWYgKGFkanVzdGVkQXR0ck5hbWUpXHJcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBhZGp1c3RlZEF0dHJOYW1lO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5hZGp1c3RUb2tlblhNTEF0dHJzID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGFkanVzdGVkQXR0ckVudHJ5ID0gWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQW3Rva2VuLmF0dHJzW2ldLm5hbWVdO1xyXG5cclxuICAgICAgICBpZiAoYWRqdXN0ZWRBdHRyRW50cnkpIHtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ucHJlZml4ID0gYWRqdXN0ZWRBdHRyRW50cnkucHJlZml4O1xyXG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZTtcclxuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZXNwYWNlID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZXNwYWNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuYWRqdXN0VG9rZW5TVkdUYWdOYW1lID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICB2YXIgYWRqdXN0ZWRUYWdOYW1lID0gU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUFt0b2tlbi50YWdOYW1lXTtcclxuXHJcbiAgICBpZiAoYWRqdXN0ZWRUYWdOYW1lKVxyXG4gICAgICAgIHRva2VuLnRhZ05hbWUgPSBhZGp1c3RlZFRhZ05hbWU7XHJcbn07XHJcblxyXG4vL0ludGVncmF0aW9uIHBvaW50c1xyXG5leHBvcnRzLmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAodG4sIG5zKSB7XHJcbiAgICByZXR1cm4gbnMgPT09IE5TLk1BVEhNTCAmJiAodG4gPT09ICQuTUkgfHwgdG4gPT09ICQuTU8gfHwgdG4gPT09ICQuTU4gfHwgdG4gPT09ICQuTVMgfHwgdG4gPT09ICQuTVRFWFQpO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0h0bWxJbnRlZ3JhdGlvblBvaW50ID0gZnVuY3Rpb24gKHRuLCBucywgYXR0cnMpIHtcclxuICAgIGlmIChucyA9PT0gTlMuTUFUSE1MICYmIHRuID09PSAkLkFOTk9UQVRJT05fWE1MKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gQVRUUlMuRU5DT0RJTkcpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJzW2ldLnZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSBNSU1FX1RZUEVTLlRFWFRfSFRNTCB8fCB2YWx1ZSA9PT0gTUlNRV9UWVBFUy5BUFBMSUNBVElPTl9YTUw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5zID09PSBOUy5TVkcgJiYgKHRuID09PSAkLkZPUkVJR05fT0JKRUNUIHx8IHRuID09PSAkLkRFU0MgfHwgdG4gPT09ICQuVElUTEUpO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgTlMgPSBleHBvcnRzLk5BTUVTUEFDRVMgPSB7XHJcbiAgICBIVE1MOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsXHJcbiAgICBNQVRITUw6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJyxcclxuICAgIFNWRzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyxcclxuICAgIFhMSU5LOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsXHJcbiAgICBYTUw6ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLFxyXG4gICAgWE1MTlM6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLydcclxufTtcclxuXHJcbmV4cG9ydHMuQVRUUlMgPSB7XHJcbiAgICBUWVBFOiAndHlwZScsXHJcbiAgICBBQ1RJT046ICdhY3Rpb24nLFxyXG4gICAgRU5DT0RJTkc6ICdlbmNvZGluZycsXHJcbiAgICBQUk9NUFQ6ICdwcm9tcHQnLFxyXG4gICAgTkFNRTogJ25hbWUnLFxyXG4gICAgQ09MT1I6ICdjb2xvcicsXHJcbiAgICBGQUNFOiAnZmFjZScsXHJcbiAgICBTSVpFOiAnc2l6ZSdcclxufTtcclxuXHJcbnZhciAkID0gZXhwb3J0cy5UQUdfTkFNRVMgPSB7XHJcbiAgICBBOiAnYScsXHJcbiAgICBBRERSRVNTOiAnYWRkcmVzcycsXHJcbiAgICBBTk5PVEFUSU9OX1hNTDogJ2Fubm90YXRpb24teG1sJyxcclxuICAgIEFQUExFVDogJ2FwcGxldCcsXHJcbiAgICBBUkVBOiAnYXJlYScsXHJcbiAgICBBUlRJQ0xFOiAnYXJ0aWNsZScsXHJcbiAgICBBU0lERTogJ2FzaWRlJyxcclxuXHJcbiAgICBCOiAnYicsXHJcbiAgICBCQVNFOiAnYmFzZScsXHJcbiAgICBCQVNFRk9OVDogJ2Jhc2Vmb250JyxcclxuICAgIEJHU09VTkQ6ICdiZ3NvdW5kJyxcclxuICAgIEJJRzogJ2JpZycsXHJcbiAgICBCTE9DS1FVT1RFOiAnYmxvY2txdW90ZScsXHJcbiAgICBCT0RZOiAnYm9keScsXHJcbiAgICBCUjogJ2JyJyxcclxuICAgIEJVVFRPTjogJ2J1dHRvbicsXHJcblxyXG4gICAgQ0FQVElPTjogJ2NhcHRpb24nLFxyXG4gICAgQ0VOVEVSOiAnY2VudGVyJyxcclxuICAgIENPREU6ICdjb2RlJyxcclxuICAgIENPTDogJ2NvbCcsXHJcbiAgICBDT0xHUk9VUDogJ2NvbGdyb3VwJyxcclxuICAgIENPTU1BTkQ6ICdjb21tYW5kJyxcclxuXHJcbiAgICBERDogJ2RkJyxcclxuICAgIERFU0M6ICdkZXNjJyxcclxuICAgIERFVEFJTFM6ICdkZXRhaWxzJyxcclxuICAgIERJQUxPRzogJ2RpYWxvZycsXHJcbiAgICBESVI6ICdkaXInLFxyXG4gICAgRElWOiAnZGl2JyxcclxuICAgIERMOiAnZGwnLFxyXG4gICAgRFQ6ICdkdCcsXHJcblxyXG4gICAgRU06ICdlbScsXHJcbiAgICBFTUJFRDogJ2VtYmVkJyxcclxuXHJcbiAgICBGSUVMRFNFVDogJ2ZpZWxkc2V0JyxcclxuICAgIEZJR0NBUFRJT046ICdmaWdjYXB0aW9uJyxcclxuICAgIEZJR1VSRTogJ2ZpZ3VyZScsXHJcbiAgICBGT05UOiAnZm9udCcsXHJcbiAgICBGT09URVI6ICdmb290ZXInLFxyXG4gICAgRk9SRUlHTl9PQkpFQ1Q6ICdmb3JlaWduT2JqZWN0JyxcclxuICAgIEZPUk06ICdmb3JtJyxcclxuICAgIEZSQU1FOiAnZnJhbWUnLFxyXG4gICAgRlJBTUVTRVQ6ICdmcmFtZXNldCcsXHJcblxyXG4gICAgSDE6ICdoMScsXHJcbiAgICBIMjogJ2gyJyxcclxuICAgIEgzOiAnaDMnLFxyXG4gICAgSDQ6ICdoNCcsXHJcbiAgICBINTogJ2g1JyxcclxuICAgIEg2OiAnaDYnLFxyXG4gICAgSEVBRDogJ2hlYWQnLFxyXG4gICAgSEVBREVSOiAnaGVhZGVyJyxcclxuICAgIEhHUk9VUDogJ2hncm91cCcsXHJcbiAgICBIUjogJ2hyJyxcclxuICAgIEhUTUw6ICdodG1sJyxcclxuXHJcbiAgICBJOiAnaScsXHJcbiAgICBJTUc6ICdpbWcnLFxyXG4gICAgSU1BR0U6ICdpbWFnZScsXHJcbiAgICBJTlBVVDogJ2lucHV0JyxcclxuICAgIElGUkFNRTogJ2lmcmFtZScsXHJcbiAgICBJU0lOREVYOiAnaXNpbmRleCcsXHJcblxyXG4gICAgS0VZR0VOOiAna2V5Z2VuJyxcclxuXHJcbiAgICBMQUJFTDogJ2xhYmVsJyxcclxuICAgIExJOiAnbGknLFxyXG4gICAgTElOSzogJ2xpbmsnLFxyXG4gICAgTElTVElORzogJ2xpc3RpbmcnLFxyXG5cclxuICAgIE1BSU46ICdtYWluJyxcclxuICAgIE1BTElHTk1BUks6ICdtYWxpZ25tYXJrJyxcclxuICAgIE1BUlFVRUU6ICdtYXJxdWVlJyxcclxuICAgIE1BVEg6ICdtYXRoJyxcclxuICAgIE1FTlU6ICdtZW51JyxcclxuICAgIE1FTlVJVEVNOiAnbWVudWl0ZW0nLFxyXG4gICAgTUVUQTogJ21ldGEnLFxyXG4gICAgTUdMWVBIOiAnbWdseXBoJyxcclxuICAgIE1JOiAnbWknLFxyXG4gICAgTU86ICdtbycsXHJcbiAgICBNTjogJ21uJyxcclxuICAgIE1TOiAnbXMnLFxyXG4gICAgTVRFWFQ6ICdtdGV4dCcsXHJcblxyXG4gICAgTkFWOiAnbmF2JyxcclxuICAgIE5PQlI6ICdub2JyJyxcclxuICAgIE5PRlJBTUVTOiAnbm9mcmFtZXMnLFxyXG4gICAgTk9FTUJFRDogJ25vZW1iZWQnLFxyXG4gICAgTk9TQ1JJUFQ6ICdub3NjcmlwdCcsXHJcblxyXG4gICAgT0JKRUNUOiAnb2JqZWN0JyxcclxuICAgIE9MOiAnb2wnLFxyXG4gICAgT1BUR1JPVVA6ICdvcHRncm91cCcsXHJcbiAgICBPUFRJT046ICdvcHRpb24nLFxyXG5cclxuICAgIFA6ICdwJyxcclxuICAgIFBBUkFNOiAncGFyYW0nLFxyXG4gICAgUExBSU5URVhUOiAncGxhaW50ZXh0JyxcclxuICAgIFBSRTogJ3ByZScsXHJcblxyXG4gICAgUlA6ICdycCcsXHJcbiAgICBSVDogJ3J0JyxcclxuICAgIFJVQlk6ICdydWJ5JyxcclxuXHJcbiAgICBTOiAncycsXHJcbiAgICBTQ1JJUFQ6ICdzY3JpcHQnLFxyXG4gICAgU0VDVElPTjogJ3NlY3Rpb24nLFxyXG4gICAgU0VMRUNUOiAnc2VsZWN0JyxcclxuICAgIFNPVVJDRTogJ3NvdXJjZScsXHJcbiAgICBTTUFMTDogJ3NtYWxsJyxcclxuICAgIFNQQU46ICdzcGFuJyxcclxuICAgIFNUUklLRTogJ3N0cmlrZScsXHJcbiAgICBTVFJPTkc6ICdzdHJvbmcnLFxyXG4gICAgU1RZTEU6ICdzdHlsZScsXHJcbiAgICBTVUI6ICdzdWInLFxyXG4gICAgU1VNTUFSWTogJ3N1bW1hcnknLFxyXG4gICAgU1VQOiAnc3VwJyxcclxuXHJcbiAgICBUQUJMRTogJ3RhYmxlJyxcclxuICAgIFRCT0RZOiAndGJvZHknLFxyXG4gICAgVEVNUExBVEU6ICd0ZW1wbGF0ZScsXHJcbiAgICBURVhUQVJFQTogJ3RleHRhcmVhJyxcclxuICAgIFRGT09UOiAndGZvb3QnLFxyXG4gICAgVEQ6ICd0ZCcsXHJcbiAgICBUSDogJ3RoJyxcclxuICAgIFRIRUFEOiAndGhlYWQnLFxyXG4gICAgVElUTEU6ICd0aXRsZScsXHJcbiAgICBUUjogJ3RyJyxcclxuICAgIFRSQUNLOiAndHJhY2snLFxyXG4gICAgVFQ6ICd0dCcsXHJcblxyXG4gICAgVTogJ3UnLFxyXG4gICAgVUw6ICd1bCcsXHJcblxyXG4gICAgU1ZHOiAnc3ZnJyxcclxuXHJcbiAgICBWQVI6ICd2YXInLFxyXG5cclxuICAgIFdCUjogJ3dicicsXHJcblxyXG4gICAgWE1QOiAneG1wJ1xyXG59O1xyXG5cclxudmFyIFNQRUNJQUxfRUxFTUVOVFMgPSBleHBvcnRzLlNQRUNJQUxfRUxFTUVOVFMgPSB7fTtcclxuXHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF0gPSB7fTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFERFJFU1NdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkFQUExFVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVJFQV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVJUSUNMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQVNJREVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJBU0VdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkJBU0VGT05UXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CR1NPVU5EXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CTE9DS1FVT1RFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CT0RZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5CUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQlVUVE9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DQVBUSU9OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5DRU5URVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkNPTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuQ09MR1JPVVBdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkREXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ERVRBSUxTXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5ESVJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRJVl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRExdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkRUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5FTUJFRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRklFTERTRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJR0NBUFRJT05dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkZJR1VSRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRk9PVEVSXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GT1JNXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5GUkFNRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuRlJBTUVTRVRdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkgxXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IMl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkg0XSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5INV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSDZdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhFQURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLkhFQURFUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSEdST1VQXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5IUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSFRNTF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuSUZSQU1FXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JTUddID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLklOUFVUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5JU0lOREVYXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5MSV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTElOS10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTElTVElOR10gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUFJTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUFSUVVFRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUVOVV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTUVOVUlURU1dID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk1FVEFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5BVl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTk9FTUJFRF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuTk9GUkFNRVNdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk5PU0NSSVBUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5PQkpFQ1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLk9MXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QQVJBTV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuUExBSU5URVhUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5QUkVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNDUklQVF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU0VDVElPTl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuU0VMRUNUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TT1VSQ0VdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlNUWUxFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5TVU1NQVJZXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UQUJMRV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEJPRFldID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlREXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5URU1QTEFURV0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEVYVEFSRUFdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRGT09UXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5USF0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVEhFQURdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlRJVExFXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5UUl0gPSB0cnVlO1xyXG5TUEVDSUFMX0VMRU1FTlRTW05TLkhUTUxdWyQuVFJBQ0tdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlVMXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuSFRNTF1bJC5XQlJdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5IVE1MXVskLlhNUF0gPSB0cnVlO1xyXG5cclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5NQVRITUxdID0ge307XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1JXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1PXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1OXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1TXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLk1URVhUXSA9IHRydWU7XHJcblNQRUNJQUxfRUxFTUVOVFNbTlMuTUFUSE1MXVskLkFOTk9UQVRJT05fWE1MXSA9IHRydWU7XHJcblxyXG5TUEVDSUFMX0VMRU1FTlRTW05TLlNWR10gPSB7fTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuVElUTEVdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuRk9SRUlHTl9PQkpFQ1RdID0gdHJ1ZTtcclxuU1BFQ0lBTF9FTEVNRU5UU1tOUy5TVkddWyQuREVTQ10gPSB0cnVlO1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG5leHBvcnRzLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUiA9ICdcXHVGRkZEJztcclxuXHJcbmV4cG9ydHMuQ09ERV9QT0lOVFMgPSB7XHJcbiAgICBFT0Y6IC0xLFxyXG4gICAgTlVMTDogMHgwMCxcclxuICAgIFRBQlVMQVRJT046IDB4MDksXHJcbiAgICBDQVJSSUFHRV9SRVRVUk46IDB4MEQsXHJcbiAgICBMSU5FX0ZFRUQ6IDB4MEEsXHJcbiAgICBGT1JNX0ZFRUQ6IDB4MEMsXHJcbiAgICBTUEFDRTogMHgyMCxcclxuICAgIEVYQ0xBTUFUSU9OX01BUks6IDB4MjEsXHJcbiAgICBRVU9UQVRJT05fTUFSSzogMHgyMixcclxuICAgIE5VTUJFUl9TSUdOOiAweDIzLFxyXG4gICAgQU1QRVJTQU5EOiAweDI2LFxyXG4gICAgQVBPU1RST1BIRTogMHgyNyxcclxuICAgIEhZUEhFTl9NSU5VUzogMHgyRCxcclxuICAgIFNPTElEVVM6IDB4MkYsXHJcbiAgICBESUdJVF8wOiAweDMwLFxyXG4gICAgRElHSVRfOTogMHgzOSxcclxuICAgIFNFTUlDT0xPTjogMHgzQixcclxuICAgIExFU1NfVEhBTl9TSUdOOiAweDNDLFxyXG4gICAgRVFVQUxTX1NJR046IDB4M0QsXHJcbiAgICBHUkVBVEVSX1RIQU5fU0lHTjogMHgzRSxcclxuICAgIFFVRVNUSU9OX01BUks6IDB4M0YsXHJcbiAgICBMQVRJTl9DQVBJVEFMX0E6IDB4NDEsXHJcbiAgICBMQVRJTl9DQVBJVEFMX0Y6IDB4NDYsXHJcbiAgICBMQVRJTl9DQVBJVEFMX1g6IDB4NTgsXHJcbiAgICBMQVRJTl9DQVBJVEFMX1o6IDB4NUEsXHJcbiAgICBHUkFWRV9BQ0NFTlQ6IDB4NjAsXHJcbiAgICBMQVRJTl9TTUFMTF9BOiAweDYxLFxyXG4gICAgTEFUSU5fU01BTExfRjogMHg2NixcclxuICAgIExBVElOX1NNQUxMX1g6IDB4NzgsXHJcbiAgICBMQVRJTl9TTUFMTF9aOiAweDdBLFxyXG4gICAgQk9NOiAweEZFRkYsXHJcbiAgICBSRVBMQUNFTUVOVF9DSEFSQUNURVI6IDB4RkZGRFxyXG59O1xyXG5cclxuZXhwb3J0cy5DT0RFX1BPSU5UX1NFUVVFTkNFUyA9IHtcclxuICAgIERBU0hfREFTSF9TVFJJTkc6IFsweDJELCAweDJEXSwgLy8tLVxyXG4gICAgRE9DVFlQRV9TVFJJTkc6IFsweDQ0LCAweDRGLCAweDQzLCAweDU0LCAweDU5LCAweDUwLCAweDQ1XSwgLy9ET0NUWVBFXHJcbiAgICBDREFUQV9TVEFSVF9TVFJJTkc6IFsweDVCLCAweDQzLCAweDQ0LCAweDQxLCAweDU0LCAweDQxLCAweDVCXSwgLy9bQ0RBVEFbXHJcbiAgICBDREFUQV9FTkRfU1RSSU5HOiBbMHg1RCwgMHg1RCwgMHgzRV0sIC8vXV0+XHJcbiAgICBTQ1JJUFRfU1RSSU5HOiBbMHg3MywgMHg2MywgMHg3MiwgMHg2OSwgMHg3MCwgMHg3NF0sIC8vc2NyaXB0XHJcbiAgICBQVUJMSUNfU1RSSU5HOiBbMHg1MCwgMHg1NSwgMHg0MiwgMHg0QywgMHg0OSwgMHg0M10sIC8vUFVCTElDXHJcbiAgICBTWVNURU1fU1RSSU5HOiBbMHg1MywgMHg1OSwgMHg1MywgMHg1NCwgMHg0NSwgMHg0RF0gLy9TWVNURU1cclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxuZXhwb3J0cy5tZXJnZU9wdGlvbnMgPSBmdW5jdGlvbiAoZGVmYXVsdHMsIG9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgIHJldHVybiBbZGVmYXVsdHMsIG9wdGlvbnNdLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBvcHRPYmopIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhvcHRPYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBtZXJnZWRba2V5XSA9IG9wdE9ialtrZXldO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gbWVyZ2VkO1xyXG4gICAgfSwge30pO1xyXG59O1xyXG4iLCIoZnVuY3Rpb24gKHByb2Nlc3Mpe1xuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFBhcnNlciA9IHJlcXVpcmUoJy4uL3RyZWVfY29uc3RydWN0aW9uL3BhcnNlcicpLFxyXG4gICAgUGFyc2luZ1VuaXQgPSByZXF1aXJlKCcuL3BhcnNpbmdfdW5pdCcpO1xyXG5cclxuLy9BUElcclxuZXhwb3J0cy5wYXJzZURvY3VtZW50ID0gZnVuY3Rpb24gKGh0bWwsIHRyZWVBZGFwdGVyKSB7XHJcbiAgICAvL05PVEU6IHRoaXMgc2hvdWxkIGJlIHJlZW50cmFudCwgc28gd2UgY3JlYXRlIG5ldyBwYXJzZXIgaGVyZVxyXG4gICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHJlZUFkYXB0ZXIpLFxyXG4gICAgICAgIHBhcnNpbmdVbml0ID0gbmV3IFBhcnNpbmdVbml0KHBhcnNlcik7XHJcblxyXG4gICAgLy9OT1RFOiBvdmVycmlkZSBwYXJzZXIgbG9vcCBtZXRob2RcclxuICAgIHBhcnNlci5fcnVuUGFyc2luZ0xvb3AgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcGFyc2luZ1VuaXQucGFyc2luZ0xvb3BMb2NrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgd2hpbGUgKCFwYXJzaW5nVW5pdC5zdXNwZW5kZWQgJiYgIXRoaXMuc3RvcHBlZClcclxuICAgICAgICAgICAgdGhpcy5faXRlcmF0ZVBhcnNpbmdMb29wKCk7XHJcblxyXG4gICAgICAgIHBhcnNpbmdVbml0LnBhcnNpbmdMb29wTG9jayA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdG9wcGVkKVxyXG4gICAgICAgICAgICBwYXJzaW5nVW5pdC5jYWxsYmFjayh0aGlzLmRvY3VtZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiB3YWl0IHdoaWxlIHBhcnNlckNvbnRyb2xsZXIgd2lsbCBiZSBhZG9wdGVkIGJ5IGNhbGxpbmcgY29kZSwgdGhlblxyXG4gICAgLy9zdGFydCBwYXJzaW5nXHJcbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBwYXJzZXIucGFyc2UoaHRtbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGFyc2luZ1VuaXQ7XHJcbn07XHJcblxyXG5leHBvcnRzLnBhcnNlSW5uZXJIdG1sID0gZnVuY3Rpb24gKGlubmVySHRtbCwgY29udGV4dEVsZW1lbnQsIHRyZWVBZGFwdGVyKSB7XHJcbiAgICAvL05PVEU6IHRoaXMgc2hvdWxkIGJlIHJlZW50cmFudCwgc28gd2UgY3JlYXRlIG5ldyBwYXJzZXIgaGVyZVxyXG4gICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHJlZUFkYXB0ZXIpO1xyXG5cclxuICAgIHJldHVybiBwYXJzZXIucGFyc2VGcmFnbWVudChpbm5lckh0bWwsIGNvbnRleHRFbGVtZW50KTtcclxufTtcbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpKVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWtiMjAxTDI1dlpHVmZiVzlrZFd4bGN5OXdZWEp6WlRVdmJHbGlMMnB6Wkc5dEwycHpaRzl0WDNCaGNuTmxjaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pTzBGQlFVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJbmRYTmxJSE4wY21samRDYzdYSEpjYmx4eVhHNTJZWElnVUdGeWMyVnlJRDBnY21WeGRXbHlaU2duTGk0dmRISmxaVjlqYjI1emRISjFZM1JwYjI0dmNHRnljMlZ5Snlrc1hISmNiaUFnSUNCUVlYSnphVzVuVlc1cGRDQTlJSEpsY1hWcGNtVW9KeTR2Y0dGeWMybHVaMTkxYm1sMEp5azdYSEpjYmx4eVhHNHZMMEZRU1Z4eVhHNWxlSEJ2Y25SekxuQmhjbk5sUkc5amRXMWxiblFnUFNCbWRXNWpkR2x2YmlBb2FIUnRiQ3dnZEhKbFpVRmtZWEIwWlhJcElIdGNjbHh1SUNBZ0lDOHZUazlVUlRvZ2RHaHBjeUJ6YUc5MWJHUWdZbVVnY21WbGJuUnlZVzUwTENCemJ5QjNaU0JqY21WaGRHVWdibVYzSUhCaGNuTmxjaUJvWlhKbFhISmNiaUFnSUNCMllYSWdjR0Z5YzJWeUlEMGdibVYzSUZCaGNuTmxjaWgwY21WbFFXUmhjSFJsY2lrc1hISmNiaUFnSUNBZ0lDQWdjR0Z5YzJsdVoxVnVhWFFnUFNCdVpYY2dVR0Z5YzJsdVoxVnVhWFFvY0dGeWMyVnlLVHRjY2x4dVhISmNiaUFnSUNBdkwwNVBWRVU2SUc5MlpYSnlhV1JsSUhCaGNuTmxjaUJzYjI5d0lHMWxkR2h2WkZ4eVhHNGdJQ0FnY0dGeWMyVnlMbDl5ZFc1UVlYSnphVzVuVEc5dmNDQTlJR1oxYm1OMGFXOXVJQ2dwSUh0Y2NseHVJQ0FnSUNBZ0lDQndZWEp6YVc1blZXNXBkQzV3WVhKemFXNW5URzl2Y0V4dlkyc2dQU0IwY25WbE8xeHlYRzVjY2x4dUlDQWdJQ0FnSUNCM2FHbHNaU0FvSVhCaGNuTnBibWRWYm1sMExuTjFjM0JsYm1SbFpDQW1KaUFoZEdocGN5NXpkRzl3Y0dWa0tWeHlYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbDlwZEdWeVlYUmxVR0Z5YzJsdVoweHZiM0FvS1R0Y2NseHVYSEpjYmlBZ0lDQWdJQ0FnY0dGeWMybHVaMVZ1YVhRdWNHRnljMmx1WjB4dmIzQk1iMk5ySUQwZ1ptRnNjMlU3WEhKY2JseHlYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbk4wYjNCd1pXUXBYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIQmhjbk5wYm1kVmJtbDBMbU5oYkd4aVlXTnJLSFJvYVhNdVpHOWpkVzFsYm5RcE8xeHlYRzRnSUNBZ2ZUdGNjbHh1WEhKY2JpQWdJQ0F2TDA1UFZFVTZJSGRoYVhRZ2QyaHBiR1VnY0dGeWMyVnlRMjl1ZEhKdmJHeGxjaUIzYVd4c0lHSmxJR0ZrYjNCMFpXUWdZbmtnWTJGc2JHbHVaeUJqYjJSbExDQjBhR1Z1WEhKY2JpQWdJQ0F2TDNOMFlYSjBJSEJoY25OcGJtZGNjbHh1SUNBZ0lIQnliMk5sYzNNdWJtVjRkRlJwWTJzb1puVnVZM1JwYjI0Z0tDa2dlMXh5WEc0Z0lDQWdJQ0FnSUhCaGNuTmxjaTV3WVhKelpTaG9kRzFzS1R0Y2NseHVJQ0FnSUgwcE8xeHlYRzVjY2x4dUlDQWdJSEpsZEhWeWJpQndZWEp6YVc1blZXNXBkRHRjY2x4dWZUdGNjbHh1WEhKY2JtVjRjRzl5ZEhNdWNHRnljMlZKYm01bGNraDBiV3dnUFNCbWRXNWpkR2x2YmlBb2FXNXVaWEpJZEcxc0xDQmpiMjUwWlhoMFJXeGxiV1Z1ZEN3Z2RISmxaVUZrWVhCMFpYSXBJSHRjY2x4dUlDQWdJQzh2VGs5VVJUb2dkR2hwY3lCemFHOTFiR1FnWW1VZ2NtVmxiblJ5WVc1MExDQnpieUIzWlNCamNtVmhkR1VnYm1WM0lIQmhjbk5sY2lCb1pYSmxYSEpjYmlBZ0lDQjJZWElnY0dGeWMyVnlJRDBnYm1WM0lGQmhjbk5sY2loMGNtVmxRV1JoY0hSbGNpazdYSEpjYmx4eVhHNGdJQ0FnY21WMGRYSnVJSEJoY25ObGNpNXdZWEp6WlVaeVlXZHRaVzUwS0dsdWJtVnlTSFJ0YkN3Z1kyOXVkR1Y0ZEVWc1pXMWxiblFwTzF4eVhHNTlPeUpkZlE9PSIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBQYXJzaW5nVW5pdCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhcnNlcikge1xyXG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJzaW5nTG9vcExvY2sgPSBmYWxzZTtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLl9zdGF0ZUd1YXJkID0gZnVuY3Rpb24gKHN1c3BlbmQpIHtcclxuICAgIGlmICh0aGlzLnN1c3BlbmRlZCAmJiBzdXNwZW5kKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyc2U1OiBQYXJzZXIgd2FzIGFscmVhZHkgc3VzcGVuZGVkLiBQbGVhc2UsIGNoZWNrIHlvdXIgY29udHJvbCBmbG93IGxvZ2ljLicpO1xyXG5cclxuICAgIGVsc2UgaWYgKCF0aGlzLnN1c3BlbmRlZCAmJiAhc3VzcGVuZClcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcnNlNTogUGFyc2VyIHdhcyBhbHJlYWR5IHJlc3VtZWQuIFBsZWFzZSwgY2hlY2sgeW91ciBjb250cm9sIGZsb3cgbG9naWMuJyk7XHJcblxyXG4gICAgcmV0dXJuIHN1c3BlbmQ7XHJcbn07XHJcblxyXG5QYXJzaW5nVW5pdC5wcm90b3R5cGUuc3VzcGVuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3VzcGVuZGVkID0gdGhpcy5fc3RhdGVHdWFyZCh0cnVlKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLnN1c3BlbmRlZCA9IHRoaXMuX3N0YXRlR3VhcmQoZmFsc2UpO1xyXG5cclxuICAgIC8vTk9URTogZG9uJ3QgZW50ZXIgcGFyc2luZyBsb29wIGlmIGl0IGlzIGxvY2tlZC4gV2l0aG91dCB0aGlzIGxvY2sgX3J1blBhcnNpbmdMb29wKCkgbWF5IGJlIGNhbGxlZFxyXG4gICAgLy93aGlsZSBwYXJzaW5nIGxvb3AgaXMgc3RpbGwgcnVubmluZy4gRS5nLiB3aGVuIHN1c3BlbmQoKSBhbmQgcmVzdW1lKCkgY2FsbGVkIHN5bmNocm9ub3VzbHkuXHJcbiAgICBpZiAoIXRoaXMucGFyc2luZ0xvb3BMb2NrKVxyXG4gICAgICAgIHRoaXMucGFyc2VyLl9ydW5QYXJzaW5nTG9vcCgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLmRvY3VtZW50V3JpdGUgPSBmdW5jdGlvbiAoaHRtbCkge1xyXG4gICAgdGhpcy5wYXJzZXIudG9rZW5pemVyLnByZXByb2Nlc3Nvci53cml0ZShodG1sKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuXHJcblBhcnNpbmdVbml0LnByb3RvdHlwZS5oYW5kbGVTY3JpcHRzID0gZnVuY3Rpb24gKHNjcmlwdEhhbmRsZXIpIHtcclxuICAgIHRoaXMucGFyc2VyLnNjcmlwdEhhbmRsZXIgPSBzY3JpcHRIYW5kbGVyO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG5cclxuUGFyc2luZ1VuaXQucHJvdG90eXBlLmRvbmUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcclxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRGVmYXVsdFRyZWVBZGFwdGVyID0gcmVxdWlyZSgnLi4vdHJlZV9hZGFwdGVycy9kZWZhdWx0JyksXG4gICAgRG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyksXG4gICAgVXRpbHMgPSByZXF1aXJlKCcuLi9jb21tb24vdXRpbHMnKSxcbiAgICBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xuXG4vL0RlZmF1bHQgc2VyaWFsaXplciBvcHRpb25zXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGVuY29kZUh0bWxFbnRpdGllczogdHJ1ZVxufTtcblxuLy9Fc2NhcGluZyByZWdleGVzXG52YXIgQU1QX1JFR0VYID0gLyYvZyxcbiAgICBOQlNQX1JFR0VYID0gL1xcdTAwYTAvZyxcbiAgICBET1VCTEVfUVVPVEVfUkVHRVggPSAvXCIvZyxcbiAgICBMVF9SRUdFWCA9IC88L2csXG4gICAgR1RfUkVHRVggPSAvPi9nO1xuXG4vL0VzY2FwZSBzdHJpbmdcbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyhzdHIsIGF0dHJNb2RlKSB7XG4gICAgc3RyID0gc3RyXG4gICAgICAgIC5yZXBsYWNlKEFNUF9SRUdFWCwgJyZhbXA7JylcbiAgICAgICAgLnJlcGxhY2UoTkJTUF9SRUdFWCwgJyZuYnNwOycpO1xuXG4gICAgaWYgKGF0dHJNb2RlKVxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShET1VCTEVfUVVPVEVfUkVHRVgsICcmcXVvdDsnKTtcblxuICAgIGVsc2Uge1xuICAgICAgICBzdHIgPSBzdHJcbiAgICAgICAgICAgIC5yZXBsYWNlKExUX1JFR0VYLCAnJmx0OycpXG4gICAgICAgICAgICAucmVwbGFjZShHVF9SRUdFWCwgJyZndDsnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufVxuXG5cbi8vRW5xdW90ZSBkb2N0eXBlIElEXG5cblxuXG4vL1NlcmlhbGl6ZXJcbnZhciBTZXJpYWxpemVyID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodHJlZUFkYXB0ZXIsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXIgfHwgRGVmYXVsdFRyZWVBZGFwdGVyO1xuICAgIHRoaXMub3B0aW9ucyA9IFV0aWxzLm1lcmdlT3B0aW9ucyhERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xufTtcblxuXG4vL0FQSVxuU2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB0aGlzLmh0bWwgPSAnJztcbiAgICB0aGlzLl9zZXJpYWxpemVDaGlsZE5vZGVzKG5vZGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHRtbDtcbn07XG5cblxuLy9JbnRlcm5hbHNcblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVDaGlsZE5vZGVzID0gZnVuY3Rpb24gKHBhcmVudE5vZGUpIHtcbiAgICB2YXIgY2hpbGROb2RlcyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2RlcyhwYXJlbnROb2RlKTtcblxuICAgIGlmIChjaGlsZE5vZGVzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBjbkxlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgY25MZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gY2hpbGROb2Rlc1tpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShjdXJyZW50Tm9kZSkpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplRWxlbWVudChjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShjdXJyZW50Tm9kZSkpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplVGV4dE5vZGUoY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyZWVBZGFwdGVyLmlzQ29tbWVudE5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZUNvbW1lbnROb2RlKGN1cnJlbnROb2RlKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50cmVlQWRhcHRlci5pc0RvY3VtZW50VHlwZU5vZGUoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZURvY3VtZW50VHlwZU5vZGUoY3VycmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuU2VyaWFsaXplci5wcm90b3R5cGUuX3NlcmlhbGl6ZUVsZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKSxcbiAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShub2RlKSxcbiAgICAgICAgcXVhbGlmaWVkVG4gPSAobnMgPT09IE5TLkhUTUwgfHwgbnMgPT09IE5TLlNWRyB8fCBucyA9PT0gTlMuTUFUSE1MKSA/IHRuIDogKG5zICsgJzonICsgdG4pO1xuXG4gICAgdGhpcy5odG1sICs9ICc8JyArIHF1YWxpZmllZFRuO1xuICAgIHRoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXMobm9kZSk7XG4gICAgdGhpcy5odG1sICs9ICc+JztcblxuICAgIGlmICh0biAhPT0gJC5BUkVBICYmIHRuICE9PSAkLkJBU0UgJiYgdG4gIT09ICQuQkFTRUZPTlQgJiYgdG4gIT09ICQuQkdTT1VORCAmJiB0biAhPT0gJC5CUiAmJiB0biAhPT0gJC5CUiAmJlxuICAgICAgICB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuRU1CRUQgJiYgdG4gIT09ICQuRlJBTUUgJiYgdG4gIT09ICQuSFIgJiYgdG4gIT09ICQuSU1HICYmIHRuICE9PSAkLklOUFVUICYmXG4gICAgICAgIHRuICE9PSAkLktFWUdFTiAmJiB0biAhPT0gJC5MSU5LICYmIHRuICE9PSAkLk1FTlVJVEVNICYmIHRuICE9PSAkLk1FVEEgJiYgdG4gIT09ICQuUEFSQU0gJiYgdG4gIT09ICQuU09VUkNFICYmXG4gICAgICAgIHRuICE9PSAkLlRSQUNLICYmIHRuICE9PSAkLldCUikge1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5QUkUgfHwgdG4gPT09ICQuVEVYVEFSRUEgfHwgdG4gPT09ICQuTElTVElORykge1xuICAgICAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEZpcnN0Q2hpbGQobm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICYmIHRoaXMudHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShmaXJzdENoaWxkKSkge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQoZmlyc3RDaGlsZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFswXSA9PT0gJ1xcbicpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbCArPSAnXFxuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGlsZE5vZGVzSG9sZGVyID0gdG4gPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyhub2RlKVswXSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTtcblxuICAgICAgICB0aGlzLl9zZXJpYWxpemVDaGlsZE5vZGVzKGNoaWxkTm9kZXNIb2xkZXIpO1xuICAgICAgICB0aGlzLmh0bWwgKz0gJzwvJyArIHF1YWxpZmllZFRuICsgJz4nO1xuICAgIH1cbn07XG5cblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KG5vZGUpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGF0dHJzTGVuZ3RoID0gYXR0cnMubGVuZ3RoOyBpIDwgYXR0cnNMZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXR0ciA9IGF0dHJzW2ldLFxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLm9wdGlvbnMuZW5jb2RlSHRtbEVudGl0aWVzID8gZXNjYXBlU3RyaW5nKGF0dHIudmFsdWUsIHRydWUpIDogYXR0ci52YWx1ZTtcblxuICAgICAgICB0aGlzLmh0bWwgKz0gJyAnO1xuXG4gICAgICAgIGlmICghYXR0ci5uYW1lc3BhY2UpXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gYXR0ci5uYW1lO1xuXG4gICAgICAgIGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTUwpXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3htbDonICsgYXR0ci5uYW1lO1xuXG4gICAgICAgIGVsc2UgaWYgKGF0dHIubmFtZXNwYWNlID09PSBOUy5YTUxOUykge1xuICAgICAgICAgICAgaWYgKGF0dHIubmFtZSAhPT0gJ3htbG5zJylcbiAgICAgICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3htbG5zOic7XG5cbiAgICAgICAgICAgIHRoaXMuaHRtbCArPSBhdHRyLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChhdHRyLm5hbWVzcGFjZSA9PT0gTlMuWExJTkspXG4gICAgICAgICAgICB0aGlzLmh0bWwgKz0gJ3hsaW5rOicgKyBhdHRyLm5hbWU7XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5odG1sICs9IGF0dHIubmFtZXNwYWNlICsgJzonICsgYXR0ci5uYW1lO1xuXG4gICAgICAgIHRoaXMuaHRtbCArPSAnPVwiJyArIHZhbHVlICsgJ1wiJztcbiAgICB9XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHZhciBjb250ZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQobm9kZSksXG4gICAgICAgIHBhcmVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKSxcbiAgICAgICAgcGFyZW50VG4gPSB2b2lkIDA7XG5cbiAgICBpZiAocGFyZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShwYXJlbnQpKVxuICAgICAgICBwYXJlbnRUbiA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwYXJlbnQpO1xuXG4gICAgaWYgKHBhcmVudFRuID09PSAkLlNUWUxFIHx8IHBhcmVudFRuID09PSAkLlNDUklQVCB8fCBwYXJlbnRUbiA9PT0gJC5YTVAgfHwgcGFyZW50VG4gPT09ICQuSUZSQU1FIHx8XG4gICAgICAgIHBhcmVudFRuID09PSAkLk5PRU1CRUQgfHwgcGFyZW50VG4gPT09ICQuTk9GUkFNRVMgfHwgcGFyZW50VG4gPT09ICQuUExBSU5URVhUIHx8IHBhcmVudFRuID09PSAkLk5PU0NSSVBUKSB7XG4gICAgICAgIHRoaXMuaHRtbCArPSBjb250ZW50O1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgdGhpcy5odG1sICs9IHRoaXMub3B0aW9ucy5lbmNvZGVIdG1sRW50aXRpZXMgPyBlc2NhcGVTdHJpbmcoY29udGVudCwgZmFsc2UpIDogY29udGVudDtcbn07XG5cblNlcmlhbGl6ZXIucHJvdG90eXBlLl9zZXJpYWxpemVDb21tZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdGhpcy5odG1sICs9ICc8IS0tJyArIHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q29tbWVudE5vZGVDb250ZW50KG5vZGUpICsgJy0tPic7XG59O1xuXG5TZXJpYWxpemVyLnByb3RvdHlwZS5fc2VyaWFsaXplRG9jdW1lbnRUeXBlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIG5hbWUgPSB0aGlzLnRyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVOYW1lKG5vZGUpLFxuICAgICAgICBwdWJsaWNJZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRUeXBlTm9kZVB1YmxpY0lkKG5vZGUpLFxuICAgICAgICBzeXN0ZW1JZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRUeXBlTm9kZVN5c3RlbUlkKG5vZGUpO1xuXG4gICAgdGhpcy5odG1sICs9ICc8JyArIERvY3R5cGUuc2VyaWFsaXplQ29udGVudChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpICsgJz4nO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcbiAgICBUb2tlbml6ZXJQcm94eSA9IHJlcXVpcmUoJy4vdG9rZW5pemVyX3Byb3h5JyksXG4gICAgVXRpbHMgPSByZXF1aXJlKCcuLi9jb21tb24vdXRpbHMnKTtcblxuLy9EZWZhdWx0IG9wdGlvbnNcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gICAgZGVjb2RlSHRtbEVudGl0aWVzOiB0cnVlLFxuICAgIGxvY2F0aW9uSW5mbzogZmFsc2Vcbn07XG5cbi8vU2tpcHBpbmcgaGFuZGxlclxuZnVuY3Rpb24gc2tpcCgpIHtcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcbn1cblxuLy9TaW1wbGVBcGlQYXJzZXJcbnZhciBTaW1wbGVBcGlQYXJzZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoYW5kbGVycywgb3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IFV0aWxzLm1lcmdlT3B0aW9ucyhERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpO1xuICAgIHRoaXMuaGFuZGxlcnMgPSB7XG4gICAgICAgIGRvY3R5cGU6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLmRvY3R5cGUpLFxuICAgICAgICBzdGFydFRhZzogdGhpcy5fd3JhcEhhbmRsZXIoaGFuZGxlcnMuc3RhcnRUYWcpLFxuICAgICAgICBlbmRUYWc6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLmVuZFRhZyksXG4gICAgICAgIHRleHQ6IHRoaXMuX3dyYXBIYW5kbGVyKGhhbmRsZXJzLnRleHQpLFxuICAgICAgICBjb21tZW50OiB0aGlzLl93cmFwSGFuZGxlcihoYW5kbGVycy5jb21tZW50KVxuICAgIH07XG59O1xuXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl93cmFwSGFuZGxlciA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgdmFyIHBhcnNlciA9IHRoaXM7XG5cbiAgICBoYW5kbGVyID0gaGFuZGxlciB8fCBza2lwO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIGFyZ3MucHVzaChwYXJzZXIuY3VycmVudFRva2VuTG9jYXRpb24pO1xuICAgICAgICAgICAgaGFuZGxlci5hcHBseShoYW5kbGVyLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFuZGxlcjtcbn07XG5cbi8vQVBJXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICB2YXIgdG9rZW4gPSBudWxsO1xuXG4gICAgdGhpcy5fcmVzZXQoaHRtbCk7XG5cbiAgICBkbyB7XG4gICAgICAgIHRva2VuID0gdGhpcy50b2tlbml6ZXJQcm94eS5nZXROZXh0VG9rZW4oKTtcblxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOIHx8XG4gICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4pIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nVGV4dCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5Mb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbkxvY2F0aW9uLmVuZCA9IHRva2VuLmxvY2F0aW9uLmVuZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGV4dCA9ICh0aGlzLnBlbmRpbmdUZXh0IHx8ICcnKSArIHRva2VuLmNoYXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0UGVuZGluZ1RleHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVRva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH0gd2hpbGUgKHRva2VuLnR5cGUgIT09IFRva2VuaXplci5FT0ZfVE9LRU4pO1xufTtcblxuLy9JbnRlcm5hbHNcblNpbXBsZUFwaVBhcnNlci5wcm90b3R5cGUuX2hhbmRsZVRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLmhhbmRsZXJzLnN0YXJ0VGFnKHRva2VuLnRhZ05hbWUsIHRva2VuLmF0dHJzLCB0b2tlbi5zZWxmQ2xvc2luZyk7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTilcbiAgICAgICAgdGhpcy5oYW5kbGVycy5lbmRUYWcodG9rZW4udGFnTmFtZSk7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTilcbiAgICAgICAgdGhpcy5oYW5kbGVycy5jb21tZW50KHRva2VuLmRhdGEpO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU4pXG4gICAgICAgIHRoaXMuaGFuZGxlcnMuZG9jdHlwZSh0b2tlbi5uYW1lLCB0b2tlbi5wdWJsaWNJZCwgdG9rZW4uc3lzdGVtSWQpO1xuXG59O1xuXG5TaW1wbGVBcGlQYXJzZXIucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgdGhpcy50b2tlbml6ZXJQcm94eSA9IG5ldyBUb2tlbml6ZXJQcm94eShodG1sLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMucGVuZGluZ1RleHQgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFRva2VuTG9jYXRpb24gPSBudWxsO1xufTtcblxuU2ltcGxlQXBpUGFyc2VyLnByb3RvdHlwZS5fZW1pdFBlbmRpbmdUZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnBlbmRpbmdUZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMudGV4dCh0aGlzLnBlbmRpbmdUZXh0KTtcbiAgICAgICAgdGhpcy5wZW5kaW5nVGV4dCA9IG51bGw7XG4gICAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4uL3Rva2VuaXphdGlvbi90b2tlbml6ZXInKSxcbiAgICBGb3JlaWduQ29udGVudCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9mb3JlaWduX2NvbnRlbnQnKSxcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcbiAgICBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxuICAgIE5TID0gSFRNTC5OQU1FU1BBQ0VTO1xuXG5cbi8vVG9rZW5pemVyIHByb3h5XG4vL05PVEU6IHRoaXMgcHJveHkgc2ltdWxhdGVzIGFkanVzdG1lbnQgb2YgdGhlIFRva2VuaXplciB3aGljaCBwZXJmb3JtZWQgYnkgc3RhbmRhcmQgcGFyc2VyIGR1cmluZyB0cmVlIGNvbnN0cnVjdGlvbi5cbnZhciBUb2tlbml6ZXJQcm94eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGh0bWwsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoaHRtbCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrID0gW107XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFja1RvcCA9IC0xO1xuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IG51bGw7XG4gICAgdGhpcy5pbkZvcmVpZ25Db250ZW50ID0gZmFsc2U7XG59O1xuXG4vL0FQSVxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdG9rZW4gPSB0aGlzLnRva2VuaXplci5nZXROZXh0VG9rZW4oKTtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLl9oYW5kbGVTdGFydFRhZ1Rva2VuKHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxuICAgICAgICB0aGlzLl9oYW5kbGVFbmRUYWdUb2tlbih0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU4gJiYgdGhpcy5pbkZvcmVpZ25Db250ZW50KSB7XG4gICAgICAgIHRva2VuLnR5cGUgPSBUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOO1xuICAgICAgICB0b2tlbi5jaGFycyA9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbn07XG5cbi8vTmFtZXNwYWNlIHN0YWNrIG11dGF0aW9uc1xuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9lbnRlck5hbWVzcGFjZSA9IGZ1bmN0aW9uIChuYW1lc3BhY2UpIHtcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrVG9wKys7XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFjay5wdXNoKG5hbWVzcGFjZSk7XG5cbiAgICB0aGlzLmluRm9yZWlnbkNvbnRlbnQgPSBuYW1lc3BhY2UgIT09IE5TLkhUTUw7XG4gICAgdGhpcy5jdXJyZW50TmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSB0aGlzLmluRm9yZWlnbkNvbnRlbnQ7XG59O1xuXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLm5hbWVzcGFjZVN0YWNrVG9wLS07XG4gICAgdGhpcy5uYW1lc3BhY2VTdGFjay5wb3AoKTtcblxuICAgIHRoaXMuY3VycmVudE5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlU3RhY2tbdGhpcy5uYW1lc3BhY2VTdGFja1RvcF07XG4gICAgdGhpcy5pbkZvcmVpZ25Db250ZW50ID0gdGhpcy5jdXJyZW50TmFtZXNwYWNlICE9PSBOUy5IVE1MO1xuICAgIHRoaXMudG9rZW5pemVyLmFsbG93Q0RBVEEgPSB0aGlzLmluRm9yZWlnbkNvbnRlbnQ7XG59O1xuXG4vL1Rva2VuIGhhbmRsZXJzXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2Vuc3VyZVRva2VuaXplck1vZGUgPSBmdW5jdGlvbiAodG4pIHtcbiAgICBpZiAodG4gPT09ICQuVEVYVEFSRUEgfHwgdG4gPT09ICQuVElUTEUpXG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuUExBSU5URVhUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVClcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5TQ1JJUFRfREFUQTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLklGUkFNRSB8fCB0biA9PT0gJC5YTVAgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0VNQkVEIHx8IHRuID09PSAkLk5PRlJBTUVTIHx8IHRuID09PSAkLk5PU0NSSVBUKSB7XG4gICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkFXVEVYVDtcbiAgICB9XG59O1xuXG5Ub2tlbml6ZXJQcm94eS5wcm90b3R5cGUuX2hhbmRsZVN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlNWRylcbiAgICAgICAgdGhpcy5fZW50ZXJOYW1lc3BhY2UoTlMuU1ZHKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk1BVEgpXG4gICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLk1BVEhNTCk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xuICAgICAgICAgICAgaWYgKEZvcmVpZ25Db250ZW50LmNhdXNlc0V4aXQodG9rZW4pKVxuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xuXG4gICAgICAgICAgICBlbHNlIGlmIChGb3JlaWduQ29udGVudC5pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHRuLCB0aGlzLmN1cnJlbnROYW1lc3BhY2UpIHx8XG4gICAgICAgICAgICAgICAgICAgICBGb3JlaWduQ29udGVudC5pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHRuLCB0aGlzLmN1cnJlbnROYW1lc3BhY2UsIHRva2VuLmF0dHJzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VudGVyTmFtZXNwYWNlKE5TLkhUTUwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5fZW5zdXJlVG9rZW5pemVyTW9kZSh0bik7XG4gICAgfVxufTtcblxuVG9rZW5pemVyUHJveHkucHJvdG90eXBlLl9oYW5kbGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAoIXRoaXMuaW5Gb3JlaWduQ29udGVudCkge1xuICAgICAgICB2YXIgcHJldmlvdXNOcyA9IHRoaXMubmFtZXNwYWNlU3RhY2tbdGhpcy5uYW1lc3BhY2VTdGFja1RvcCAtIDFdO1xuXG4gICAgICAgIC8vTk9URTogY2hlY2sgZm9yIGV4aXQgZnJvbSBpbnRlZ3JhdGlvbiBwb2ludFxuICAgICAgICBpZiAoRm9yZWlnbkNvbnRlbnQuaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCh0biwgcHJldmlvdXNOcykgfHxcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIHByZXZpb3VzTnMsIHRva2VuLmF0dHJzKSkge1xuICAgICAgICAgICAgdGhpcy5fbGVhdmVDdXJyZW50TmFtZXNwYWNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLkRBVEE7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAoKHRuID09PSAkLlNWRyAmJiB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPT09IE5TLlNWRykgfHxcbiAgICAgICAgICAgICAodG4gPT09ICQuTUFUSCAmJiB0aGlzLmN1cnJlbnROYW1lc3BhY2UgPT09IE5TLk1BVEhNTCkpXG4gICAgICAgIHRoaXMuX2xlYXZlQ3VycmVudE5hbWVzcGFjZSgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbmV4cG9ydHMuYXNzaWduID0gZnVuY3Rpb24gKHRva2VuaXplcikge1xyXG4gICAgLy9OT1RFOiBvYnRhaW4gVG9rZW5pemVyIHByb3RvIHRoaXMgd2F5IHRvIGF2b2lkIG1vZHVsZSBjaXJjdWxhciByZWZlcmVuY2VzXHJcbiAgICB2YXIgdG9rZW5pemVyUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodG9rZW5pemVyKTtcclxuXHJcbiAgICB0b2tlbml6ZXIudG9rZW5TdGFydExvYyA9IC0xO1xyXG5cclxuICAgIC8vTk9URTogYWRkIGxvY2F0aW9uIGluZm8gYnVpbGRlciBtZXRob2RcclxuICAgIHRva2VuaXplci5fYXR0YWNoTG9jYXRpb25JbmZvID0gZnVuY3Rpb24gKHRva2VuKSB7XHJcbiAgICAgICAgdG9rZW4ubG9jYXRpb24gPSB7XHJcbiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnRva2VuU3RhcnRMb2MsXHJcbiAgICAgICAgICAgIGVuZDogLTFcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICAvL05PVEU6IHBhdGNoIHRva2VuIGNyZWF0aW9uIG1ldGhvZHMgYW5kIGF0dGFjaCBsb2NhdGlvbiBvYmplY3RzXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZUZpcnN0Q2gpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlU3RhcnRUYWdUb2tlbi5jYWxsKHRoaXMsIHRhZ05hbWVGaXJzdENoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZUVuZFRhZ1Rva2VuID0gZnVuY3Rpb24gKHRhZ05hbWVGaXJzdENoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZUVuZFRhZ1Rva2VuLmNhbGwodGhpcywgdGFnTmFtZUZpcnN0Q2gpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaExvY2F0aW9uSW5mbyh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIHRva2VuaXplci5fY3JlYXRlQ29tbWVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRva2VuaXplclByb3RvLl9jcmVhdGVDb21tZW50VG9rZW4uY2FsbCh0aGlzKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZURvY3R5cGVUb2tlbiA9IGZ1bmN0aW9uIChkb2N0eXBlTmFtZUZpcnN0Q2gpIHtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fY3JlYXRlRG9jdHlwZVRva2VuLmNhbGwodGhpcywgZG9jdHlwZU5hbWVGaXJzdENoKTtcclxuICAgICAgICB0aGlzLl9hdHRhY2hMb2NhdGlvbkluZm8odGhpcy5jdXJyZW50VG9rZW4pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2NyZWF0ZUNoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2NyZWF0ZUNoYXJhY3RlclRva2VuLmNhbGwodGhpcywgdHlwZSwgY2gpO1xyXG4gICAgICAgIHRoaXMuX2F0dGFjaExvY2F0aW9uSW5mbyh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vTk9URTogcGF0Y2ggdG9rZW4gZW1pc3Npb24gbWV0aG9kcyB0byBkZXRlcm1pbmUgZW5kIGxvY2F0aW9uXHJcbiAgICB0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIHBlbmRpbmcgY2hhcmFjdGVyIHRva2VuIG1ha2UgaXQncyBlbmQgbG9jYXRpb24gZXF1YWwgdG8gdGhlXHJcbiAgICAgICAgLy9jdXJyZW50IHRva2VuJ3Mgc3RhcnQgbG9jYXRpb24uXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbi5lbmQgPSB0aGlzLmN1cnJlbnRUb2tlbi5sb2NhdGlvbi5zdGFydDtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubG9jYXRpb24uZW5kID0gdGhpcy5wcmVwcm9jZXNzb3IucG9zICsgMTtcclxuICAgICAgICB0b2tlbml6ZXJQcm90by5fZW1pdEN1cnJlbnRUb2tlbi5jYWxsKHRoaXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0b2tlbml6ZXIuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGNoYXJhY3RlciB0b2tlbiBhbmQgaXQncyBsb2NhdGlvbiB3YXNuJ3Qgc2V0IGluIHRoZSBfZW1pdEN1cnJlbnRUb2tlbigpLFxyXG4gICAgICAgIC8vdGhlbiBzZXQgaXQncyBsb2NhdGlvbiBhdCB0aGUgY3VycmVudCBwcmVwcm9jZXNzb3IgcG9zaXRpb25cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gJiYgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kID09PSAtMSkge1xyXG4gICAgICAgICAgICAvL05PVEU6IHdlIGRvbid0IG5lZWQgdG8gaW5jcmVtZW50IHByZXByb2Nlc3NvciBwb3NpdGlvbiwgc2luY2UgY2hhcmFjdGVyIHRva2VuXHJcbiAgICAgICAgICAgIC8vZW1pc3Npb24gaXMgYWx3YXlzIGZvcmNlZCBieSB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRva2VuIGhlcmUuXHJcbiAgICAgICAgICAgIC8vU28sIHdlIGFscmVhZHkgaGF2ZSBhZHZhbmNlZCBwb3NpdGlvbi5cclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kID0gdGhpcy5wcmVwcm9jZXNzb3IucG9zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdG9rZW5pemVyUHJvdG8uX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4uY2FsbCh0aGlzKTtcclxuICAgIH07XHJcblxyXG4gICAgLy9OT1RFOiBwYXRjaCBpbml0aWFsIHN0YXRlcyBmb3IgZWFjaCBtb2RlIHRvIG9idGFpbiB0b2tlbiBzdGFydCBwb3NpdGlvblxyXG4gICAgT2JqZWN0LmtleXModG9rZW5pemVyUHJvdG8uTU9ERSlcclxuXHJcbiAgICAgICAgLm1hcChmdW5jdGlvbiAobW9kZU5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRva2VuaXplclByb3RvLk1PREVbbW9kZU5hbWVdO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZSkge1xyXG4gICAgICAgICAgICB0b2tlbml6ZXJbc3RhdGVdID0gZnVuY3Rpb24gKGNwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuU3RhcnRMb2MgPSB0aGlzLnByZXByb2Nlc3Nvci5wb3M7XHJcbiAgICAgICAgICAgICAgICB0b2tlbml6ZXJQcm90b1tzdGF0ZV0uY2FsbCh0aGlzLCBjcCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbn07XHJcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbi8vTk9URTogdGhpcyBmaWxlIGNvbnRhaW5zIGF1dG8gZ2VuZXJhdGVkIHRyaWUgc3RydWN0dXJlIHRoYXQgaXMgdXNlZCBmb3IgbmFtZWQgZW50aXR5IHJlZmVyZW5jZXMgY29uc3VtcHRpb25cclxuLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCN0b2tlbml6aW5nLWNoYXJhY3Rlci1yZWZlcmVuY2VzIGFuZFxyXG4vL2h0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL25hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VzLmh0bWwjbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZXMpXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gICAgMHg0MToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxOTNdfX0sIGM6IFsxOTNdfX19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNThdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxOTRdfX0sIGM6IFsxOTRdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQwXX19fX19LCAweDQ1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTk4XX19LCBjOiBbMTk4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA2OF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTkyXX19LCBjOiBbMTkyXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDcwOiB7bDogezB4Njg6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxM119fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsyNTZdfX19fX19fX19LCAweDREOiB7bDogezB4NTA6IHtsOiB7MHgzQjoge2M6IFszOF19fSwgYzogWzM4XX19fSwgMHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4MzVdfX19fX0sIDB4NkY6IHtsOiB7MHg2Nzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjBdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTIwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4Nzk6IHtsOiB7MHg0Njoge2w6IHsweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODI4OV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTk3XX19LCBjOiBbMTk3XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTY0XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODc4OF19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTk1XX19LCBjOiBbMTk1XX19fX19fX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxOTZdfX0sIGM6IFsxOTZdfX19fX19fSxcclxuICAgIDB4NjE6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjI1XX19LCBjOiBbMjI1XX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjU5XX19fX19fX19fX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbODc2Nl19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbODc2N119fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4NzY2LCA4MTldfX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIyNl19fSwgYzogWzIyNl19fX19fSwgMHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxODBdfX0sIGM6IFsxODBdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDcyXX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMjMwXX19LCBjOiBbMjMwXX19fX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs4Mjg5XX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTRdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyNF19fSwgYzogWzIyNF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzM6IHtsOiB7MHg3OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODUwMV19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg1MDFdfX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NDVdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjU3XX19fX19LCAweDZDOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDgxNV19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMzhdfX0sIGM6IFszOF19fX0sIDB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwODM3XX19fX19fX0sIDB4M0I6IHtjOiBbODc0M119LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4NDRdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg0MF19fX19fX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwODQyXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODczNl19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjBdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzM2XX19fX19LCAweDZEOiB7bDogezB4NzM6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDY2NF19fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDY2NV19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDY2Nl19fX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY2N119fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2OF19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMDY2OV19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDY3MF19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFsxMDY3MV19fX19fSwgMHgzQjoge2M6IFs4NzM3XX19fX19fX0sIDB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MzVdfSwgMHg3Njoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg5NF19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NTNdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODczOF19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzE5N119fX19fSwgMHg3QToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwODRdfX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI2MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDZdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NjNdfX19fX19fX19LCAweDNCOiB7YzogWzg3NzZdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODY0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3NzhdfX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4Nzc5XX19fX19LCAweDZGOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFszOV19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzg3NzZdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc3OF19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsyMjldfX0sIGM6IFsyMjldfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTBdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs0Ml19fX0sIDB4Nzk6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc3Nl19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzgxXX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIyN119fSwgYzogWzIyN119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjI4XX19LCBjOiBbMjI4XX19fX19LCAweDc3OiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1NV19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzY5XX19fX19fX19fX19LFxyXG4gICAgMHg2Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc4MF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDE0XX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NV19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY1XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg5MDldfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5M119fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5NjVdfSwgMHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODk2NV19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTE0MV19LCAweDc0OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTE0Ml19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4NzgwXX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDczXX19fX19LCAweDY0OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIyMl19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NTddfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3NTddfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjcyXX19fX19fX19fX19LCAweDcwOiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzEwMTRdfX19fX19fSwgMHg3Mjoge2w6IHsweDZFOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDNCOiB7YzogWzg0OTJdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NDZdfX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODUwMl19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4ODEyXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5NV19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg5OF19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs5NzExXX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4OTldfX19fX19fSwgMHg2Rjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzUyXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzU0XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNzU4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NzMzXX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYxXX19fX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbOTY1MV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzU2XX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTddfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5Nl19fX19fX19fX19fX19fX0sIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTA5XX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDdBOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDczMV19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY0Ml19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjUyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYyXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NjZdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NjU2XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzkyNTFdfX19fX19fSwgMHg2Qjoge2w6IHsweDMxOiB7bDogezB4MzI6IHtsOiB7MHgzQjoge2M6IFs5NjE4XX19fSwgMHgzNDoge2w6IHsweDNCOiB7YzogWzk2MTddfX19fX0sIDB4MzM6IHtsOiB7MHgzNDoge2w6IHsweDNCOiB7YzogWzk2MTldfX19fX19fSwgMHg2Rjoge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5NjA4XX19fX19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNjEsIDg0MjFdfSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzg4MDEsIDg0MjFdfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NzZdfX19fX19fSwgMHg0RToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk4OV19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0N119fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4NjldfSwgMHg3NDoge2w6IHsweDZGOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODY5XX19fX19fX19fSwgMHg3Nzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MDRdfX19fX19fX19LCAweDc4OiB7bDogezB4NjI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA2OTddfX19fX19fSwgMHg2NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbOTQ4OF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTU3XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk0ODRdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU1NF19fX19fSwgMHg0NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbOTU1OF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTU5XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk1NTVdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU1Nl19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzk0NzJdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzk1MTZdfX19LCAweDQ0OiB7bDogezB4M0I6IHtjOiBbOTU3M119fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5NTI0XX19fSwgMHg1NToge2w6IHsweDNCOiB7YzogWzk1NzZdfX19fX0sIDB4NDg6IHtsOiB7MHgzQjoge2M6IFs5NTUyXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5NTcyXX19fSwgMHg0NDoge2w6IHsweDNCOiB7YzogWzk1NzRdfX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTU3NV19fX0sIDB4NTU6IHtsOiB7MHgzQjoge2M6IFs5NTc3XX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODYzXX19fX19fX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg2Ml19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NjRdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk0OTZdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU2M119fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NDkyXX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NjBdfX19fX0sIDB4NTU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk1NjRdfX19LCAweDRDOiB7bDogezB4M0I6IHtjOiBbOTU2NV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NTYxXX19fSwgMHg1Mjoge2w6IHsweDNCOiB7YzogWzk1NjJdfX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5NDc0XX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs5NTMyXX19fSwgMHg0ODoge2w6IHsweDNCOiB7YzogWzk1NzhdfX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbOTUwOF19fX0sIDB4NEM6IHtsOiB7MHgzQjoge2M6IFs5NTY5XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzk1MDBdfX19LCAweDUyOiB7bDogezB4M0I6IHtjOiBbOTU2Nl19fX19fSwgMHg1Njoge2w6IHsweDNCOiB7YzogWzk1NTNdfSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzk1NzldfX19LCAweDQ4OiB7bDogezB4M0I6IHtjOiBbOTU4MF19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFs5NTcwXX19fSwgMHg0Qzoge2w6IHsweDNCOiB7YzogWzk1NzFdfX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbOTU2N119fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFs5NTY4XX19fX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NV19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzcyOF19fX19fX19LCAweDc2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTY2XX19LCBjOiBbMTY2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTFdfX19fX0sIDB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbODI3MV19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY1XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA2OTNdfX19LCAweDNCOiB7YzogWzkyXX0sIDB4Njg6IHtsOiB7MHg3Mzoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMDE4NF19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODIyNl19LCAweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4MjI2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4Ml19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MjZdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4M119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc4M119fX19fX19fX19fX19LFxyXG4gICAgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDczOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbMTA5ODNdfX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5NjZdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNDFdfX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc1N119fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDZFOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ5Ml19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTE0XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA2OV19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjFdfX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzcyOF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5Ml19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzgyXX19fX19fX19fX19fX0sXHJcbiAgICAweDQzOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI2Ml19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTE0XX0sIDB4Njk6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NDoge2w6IHsweDY5OiB7bDogezB4NjY6IHtsOiB7MHg2Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg0NDoge2w6IHsweDNCOiB7YzogWzg1MTddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ5M119fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNjhdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTk5XX19LCBjOiBbMTk5XX19fX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjY0XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTJdfX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyNjZdfX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxODRdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxODNdfX19fX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTNdfX19fX0sIDB4NDg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2M119fX19fX19LCAweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzVdfX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTddfX19fX19fSwgMHg0RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1NF19fX19fX19fX19fSwgMHg1MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NTNdfX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODU1XX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDc3OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg0OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc1NF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg0Mzoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDc5OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NTE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMjFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMTddfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzU5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg2OF19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODAxXX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1MV19fX19fX19LCAweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTBdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDUwXX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg3NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzIwXX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NDM6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDc3OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NDM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg0OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc1NV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRGOiB7bDogezB4NTA6IHtsOiB7MHg1OToge2w6IHsweDNCOiB7YzogWzE2OV19fSwgYzogWzE2OV19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NjZdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4NDM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MV19fX19fX19LCAweDNCOiB7YzogWzg5MTVdfX19fX19fSxcclxuICAgIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjYzXX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwODIwXX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI1XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI3XX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyM119fX19fX19LCAweDNCOiB7YzogWzg3NDVdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxNl19fX19fX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODc0NSwgNjUwMjRdfX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODI1N119fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbNzExXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODI5XX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI2OV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMzFdfX0sIGM6IFsyMzFdfX19fX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyNjVdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgyOF19LCAweDczOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDgzMl19fX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzI2N119fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTg0XX19LCBjOiBbMTg0XX19fX19LCAweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3NF19fX19fX19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTYyXX0sIDB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE4M119fX19fX19fX19fX0sIGM6IFsxNjJdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5Nl19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk1XX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDAzXX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDAwM119fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjddfX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbNzEwXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg3OTFdfX19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzRdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjM1XX19fX19fX19fX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NTldfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4NThdfX19fX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg2MV19fX19fX19fX0sIDB4NTI6IHtsOiB7MHgzQjoge2M6IFsxNzRdfX19LCAweDUzOiB7bDogezB4M0I6IHtjOiBbOTQxNl19fX19fX19fX19fSwgMHgzQjoge2M6IFs5Njc1XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDY5MV19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzkxXX19fSwgMHg2Njoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NjhdfX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA5OTFdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjkwXX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODI3XX0sIDB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgyN119fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs1OF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4OF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc4OF19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs0NF19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjRdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3MDVdfSwgMHg2Njoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcyOF19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA1XX19fX19fX19fSwgMHg3ODoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NDUwXX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODc3M119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODYxXX19fX19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzUwXX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQ4XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzIwXX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxNjldfSwgMHg3Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ3MV19fX19fX0sIGM6IFsxNjldfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjI5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTAwMDddfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk5Ml19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NTldfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTYxXX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5NjBdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTYyXX19fX19fX19fSwgMHg3NDoge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDNdfX19fX19fX19LCAweDc1OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTUyXX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTQ5XX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MjZdfX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5MjddfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MzBdfSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwNTU3XX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODI0XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODIyXX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgyNl19fX19fX19LCAweDNCOiB7YzogWzg3NDZdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ1XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODIxXX19fX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODc0NiwgNjUwMjRdfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjMxXX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDU1Nl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5MjZdfX19fX19fX19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbODkyN119fX19fX19fX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MTBdfX19fX19fSwgMHg3Nzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkxMV19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTY0XX19LCBjOiBbMTY0XX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjMwXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzMV19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkxMF19fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg5MTFdfX19fX19fX19LCAweDc3OiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1NF19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NTNdfX19fX19fX19LCAweDc5OiB7bDogezB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFs5MDA1XX19fX19fX19fX19fX0sXHJcbiAgICAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg2Nzoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjRdfX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODUwNF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1OTVdfX19fX0sIDB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzgyMDhdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg4NjddfX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NTldfX19fX19fSwgMHg2Mjoge2w6IHsweDZCOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDUxMV19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs3MzNdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyNzFdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3Nl19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjI1XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1MF19fX19fX19LCAweDNCOiB7YzogWzg1MThdfSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA4NzFdfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTc2XX19LCBjOiBbMTc2XX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ4XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjczXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5N119fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5N119fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODY0M119fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQyXX19fX19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTAwXX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODkwMF19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2OToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgzMF19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs5ODMwXX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxNjhdfX19LCAweDY3OiB7bDogezB4NjE6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5ODldfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk0Nl19fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMjQ3XX0sIDB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQ3XX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTAzXX19fX19fX19fX19fX19fX0sIGM6IFsyNDddfX19fX0sIDB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbODkwM119fX19fX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTA2XX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5OTBdfX19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTczXX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszNl19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0OV19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzcyOV19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4Nzg0XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4NV19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODc2MF19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjRdfX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4NjVdfX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5NjZdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTVdfX19fX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjUwXX19fX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODY0M119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2NDJdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYyOiB7bDogezB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTEyXX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4OTkxXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk3Ml19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5OTNdfX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTEwOV19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA3NDJdfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyNzNdfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTQ1XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NjNdfSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NjJdfX19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY5M119fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjA3XX19fX19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2Ml19fX19fX19fX19fX19LCAweDdBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTldfX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzldfX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg2Nzoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjVdfX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjA5XX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTgwXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjcwXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNDRdfX19fX0sIDB4NDQ6IHtsOiB7MHgzQjoge2M6IFs4NTE3XX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2ODoge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTA1MTNdfX19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzExXX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxNl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3MV19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxODBdfX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbNzI5XX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MzNdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2XX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs3MzJdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZEOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbODkwMF19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDY2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ0OiB7bDogezB4M0I6IHtjOiBbODUxOF19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjZdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMjNdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNjhdfSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDEyXX19fX19fX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3ODRdfX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NTFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNjhdfX19LCAweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1OV19fX19fX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTZdfX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYwXX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDk4MF19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMyXX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzM119fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NThdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg3Ml19fX19fX19fX19fX19fX19fSwgMHg1NToge2w6IHsweDcwOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTddfX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY2MV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc3OiB7bDogezB4NkU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MTVdfX19fX19fSwgMHgzQjoge2M6IFs4NTk1XX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjkzXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTldfX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzc4NV19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3Nl19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5MF19fX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTgyXX19fX19fX0sIDB4M0I6IHtjOiBbODYzN119fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkxXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODNdfX19fX19fSwgMHgzQjoge2M6IFs4NjQxXX19fX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE1XX19fX19fX19fX19LCAweDNCOiB7YzogWzg4NjhdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NjddfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyNzJdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyOV19fX19fX19LCAweDVBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzldfX19fX19fX19LFxyXG4gICAgMHg0NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDFdfX0sIGM6IFsyMDFdfX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyODJdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIwMl19fSwgYzogWzIwMl19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNjldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjc4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA3Ml19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjAwXX19LCBjOiBbMjAwXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzEyXX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsyNzRdfX19fX19fSwgMHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTcyM119fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDUzOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg1Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjQzXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0RToge2w6IHsweDQ3OiB7bDogezB4M0I6IHtjOiBbMzMwXX19fX19LCAweDZGOiB7bDogezB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMjgwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNF19fX19fX19LCAweDcwOiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzkxN119fX19fX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4NjldfSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3MF19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg2NTJdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0OTZdfX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwODY3XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkxOV19fX19fSwgMHg1NDoge2w6IHsweDQ4OiB7bDogezB4M0I6IHtjOiBbMjA4XX19LCBjOiBbMjA4XX19fSwgMHg3NToge2w6IHsweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyMDNdfX0sIGM6IFsyMDNdfX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MDddfX19fX19fX19LCAweDcwOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODUxOV19fX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg2NToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzNdfX0sIGM6IFsyMzNdfX19fX19fSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODYyXX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsyODNdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIzNF19fSwgYzogWzIzNF19LCAweDNCOiB7YzogWzg3OTBdfX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4Nzg5XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzExMDFdfX19fX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3MV19fX19fX19LCAweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg1XX19fX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMjc5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NTE5XX19fSwgMHg2Njoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3ODZdfX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5OF19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzEwOTA2XX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzJdfX0sIGM6IFsyMzJdfX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTAyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5MDRdfX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDkwNV19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzkxOTFdfX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg0NjddfX19LCAweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDFdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDkwM119fX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzI3NV19fX19fX19LCAweDcwOiB7bDogezB4NzQ6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzg3MDldfSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDcwOiB7bDogezB4MzE6IHtsOiB7MHgzMzoge2w6IHsweDNCOiB7YzogWzgxOTZdfX19LCAweDM0OiB7bDogezB4M0I6IHtjOiBbODE5N119fX19fSwgMHgzQjoge2M6IFs4MTk1XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzMzMV19fX0sIDB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgxOTRdfX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI4MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTBdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTE3XX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNzIzXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg2NV19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NDldfSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NDldfX19fX19fSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwMTNdfX19fX19fX19LCAweDcxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4NzkwXX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4Nzg5XX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NzBdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2Nzoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDkwMl19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDFdfX19fX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzYxXX19fX19fX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc5OV19fX19fX19LCAweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFs4ODAxXX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDNCOiB7YzogWzEwODcyXX19fX19fX19fX19LCAweDc2OiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNzI1XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjA5XX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc4N119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5NV19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg0XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NzBdfX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUxXX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzI0MF19fSwgYzogWzI0MF19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjM1XX19LCBjOiBbMjM1XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODM2NF19fX19fX19LCAweDc4OiB7bDogezB4NjM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMzXX19fX19LCAweDY5OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MDddfX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NDk2XX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg1MTldfX19fX19fX19fX19fX19fX19fX19fX19fSxcclxuICAgIDB4NjY6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4Nzg2XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOTJdfX19fX0sIDB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3OTJdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzY0MjU5XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1Nl19fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI2MF19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwOTldfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1N119fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIsIDEwNl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTgzN119fX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs2NDI1OF19fX19fX19LCAweDc0OiB7bDogezB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk2NDldfX19fX19fX19LCAweDZFOiB7bDogezB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzQwMl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1MV19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3MDRdfX19fX19fSwgMHg2Qjoge2w6IHsweDNCOiB7YzogWzg5MTZdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzEwOTY5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNzY1XX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzMToge2w6IHsweDMyOiB7bDogezB4M0I6IHtjOiBbMTg5XX19LCBjOiBbMTg5XX0sIDB4MzM6IHtsOiB7MHgzQjoge2M6IFs4NTMxXX19fSwgMHgzNDoge2w6IHsweDNCOiB7YzogWzE4OF19fSwgYzogWzE4OF19LCAweDM1OiB7bDogezB4M0I6IHtjOiBbODUzM119fX0sIDB4MzY6IHtsOiB7MHgzQjoge2M6IFs4NTM3XX19fSwgMHgzODoge2w6IHsweDNCOiB7YzogWzg1MzldfX19fX0sIDB4MzI6IHtsOiB7MHgzMzoge2w6IHsweDNCOiB7YzogWzg1MzJdfX19LCAweDM1OiB7bDogezB4M0I6IHtjOiBbODUzNF19fX19fSwgMHgzMzoge2w6IHsweDM0OiB7bDogezB4M0I6IHtjOiBbMTkwXX19LCBjOiBbMTkwXX0sIDB4MzU6IHtsOiB7MHgzQjoge2M6IFs4NTM1XX19fSwgMHgzODoge2w6IHsweDNCOiB7YzogWzg1NDBdfX19fX0sIDB4MzQ6IHtsOiB7MHgzNToge2w6IHsweDNCOiB7YzogWzg1MzZdfX19fX0sIDB4MzU6IHtsOiB7MHgzNjoge2w6IHsweDNCOiB7YzogWzg1MzhdfX19LCAweDM4OiB7bDogezB4M0I6IHtjOiBbODU0MV19fX19fSwgMHgzNzoge2w6IHsweDM4OiB7bDogezB4M0I6IHtjOiBbODU0Ml19fX19fX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4MjYwXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk5NF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk1XX19fX19fX19fSxcclxuICAgIDB4NDY6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2MF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDczXX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg1Mzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NTM6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTcyNF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDUzOiB7bDogezB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg1Mzoge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjQyXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNV19fX19fSwgMHg3Mjoge2w6IHsweDQxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3MDRdfX19fX19fX19LCAweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDk3XX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5N119fX19fX19fX0sXHJcbiAgICAweDY3OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzUwMV19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTQ3XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs5ODldfX19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA4ODZdfX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI4N119fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI4NV19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3NV19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyODldfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDVdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjNdfX19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwNV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwN119fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc4XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTA5MjFdfX19fX0sIDB4M0I6IHtjOiBbMTA4NzhdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg4MF19LCAweDZGOiB7bDogezB4M0I6IHtjOiBbMTA4ODJdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODg0XX19fX19fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMywgNjUwMjRdfSwgMHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MDBdfX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA3XX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg5Ml19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTAwXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODgxMV19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMV19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg1MDNdfX19fX19fX19LCAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDddfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA5MTddfX19LCAweDNCOiB7YzogWzg4MjNdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODk4XX19fSwgMHg2QToge2w6IHsweDNCOiB7YzogWzEwOTE2XX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODkwXX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDg5MF19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4ODhdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwODg4XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA5XX19fX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA5XX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTM1XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTJdfX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDU4XX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODE5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg5NF19fX0sIDB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg5Nl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Mzoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMTA5MTldfX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDg3NF19fX19fX19LCAweDNCOiB7YzogWzYyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODkxOV19fX19fX19LCAweDZDOiB7bDogezB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2NDVdfX19fX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDg3Nl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzEwODg2XX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYxNl19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTldfX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTIzXX19fX19fX19fSwgMHg3MToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4OTJdfX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyM119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgxOV19fX19fX19fX19LCBjOiBbNjJdfSwgMHg3Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgwOSwgNjUwMjRdfX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA5LCA2NTAyNF19fX19fX19fX0sXHJcbiAgICAweDQ3OiB7bDogezB4NjE6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MTVdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzk4OF19fX19fX19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjg2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyOTBdfX19fX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI4NF19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0M119fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsyODhdfX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc0XX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMV19fX0sIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyN119fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyNl19fX19fX19LCAweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODA1XX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTIzXX19fX19fX19fX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgwN119fX19fX19fX19fX19fX19fX19LCAweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5MTRdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgyM119fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDg3OF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MTldfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTcwXX19fX19fX0sIDB4NTQ6IHtsOiB7MHgzQjoge2M6IFs2Ml19fSwgYzogWzYyXX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODExXX19fX19LFxyXG4gICAgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbNzExXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5NF19fX19fSwgMHg0MToge2w6IHsweDUyOiB7bDogezB4NDQ6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2Nl19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI5Ml19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjBdfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDYyOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NTldfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ2MV19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4N0E6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NEM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NDcyXX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDU5XX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMjk0XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDg6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzgyXX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzgzXX19fX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgyMDJdfX19fX19fX19LCAweDZDOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxODldfX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDU5XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY0OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOThdfX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTY4XX19fX19fX0sIDB4M0I6IHtjOiBbODU5Nl19LCAweDc3OiB7bDogezB4M0I6IHtjOiBbODYyMV19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2MF19fX19fX19LCAweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjNdfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzI5M119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk4MjldfSwgMHg3NToge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5ODI5XX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzgyMzBdfX19fX19fX19LCAweDcyOiB7bDogezB4NjM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg4OV19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTAxXX19fX19LCAweDZCOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTA1MzNdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwNTM0XX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg3MDNdfX19fX19fSwgMHg2RDoge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3NjNdfX19fX19fX19LCAweDZGOiB7bDogezB4NkI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE3XX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE4XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1M119fX19fSwgMHg3Mjoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMTNdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk3XX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODQ2M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsyOTVdfX19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHg2Mjoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzgyNTldfX19fX19fX19LCAweDcwOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODIwOF19fX19fX19fX19fX19LFxyXG4gICAgMHg0OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMDVdfX0sIGM6IFsyMDVdfX19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjA2XX19LCBjOiBbMjA2XX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0OF19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszMDRdfX19fX19fSwgMHg0NToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQ1XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NjVdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIwNF19fSwgYzogWzIwNF19fX19fX19fX0sIDB4NEE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMDZdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjk4XX19fX19LCAweDY3OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDQ5OiB7bDogezB4M0I6IHtjOiBbODUyMF19fX19fX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4NDY1XX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NThdfX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc0OF19LCAweDY1OiB7bDogezB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzQ3XX19fX19fX19fSwgMHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg5OF19fX19fX19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mzoge2w6IHsweDZGOiB7bDogezB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODI5MV19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODI5MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEY6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAyNV19fX19fX19LCAweDZGOiB7bDogezB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzAyXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEyOF19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTIxXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ2NF19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyOTZdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDMwXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIwN119fSwgYzogWzIwN119fX19fX19LFxyXG4gICAgMHg2OToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMzddfX0sIGM6IFsyMzddfX19fX19fX19LCAweDYzOiB7bDogezB4M0I6IHtjOiBbODI5MV19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIzOF19fSwgYzogWzIzOF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODBdfX19fX0sIDB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3N119fX19fSwgMHg3ODoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxNjFdfX0sIGM6IFsxNjFdfX19fX19fSwgMHg2Njoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODY2MF19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDJdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIzNl19fSwgYzogWzIzNl19fX19fX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs4NTIwXX0sIDB4Njk6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2NF19fX19fX19LCAweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzQ5XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Njoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDcxNl19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODQ4OV19fX19fX19fX0sIDB4NkE6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMDddfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMjk5XX19fX19LCAweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDY1XX19fSwgMHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0NjRdfX19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQ2NV19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbMzA1XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg4ODddfX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbNDM3XX19fX19fX19fSwgMHg2RToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ1M119fX19fX19fX0sIDB4M0I6IHtjOiBbODcxMl19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg3MzRdfSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDcxN119fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzA1XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4OTBdfX19fX19fSwgMHgzQjoge2M6IFs4NzQ3XX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0ODRdfX19fX19fX19LCAweDcyOiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg5MF19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA3NzVdfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxMl19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDVdfX19fX0sIDB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzAzXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE1NF19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUzXX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgxMl19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzE5MV19fSwgYzogWzE5MV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk4XX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzEyXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk0OV19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODk1M119fX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTQ4XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4OTQ3XX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODcxMl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4MjkwXX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyOTddfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Qjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTEwXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzIzOV19fSwgYzogWzIzOV19fX19fX19LFxyXG4gICAgMHg0QToge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzA4XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDQ5XX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzddfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTI5XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTczXX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzMl19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZCOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMjhdfX19fX19fX19fX0sXHJcbiAgICAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMDldfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODFdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwM119fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzU2N119fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU1XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTk5XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExMl19fX19fX19fX19fSwgMHg3NToge2w6IHsweDZCOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMDhdfX19fX19fX19fX0sXHJcbiAgICAweDRCOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MjJdfX19fX19fX19LCAweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszMTBdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1MF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDc4XX19fX19LCAweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjFdfX19fX19fSwgMHg0QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM2XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTMwXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc0XX19fX19fX19fSxcclxuICAgIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1NF19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTAwOF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzExXX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODJdfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzEyXX19fX19fX19fX19LCAweDY4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwOTNdfX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE2XX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTU2XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDAwXX19fX19fX19fSxcclxuICAgIDB4NkM6IHtsOiB7MHg0MToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjZdfX19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1Nl19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTIzXX19fX19fX19fX19LCAweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszMTRdfX19fX19fX19LCAweDY1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4Nzk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzEwNjc2XX19fX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NDY2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDYyOiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1NV19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzEwMjE2XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDY0MV19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzEwMjE2XX19fX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwODg1XX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFsxNzFdfX0sIGM6IFsxNzFdfX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODY3Nl19LCAweDY2OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDUyN119fX19fX19LCAweDNCOiB7YzogWzg1OTJdfSwgMHg2Njoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA1MjVdfX19fX0sIDB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg2MTddfX19fX0sIDB4NkM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2MTldfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTUzXX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNjExXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTBdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1MjFdfX19fX19fSwgMHgzQjoge2M6IFsxMDkyM119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA5MjVdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTI1LCA2NTAyNF19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwOF19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDk4XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMjNdfX19LCAweDZCOiB7bDogezB4M0I6IHtjOiBbOTFdfX19fX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2MzVdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjM5XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNjM3XX19fX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxMF19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzMxOF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszMTZdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk2OF19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMjNdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDgzXX19fX19LCAweDY0OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTUwXX19fX19LCAweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMjBdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjJdfX19fX19fX19LCAweDcyOiB7bDogezB4NjQ6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5OV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTcxXX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjZdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDRdfSwgMHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTJdfSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTBdfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODYzN119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2MzZdfX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDddfX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5Nl19LCAweDczOiB7bDogezB4M0I6IHtjOiBbODY0Nl19fX19fX19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcwOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjUxXX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYyMV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwN119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbODkyMl19fX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA0XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODA2XX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NzddfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDkyMF19fX19fSwgMHgzQjoge2M6IFsxMDg3N119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc5XX0sIDB4NkY6IHtsOiB7MHgzQjoge2M6IFsxMDg4MV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4ODNdfX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFs4OTIyLCA2NTAyNF19LCAweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDg5OV19fX19fX19LCAweDczOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA4ODVdfX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTE4XX19fX19fX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDY3OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MjJdfX19fX19fSwgMHg3MToge2w6IHsweDY3OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODkxXX19fX19fX19fX19fX0sIDB4Njc6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODgyMl19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MThdfX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzg4MDZdfSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzEwODkxXX19fX19LCAweDY2OiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDYyMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTcwXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNV19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzg4MjJdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODk3XX19fX19LCAweDQ4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NjM3XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzg2MzZdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNjAyXX19fX19fX19fSwgMHg2Mjoge2w6IHsweDZDOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5NjA0XX19fX19fX19fSwgMHg2QToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTEzXX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQ3XX19fX19fX0sIDB4M0I6IHtjOiBbODgxMF19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5OTBdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjAzXX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzIyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzIwXX19fX19fX19fSwgMHg2Rjoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTEzNl19fX19fX19fX0sIDB4M0I6IHtjOiBbOTEzNl19fX19fX19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDg4OV19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA4ODldfX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwODg3XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDg4N119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODgwOF19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOF19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzNF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIyMF19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODcwMV19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMjE0XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjI5XX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTAyMzZdfX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMwXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MTldfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NjIwXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MjldfX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTddfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk3XX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDRdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzI3XX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTVdfX19fX19fX19LCAweDdBOiB7bDogezB4M0I6IHtjOiBbOTY3NF19LCAweDY1OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTY3NF19fX19fX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMDczMV19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzQwXX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjQzXX19fX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0Nl19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5OTFdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUxXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwNV19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4MjA2XX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4ODk1XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYxOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODI0OV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwMV19fX19fSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg2MjRdfX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODE4XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg5M119fX0sIDB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDg5NV19fX19fX19LCAweDcxOiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs5MV19fX0sIDB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyMTZdfSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMThdfX19fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMzIyXX19fX19fX19fX19LCAweDc0OiB7bDogezB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwOTE4XX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NzNdfX19fX19fSwgMHgzQjoge2M6IFs2MF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MThdfX19fX19fSwgMHg2ODoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5MDddfX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODkwNV19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYxNF19fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc1XX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjY3XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg0XX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NjZdfX19fX0sIDB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2NDZdfX19fX19fX19fSwgYzogWzYwXX0sIDB4NzU6IHtsOiB7MHg3Mjoge2w6IHsweDY0OiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3MF19fX19fX19fX19fSwgMHg3NToge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk4XX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MDgsIDY1MDI0XX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwOCwgNjUwMjRdfX19fX19fX19LFxyXG4gICAgMHg0Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszMTNdfX19fX19fX19LCAweDZEOiB7bDogezB4NjI6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTIzXX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMTAyMThdfX19fX0sIDB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NjZdfX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDZdfX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzE3XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzMxNV19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDUxXX19fX19LCAweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMjE2XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY3Nl19fX19fX19LCAweDNCOiB7YzogWzg1OTJdfSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NDZdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1Nl19fX19fX19fX19fSwgMHg0Mzoge2w6IHsweDY1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzg5NjhdfX19fX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTAyMTRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkzXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODVdfX19fX19fSwgMHgzQjoge2M6IFs4NjQzXX19fX19fX19fX19fX19fX19fX19fSwgMHg0Njoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk3MF19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTZdfX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzRdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYwXX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYxMl19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODY3XX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODZdfX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDcwM119fX19fX19LCAweDNCOiB7YzogWzg4ODJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg4NF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzddfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTkyXX19fX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODRdfX19fX19fSwgMHgzQjoge2M6IFs4NjM5XX19fX19fX19fX19fX19fX19LCAweDU2OiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTc4XX19fX19fX0sIDB4M0I6IHtjOiBbODYzNl19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDczOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDQ3OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODkyMl19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MDZdfX19fX19fX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MjJdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5MTNdfX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA4NzddfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODE4XX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwNzldfX19fX0sIDB4NEE6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTAzM119fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMF19LCAweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjY2XX19fX19fX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzMxOV19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIyOV19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMxXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzEwMjMyXX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzMF19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFsxMDIzM119fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxMzFdfX19fX0sIDB4Nzc6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMV19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDY2XX19fX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODYyNF19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszMjFdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHgzQjoge2M6IFs2MF19fSwgYzogWzYwXX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODEwXX19fX19LFxyXG4gICAgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzE3NV19fSwgYzogWzE3NV19fX0sIDB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzk3OTRdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTAwMTZdfSwgMHg2NToge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDAxNl19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg2MTRdfSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NjE0XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NjE1XX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MTJdfX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NjEzXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NjQ2XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NkY6IHtsOiB7MHg2RDoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxMDc5M119fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg0XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODIxMl19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzYyXX19fX19fX19fSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzM3XX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwNl19fX19fSwgMHg2ODoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODQ4N119fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzE4MV19fSwgYzogWzE4MV19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzQyXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5OTJdfX19fX19fSwgMHgzQjoge2M6IFs4NzM5XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTgzXX19LCBjOiBbMTgzXX19fX19fX0sIDB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODYzXX19fSwgMHgzQjoge2M6IFs4NzIyXX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzYwXX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFsxMDc5NF19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4NjM6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTcxXX19fX19LCAweDY0OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjMwXX19fX19fX0sIDB4NkU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4NzFdfX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNThdfX19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwMl19fX19fSwgMHg3NDoge2w6IHsweDcwOiB7bDogezB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3NjZdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5NTZdfSwgMHg2Qzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODg4XX19fX19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg4OF19fX19fX19fX19fSxcclxuICAgIDB4NEQ6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA1MDFdfX19fX0sIDB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNTJdfX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjg3XX19fX19fX19fX19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDk5XX19fX19fX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODBdfX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHg1MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjNdfX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTMyXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODQ5OV19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTI0XX19fX19LFxyXG4gICAgMHg2RToge2w6IHsweDYxOiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODcxMV19fX19fX19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzI0XX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODczNiwgODQwMl19fX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzg3NzddfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwODY0LCA4MjRdfX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4Nzc5LCA4MjRdfX19fX0sIDB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzMyOV19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3ODoge2w6IHsweDNCOiB7YzogWzg3NzddfX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzk4MzhdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NjldfX19fX19fSwgMHgzQjoge2M6IFs5ODM4XX19fX19fX19fSwgMHg2Mjoge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxNjBdfX0sIGM6IFsxNjBdfX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg3ODIsIDgyNF19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODc4MywgODI0XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODE5XX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszMjhdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzI2XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4Nzc1XX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA4NjEsIDgyNF19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDgxOF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODVdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4MjExXX19fX19fX19fSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA1MzJdfX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk5XX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTldfX19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2M119fX19fX19LCAweDNCOiB7YzogWzg4MDBdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4Nzg0LCA4MjRdfX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg3Njoge2w6IHsweDNCOiB7YzogWzg4MDJdfX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MzZdfX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc3MCwgODI0XX19fX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA4XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NzA4XX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwN119fX19fSwgMHg2Nzoge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbODgwNywgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MTddfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MTddfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDcsIDgyNF19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgyMV19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxNV19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODgxNV19fX19fX19LCAweDQ3OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4OTIxLCA4MjRdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODgxMSwgODQwMl19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbODgxMSwgODI0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjIyXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1NF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTk0XX19fX19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzg3MTVdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg5NTZdfSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzg5NTRdfX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs4NzE1XX19fX19LCAweDZBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTRdfX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2MDJdfX19fX19fSwgMHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUzXX19fX19fX0sIDB4NjQ6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyMjldfX19fX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFs4ODA2LCA4MjRdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODgxNl19LCAweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwMl19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MjJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MTZdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzg4MDYsIDgyNF19fX0sIDB4NzM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTRdfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4ODIwXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODE0XX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzg5MzhdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg5NDBdfX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1M119fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2NTRdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbODkyMCwgODI0XX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzg4MTAsIDg0MDJdfSwgMHg3Njoge2w6IHsweDNCOiB7YzogWzg4MTAsIDgyNF19fX19fX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3NDBdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNTldfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxNzJdfSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODcxM119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5NDksIDgyNF19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbODk1MywgODI0XX19fSwgMHg3Njoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbODcxM119fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFs4OTUxXX19fSwgMHg2Mzoge2w6IHsweDNCOiB7YzogWzg5NTBdfX19fX19fX19LCAweDZFOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4NzE2XX0sIDB4NzY6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzg3MTZdfX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODk1OF19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFs4OTU3XX19fX19fX19fX0sIGM6IFsxNzJdfX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzQyXX19fX19fX19fX19LCAweDNCOiB7YzogWzg3NDJdfSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTEwMDUsIDg0MjFdfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzA2LCA4MjRdfX19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzJdfX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4ODMyXX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODkyOF19fX19fX19LCAweDY1OiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFs4ODMyXX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTI3LCA4MjRdfX19fX19fSwgMHgzQjoge2M6IFsxMDkyNywgODI0XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzEwNTQ3LCA4MjRdfX19LCAweDNCOiB7YzogWzg2MDNdfSwgMHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDUsIDgyNF19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1NV19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDNdfX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4OTM5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTQxXX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODY1NV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4MzNdfSwgMHg2Mzoge2w6IHsweDc1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTI5XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDkyOCwgODI0XX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwM119fX19fSwgMHg2ODoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3NDBdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4NzY5XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzcyXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzcyXX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzQwXX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19LCAweDcxOiB7bDogezB4NzM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTMwXX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTMxXX19fX19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODM2XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk0OSwgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDBdfX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzQsIDg0MDJdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MF19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NDksIDgyNF19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg4MzNdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjgsIDgyNF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODM3XX0sIDB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1MCwgODI0XX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4NDFdfX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzUsIDg0MDJdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTAsIDgyNF19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MjVdfX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDFdfX0sIGM6IFsyNDFdfX19fX19fSwgMHg2Qzoge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODgyNF19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODkzOF19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4OTQwXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MzldfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODk0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4M0I6IHtjOiBbOTU3XX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFszNV19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg0NzBdfX19fX19fSwgMHg3Mzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODE5OV19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MSwgODQwMl19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzZdfX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3N119fX19fX19fX0sIDB4Njc6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MDUsIDg0MDJdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjIsIDg0MDJdfX19fX0sIDB4NDg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwMF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY2OiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzEwNzE4XX19fX19fX19fX19LCAweDZDOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA0OThdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MDQsIDg0MDJdfX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbNjAsIDg0MDJdfSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg0LCA4NDAyXX19fX19fX19fX19LCAweDcyOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA0OTldfX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4ODUsIDg0MDJdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NCwgODQwMl19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzhdfX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3OV19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbMTA1MzFdfX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk4XX0sIDB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OThdfX19fX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2Ml19fX19fX19LCAweDZFOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1MzVdfX19fX19fX19fX19fSxcclxuICAgIDB4NEU6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzIzXX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszMjddfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzI1XX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNTNdfX19fX0sIDB4NjU6IHtsOiB7MHg2Nzoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHg0RDoge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg1Mzoge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODIwM119fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3OToge2w6IHsweDU0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTBdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDRDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTBdfX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgxXX19fX19LCAweDRBOiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwMzRdfX19fX19fSwgMHg2Rjoge2w6IHsweDQyOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4Mjg4XX19fX19fX19fX19LCAweDZFOiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2Qjoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxNjBdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NjldfX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk4OF19LCAweDQzOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg3NToge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MDJdfX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDQzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg4MTNdfX19fX19fX19fX19fSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0Ml19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg0NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTNdfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MDBdfSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc3MCwgODI0XX19fX19fX19fX19fX19fX19fX0sIDB4Nzg6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MDhdfX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTVdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgxN119fX19fX19fX19fSwgMHg0Njoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODA3LCA4MjRdfX19fX19fX19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MTEsIDgyNF19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODI1XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODc4LCA4MjRdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODIxXX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDg6IHtsOiB7MHg3NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQ4OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODc4MiwgODI0XX19fX19fX19fX19fX19fX19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzgzLCA4MjRdfX19fX19fX19fX19fX19fX19fSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDU0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDcwMywgODI0XX19fX19fX0sIDB4M0I6IHtjOiBbODkzOF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTQwXX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MTRdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgxNl19fX19fX19fX19fSwgMHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg4MjRdfX19fX19fX19fX19fX19LCAweDRDOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgxMCwgODI0XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwODc3LCA4MjRdfX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODIwXX19fX19fX19fX19fX19fX19fX0sIDB4NEU6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NDc6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg0Nzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2MToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwOTE0LCA4MjRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NzM6IHtsOiB7MHg0Qzoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTEzLCA4MjRdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MzJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MjcsIDgyNF19fX19fX19fX19fSwgMHg1Mzoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MjhdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDQ1OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODcxNl19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg1NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3MDQsIDgyNF19fX19fX19LCAweDNCOiB7YzogWzg5MzldfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk0MV19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUzOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDUzOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDcsIDgyNF19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4OTMwXX19fX19fX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0OCwgODI0XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg5MzFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODgzNCwgODQwMl19LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODQwXX19fX19fX19fX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODgzM119LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDkyOCwgODI0XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODkyOV19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MzEsIDgyNF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1LCA4NDAyXX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4NDFdfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY5XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzJdfX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc3NV19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc3XX19fX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODc0MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTc3XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIwOV19fSwgYzogWzIwOV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5MjVdfX19fX0sXHJcbiAgICAweDRGOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxMV19fSwgYzogWzIxMV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyMTJdfX0sIGM6IFsyMTJdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU0XX19fX19LCAweDY0OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMzZdfX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszMzhdfX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODJdfX19fX0sIDB4Njc6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxMF19fSwgYzogWzIxMF19fX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszMzJdfX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5MzddfX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTI3XX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTM0XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NDM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjIwXX19fX19fX19fX19fX19fX19fX19fX19LCAweDUxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjE2XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEwODM2XX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NzhdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFsyMTZdfX0sIGM6IFsyMTZdfX19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTNdfX0sIGM6IFsyMTNdfX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDddfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjE0XX19LCBjOiBbMjE0XX19fX19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzgyNTRdfX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5MTgyXX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5MTQwXX19fX19fX19fX19fX19fSwgMHg1MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbOTE4MF19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg2Rjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDNdfX0sIGM6IFsyNDNdfX19fX19fSwgMHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg1OV19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMjQ0XX19LCBjOiBbMjQ0XX0sIDB4M0I6IHtjOiBbODg1OF19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODZdfX19fX0sIDB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODYxXX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszMzddfX19fX19fX19LCAweDY5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDgwOF19fX19fSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg1N119fX19fSwgMHg3Mzoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjg0XX19fX19fX19fX19LCAweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMzM5XX19fX19fX19fSwgMHg2Njoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjg3XX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMDhdfX19fX0sIDB4Njc6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbNzMxXX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQyXX19LCBjOiBbMjQyXX19fX19fX0sIDB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY4OV19fX19fSwgMHg2ODoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjc3XX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs5MzddfX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODc1MF19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYzNF19fX19fX19LCAweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjg2XX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Mzoge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA2ODNdfX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI1NF19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA2ODhdfX19fX0sIDB4NkQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFszMzNdfX19fX19fSwgMHg2NToge2w6IHsweDY3OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NjldfX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbOTU5XX19fX19fX19fSwgMHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjc4XX19fSwgMHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODU0XX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2MF19fX19fX19LCAweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjc5XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNjgxXX19fX19fX0sIDB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg1M119fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjM1XX19fX19fX0sIDB4M0I6IHtjOiBbODc0NF19LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA4NDVdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODUwMF19LCAweDZGOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NTAwXX19fX19fX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzE3MF19fSwgYzogWzE3MF19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbMTg2XX19LCBjOiBbMTg2XX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg4ODZdfX19fX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDgzOF19fX19fSwgMHg3Mzoge2w6IHsweDZDOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4MzldfX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDg0M119fX19fSwgMHg1Mzoge2w6IHsweDNCOiB7YzogWzk0MTZdfX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1MDBdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFsyNDhdfX0sIGM6IFsyNDhdfX19fX19fSwgMHg2Rjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg1Nl19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyNDVdfX0sIGM6IFsyNDVdfX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA2XX19fX19LCAweDNCOiB7YzogWzg4NTVdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjQ2XX19LCBjOiBbMjQ2XX19fX19LCAweDc2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTAyMV19fX19fX19fX19fSxcclxuICAgIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFsxODJdfSwgMHg2Qzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NDFdfX19fX19fX19fSwgYzogWzE4Ml19LCAweDNCOiB7YzogWzg3NDFdfSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDk5NV19fX19fSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzExMDA1XX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODcwNl19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg3XX19fX19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszN119fX19fX19LCAweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzQ2XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODI0MF19fX19fX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODg2OV19fX0sIDB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDZFOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs4MjQxXX19fX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDEwOV19fX19fSwgMHg2ODoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY2XX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX0sIDB4NkQ6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDk5XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NzQyXX19fX19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzk2MF19LCAweDc0OiB7bDogezB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDY2OiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODkxNl19fX19fX19fX19fX19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5ODJdfX19fX0sIDB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzg0NjNdfSwgMHg2ODoge2w6IHsweDNCOiB7YzogWzg0NjJdfX19fX19fSwgMHg2Qjoge2w6IHsweDc2OiB7bDogezB4M0I6IHtjOiBbODQ2M119fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3ODddfX19fX19fX19LCAweDYyOiB7bDogezB4M0I6IHtjOiBbODg2Ml19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA3ODZdfX19fX19fSwgMHgzQjoge2M6IFs0M119LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzI0XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNzg5XX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA4NjZdfX19LCAweDZEOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxNzddfX0sIGM6IFsxNzddfX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNzkwXX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Nzoge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTA3OTFdfX19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzE3N119fX0sIDB4NkY6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc3M119fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjFdfX19fX0sIDB4NzU6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4M0I6IHtjOiBbMTYzXX19LCBjOiBbMTYzXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5MzVdfX19fX0sIDB4M0I6IHtjOiBbODgyNl19LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MjhdfX19fX19fSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzVdfX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODI2XX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODI4XX19fX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjddfX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDkzN119fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTMzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzNl19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgzMF19fX19fX19fX0sIDB4M0I6IHtjOiBbMTA5MjddfX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MzFdfX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyNDJdfSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzNdfX19fX19fX19LCAweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTM3XX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5MzNdfX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg5MzZdfX19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzE5XX19fSwgMHg2Njoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbOTAwNl19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTc4XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDc1OiB7bDogezB4NzI6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg5NzldfX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX0sIDB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg3MzNdfX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzBdfX19fX19fSwgMHg3NToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4ODBdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDA1XX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTY4XX19fX19LCAweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2Mzoge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjAwXX19fX19fX19fX19fX0sXHJcbiAgICAweDUwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDQ6IHtsOiB7MHgzQjoge2M6IFs4NzA2XX19fX19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1NV19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDgzXX19fX19LCAweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzRdfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MjhdfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDREOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxNzddfX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODQ2MF19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODQ3M119fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5MzldfSwgMHg2NToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODI2XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTI3XX19fX19fX19fX19LCAweDUzOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgyOF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MzBdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0M119fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg3NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzE5XX19fX19fX19fSwgMHg3MDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19LCAweDNCOiB7YzogWzg3NTldfX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5NzldfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5MzZdfX19fX19fSxcclxuICAgIDB4NTE6IHtsOiB7MHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg0XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0NzRdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODBdfX19fX19fSwgMHg1NToge2w6IHsweDRGOiB7bDogezB4NTQ6IHtsOiB7MHgzQjoge2M6IFszNF19fSwgYzogWzM0XX19fX19fX0sXHJcbiAgICAweDcxOiB7bDogezB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExMF19fX19fSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc2NF19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE2Ml19fX19fX19LCAweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjc5XX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAwNl19fX19fX19LCAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODQ2MV19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzRdfX19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbNjNdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc5OV19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMzRdfX0sIGM6IFszNF19fX19fX19LFxyXG4gICAgMHg3Mjoge2w6IHsweDQxOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2N119fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1MjRdfX19fX19fX19fX0sIDB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc2NSwgODE3XX19fSwgMHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDFdfX19fX19fX19LCAweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg3MzBdfX19fX19fSwgMHg2NToge2w6IHsweDZEOiB7bDogezB4NzA6IHtsOiB7MHg3NDoge2w6IHsweDc5OiB7bDogezB4NzY6IHtsOiB7MHgzQjoge2M6IFsxMDY3NV19fX19fX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIxN119LCAweDY0OiB7bDogezB4M0I6IHtjOiBbMTA2NDJdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2NjFdfX19LCAweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDIxN119fX19fX19fX0sIDB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbMTg3XX19LCBjOiBbMTg3XX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA2MTNdfX19fX0sIDB4NjI6IHtsOiB7MHgzQjoge2M6IFs4Njc3XX0sIDB4NjY6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNTI4XX19fX19fX0sIDB4NjM6IHtsOiB7MHgzQjoge2M6IFsxMDU0N119fX0sIDB4M0I6IHtjOiBbODU5NF19LCAweDY2OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDUyNl19fX19fSwgMHg2ODoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbODYxOF19fX19fSwgMHg2Qzoge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODYyMF19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA1NjVdfX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA2MTJdfX19fX19fSwgMHg3NDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODYxMV19fX19fSwgMHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDVdfX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNTIyXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzg3NThdfSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzRdfX19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUwOV19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMDk5XX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMjVdfX19LCAweDZCOiB7bDogezB4M0I6IHtjOiBbOTNdfX19fX19fSwgMHg2Qjoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTA2MzZdfX19LCAweDczOiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNjM4XX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzEwNjQwXX19fX19fX19fX19fX0sIDB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxMV19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM0NV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNDNdfX19fX19fSwgMHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODk2OV19fX19fX19LCAweDc1OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFsxMjVdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDg4XX19fX19LCAweDY0OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwNTUxXX19fX19LCAweDZDOiB7bDogezB4NjQ6IHtsOiB7MHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwMV19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjIxXX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjIxXX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODYyN119fX19fX19LCAweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg0NzZdfSwgMHg2OToge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NDc1XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDc2XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDNCOiB7YzogWzg0NzddfX19fX19fSwgMHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTY0NV19fX19fSwgMHg2Nzoge2w6IHsweDNCOiB7YzogWzE3NF19fSwgYzogWzE3NF19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIxXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5NzFdfX19fX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTExXX19fX19LCAweDQ4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTk2XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NjQxXX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzg2NDBdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwNjA0XX19fX19fX19fSwgMHg2Rjoge2w6IHsweDNCOiB7YzogWzk2MV19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTAwOV19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTRdfSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg2MTFdfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODY0MV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg2NDBdfX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDRdfX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODY1Ml19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4NjQ5XX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODYwNV19fX19fX19fX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4OTA4XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbNzMwXX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc4N119fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NDRdfX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjUyXX19fX19fX0sIDB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4MjA3XX19fX19LCAweDZEOiB7bDogezB4NkY6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzkxMzddfX19fX19fX19LCAweDNCOiB7YzogWzkxMzddfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDk5MF19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIyMV19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODcwMl19fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwMjE1XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MzBdfX19fX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjNdfX19LCAweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwNzk4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA4MDVdfX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs0MV19LCAweDY3OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDY0NF19fX19fX19fX0sIDB4NzA6IHtsOiB7MHg2Rjoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NzBdfX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0OV19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzgyNTBdfX19fX19fX19LCAweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDddfX19fX0sIDB4Njg6IHtsOiB7MHgzQjoge2M6IFs4NjI1XX19fSwgMHg3MToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbOTNdfX19LCAweDc1OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4MjE3XX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4MjE3XX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4OTA4XX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg5MDZdfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NjU3XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODg1XX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NTZdfX19LCAweDZDOiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbMTA3MDJdfX19fX19fX19fX19fX19LCAweDc1OiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjAwXX19fX19fX19fX19fX0sIDB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4NDc4XX19fX19LFxyXG4gICAgMHg1Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDBdfX19fX19fX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDIxOV19fX19fSwgMHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODYwOF19LCAweDc0OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDUxOF19fX19fX19fX19fSwgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTEyXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMzQ0XX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM0Ml19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU2XX19fX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODQ3Nl19LCAweDc2OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg0NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTVdfX19fX19fX19fX19fSwgMHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg2NTFdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDYwN119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg0Nzoge2w6IHsweDNCOiB7YzogWzE3NF19fSwgYzogWzE3NF19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0NzZdfX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzkyOV19fX19fSwgMHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0Mjoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDZCOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMjE3XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY3N119fX19fX19LCAweDNCOiB7YzogWzg1OTRdfSwgMHg0Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjQ0XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU4XX19fX19fX19fX19LCAweDQzOiB7bDogezB4NjU6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbODk2OV19fX19fX19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc1OiB7bDogezB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDI6IHtsOiB7MHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDIxNV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3Nzoge2w6IHsweDZFOiB7bDogezB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODldfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4MV19fX19fX19LCAweDNCOiB7YzogWzg2NDJdfX19fX19fX19fX19fX19fX19fX19LCAweDQ2OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTcxXX19fX19fX19fX19LCAweDU0OiB7bDogezB4NjU6IHtsOiB7MHg2NToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjE0XX19fX19fX19fX19LCAweDNCOiB7YzogWzg4NjZdfSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4N119fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNzA0XX19fX19fX0sIDB4M0I6IHtjOiBbODg4M119LCAweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODg1XX19fX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg1NToge2w6IHsweDcwOiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU3NV19fX19fX19fX19fX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1ODhdfX19fX19fX19fX19fX19fX19fSwgMHg1Njoge2w6IHsweDY1OiB7bDogezB4NjM6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU4MF19fX19fX19LCAweDNCOiB7YzogWzg2MzhdfX19fX19fX19fX19fX19fX0sIDB4NTY6IHtsOiB7MHg2NToge2w6IHsweDYzOiB7bDogezB4NzQ6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA1NzldfX19fX19fSwgMHgzQjoge2M6IFs4NjQwXX19fX19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDc3XX19fX19LCAweDc1OiB7bDogezB4NkU6IHtsOiB7MHg2NDoge2w6IHsweDQ5OiB7bDogezB4NkQ6IHtsOiB7MHg3MDoge2w6IHsweDZDOiB7bDogezB4Njk6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA2MDhdfX19fX19fX19fX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjY3XX19fX19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NDc1XX19fX19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbODYyNV19fX19fSwgMHg3NToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg0NDoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDc5OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzEwNzQwXX19fX19fX19fX19fX19fX19fX19fX19LFxyXG4gICAgMHg1Mzoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNDZdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1Ml19fX19fX19fX0sIDB4M0I6IHtjOiBbMTA5NDBdfSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM1MF19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzQ4XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDU3XX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwODZdfX19fX0sIDB4NDg6IHtsOiB7MHg0Mzoge2w6IHsweDQ4OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzEwNjVdfX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY0XX19fX19fX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NzQ6IHtsOiB7MHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTk1XX19fX19fX19fX19fX19fX19fX0sIDB4NEM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5Ml19fX19fX19fX19fX19fX19fX19LCAweDUyOiB7bDogezB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDY4OiB7bDogezB4NzQ6IHtsOiB7MHg0MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4M0I6IHtjOiBbODU5NF19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX19fX19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTMxXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHg2Qzoge2w6IHsweDQzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg3MjhdfX19fX19fX19fX19fX19fX19fX19LCAweDRGOiB7bDogezB4NDY6IHtsOiB7MHg1NDoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDY4XX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDEzOF19fX19fX19LCAweDcxOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MzBdfX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjMzXX0sIDB4NDk6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg1MV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDUzOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDddfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg0OV19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4NDhdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODg1MF19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4NTU6IHtsOiB7MHg2RToge2w6IHsweDY5OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg4NTJdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4Ml19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg5MDJdfX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODkxMl19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTJdfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODgzOF19fX19fX19fX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg4MjddfSwgMHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MjhdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Qzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg3NDoge2w6IHsweDQ1OiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDYxOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFs4ODI5XX19fX19fX19fX19fX19fX19fX19fSwgMHg1NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODgzMV19fX19fX19fX19fX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg1NDoge2w6IHsweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg3MTVdfX19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzg3MjFdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODkxM119LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM1XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg4MzldfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg5MTNdfX19fX19fX19fX19fSxcclxuICAgIDB4NzM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzQ3XX19fX19fX19fX19LCAweDYyOiB7bDogezB4NzE6IHtsOiB7MHg3NToge2w6IHsweDZGOiB7bDogezB4M0I6IHtjOiBbODIxOF19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5MzZdfX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1M119fX19fX19fX0sIDB4M0I6IHtjOiBbODgyN119LCAweDYzOiB7bDogezB4NzU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4MjldfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTI4XX0sIDB4NjQ6IHtsOiB7MHg2OToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMzUxXX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTMyXX19fSwgMHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNDldfX19fX19fSwgMHg2RToge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFsxMDkzOF19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTM0XX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs4OTM3XX19fX19fX19fSwgMHg3MDoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDc3MV19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg4MzFdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwODldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4NjI6IHtsOiB7MHgzQjoge2M6IFs4ODY1XX19fSwgMHgzQjoge2M6IFs4OTAxXX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDg1NF19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTMzXX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODYwMF19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjAwXX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjRdfX19fX19fSwgMHg2Mzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTY3XX19LCBjOiBbMTY3XX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbNTldfX19fX0sIDB4NzM6IHtsOiB7MHg3Nzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUzN119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2RDoge2w6IHsweDY5OiB7bDogezB4NkU6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODcyNl19fX19fX19fX0sIDB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX0sIDB4Nzg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwMDM4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExMl19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5OTRdfX19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs5ODM5XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk3XX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDk2XX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2NDoge2w6IHsweDNCOiB7YzogWzg3MzldfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc0MV19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzE3M119fSwgYzogWzE3M119fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDZEOiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NjNdfSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2Ml19fX0sIDB4NzY6IHtsOiB7MHgzQjoge2M6IFs5NjJdfX19fX19fX19LCAweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwODU4XX19fX19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzcxXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFs4NzcxXX19fX19LCAweDY3OiB7bDogezB4M0I6IHtjOiBbMTA5MTBdfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTEyXX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTA5MDldfSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTExXX19fX19LCAweDZFOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc0XX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA3ODhdfX19fX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTBdfX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg1OTJdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDZDOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NkQ6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg3MjZdfX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njg6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwODAzXX19fX19fX19fSwgMHg2NToge2w6IHsweDcwOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDczOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDcyNF19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NjQ6IHtsOiB7MHgzQjoge2M6IFs4NzM5XX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODk5NV19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5MjJdfSwgMHg2NToge2w6IHsweDNCOiB7YzogWzEwOTI0XX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDkyNCwgNjUwMjRdfX19fX19fX19LCAweDZGOiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAwXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDYyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzkwMjNdfX19fX0sIDB4M0I6IHtjOiBbMTA2OTJdfX19LCAweDNCOiB7YzogWzQ3XX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY0XX19fX19fX0sIDB4NzA6IHtsOiB7MHg2MToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzk4MjRdfSwgMHg3NToge2w6IHsweDY5OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5ODI0XX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NzQxXX19fX19fX0sIDB4NzE6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODUxXX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODUxLCA2NTAyNF19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODUyXX0sIDB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODUyLCA2NTAyNF19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbODg0N119LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0OV19fX0sIDB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg0N119LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODQ5XX19fX19fX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODQ4XX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODUwXX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODQ4XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NTBdfX19fX19fX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjMzXX19fSwgMHg2Njoge2w6IHsweDNCOiB7YzogWzk2NDJdfX19fX19fSwgMHgzQjoge2M6IFs5NjMzXX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NjQyXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk0XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDhdfX19fX0sIDB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZEOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs4NzI2XX19fX19fX19fSwgMHg2RDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg5OTVdfX19fX19fX19LCAweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbODkwMl19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs5NzM0XX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFs5NzMzXX19fX19fX0sIDB4NzI6IHtsOiB7MHg2MToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHg3MDoge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFsxMDEzXX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX19fX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzE3NV19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4MzRdfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0MV19fX19fX19LCAweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NDldfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODgzOF19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQ3XX19fX19fX19fSwgMHg2RDoge2w6IHsweDc1OiB7bDogezB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQ1XX19fX19fX19fSwgMHg2RToge2w6IHsweDQ1OiB7bDogezB4M0I6IHtjOiBbMTA5NTVdfX19LCAweDY1OiB7bDogezB4M0I6IHtjOiBbODg0Ml19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwOTQzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNjE3XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODM0XX0sIDB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4MzhdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTQ5XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0Ml19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTVdfX19fX19fX19fX19fSwgMHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbMTA5NTFdfX19fX0sIDB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY1XX19fSwgMHg3MDoge2w6IHsweDNCOiB7YzogWzEwOTYzXX19fX19fX19fSwgMHg2Mzoge2w6IHsweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDcwOiB7bDogezB4NzI6IHtsOiB7MHg2Rjoge2w6IHsweDc4OiB7bDogezB4M0I6IHtjOiBbMTA5MzZdfX19fX19fX19fX19fSwgMHgzQjoge2M6IFs4ODI3XX0sIDB4NjM6IHtsOiB7MHg3NToge2w6IHsweDcyOiB7bDogezB4NkM6IHtsOiB7MHg3OToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODI5XX19fX19fX19fX19fX19fSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5MjhdfX19fX0sIDB4NkU6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFsxMDkzOF19fX19fX19fX19fX19LCAweDY1OiB7bDogezB4NzE6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzEwOTM0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODkzN119fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODgzMV19fX19fX19fX19fSwgMHg2RDoge2w6IHsweDNCOiB7YzogWzg3MjFdfX19LCAweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs5ODM0XX19fX19LCAweDcwOiB7bDogezB4MzE6IHtsOiB7MHgzQjoge2M6IFsxODVdfX0sIGM6IFsxODVdfSwgMHgzMjoge2w6IHsweDNCOiB7YzogWzE3OF19fSwgYzogWzE3OF19LCAweDMzOiB7bDogezB4M0I6IHtjOiBbMTc5XX19LCBjOiBbMTc5XX0sIDB4M0I6IHtjOiBbODgzNV19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwOTQyXX19fX19LCAweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzEwOTY4XX19fX19fX19fSwgMHg0NToge2w6IHsweDNCOiB7YzogWzEwOTUwXX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg4MzldfSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFsxMDk0OF19fX19fX19fX0sIDB4Njg6IHtsOiB7MHg3Mzoge2w6IHsweDZGOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsxMDE4NV19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NjddfX19fX19fX19LCAweDZDOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA2MTldfX19fX19fX19LCAweDZEOiB7bDogezB4NzU6IHtsOiB7MHg2Qzoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA5NDZdfX19fX19fX19LCAweDZFOiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFsxMDk1Nl19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQzXX19fX19LCAweDcwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbMTA5NDRdfX19fX19fX19LCAweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg4MzVdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODgzOV19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbMTA5NTBdfX19fX19fSwgMHg2RToge2w6IHsweDY1OiB7bDogezB4NzE6IHtsOiB7MHgzQjoge2M6IFs4ODQzXX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk1Nl19fX19fX19fX19fX19LCAweDY5OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFsxMDk1Ml19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA5NjRdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbMTA5NjZdfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4Njg6IHtsOiB7MHg2Qjoge2w6IHsweDNCOiB7YzogWzEwNTM0XX19fX19LCAweDcyOiB7bDogezB4M0I6IHtjOiBbODYwMV19LCAweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjAxXX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjVdfX19fX19fSwgMHg2RToge2w6IHsweDc3OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwNTM4XX19fX19fX19fX19LCAweDdBOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4M0I6IHtjOiBbMjIzXX19LCBjOiBbMjIzXX19fX19fX19fSxcclxuICAgIDB4NTQ6IHtsOiB7MHg2MToge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbOV19fX0sIDB4NzU6IHtsOiB7MHgzQjoge2M6IFs5MzJdfX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1Nl19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNTRdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA1OF19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg3XX19fX19LCAweDY4OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzU2XX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzkyMF19fX19fX19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2Qjoge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Mjg3LCA4MjAyXX19fX19fX19fX19fX19fSwgMHg2RToge2w6IHsweDUzOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4MjAxXX19fX19fX19fX19fX19fX19LCAweDQ4OiB7bDogezB4NEY6IHtsOiB7MHg1Mjoge2w6IHsweDRFOiB7bDogezB4M0I6IHtjOiBbMjIyXX19LCBjOiBbMjIyXX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY0XX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzg3NzFdfX19fX19fX19fX0sIDB4NDY6IHtsOiB7MHg3NToge2w6IHsweDZDOiB7bDogezB4NkM6IHtsOiB7MHg0NToge2w6IHsweDcxOiB7bDogezB4NzU6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODc3M119fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19fX19fX19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTM5XX19fX19fX0sIDB4NTI6IHtsOiB7MHg0MToge2w6IHsweDQ0OiB7bDogezB4NDU6IHtsOiB7MHgzQjoge2M6IFs4NDgyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NDQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODQxMV19fX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODNdfX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszNThdfX19fX19fX19fX0sIDB4NTM6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA2Ml19fX19fSwgMHg0ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM1XX19fX19fX19fX19LFxyXG4gICAgMHg3NDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4OTgyXX19fX19fX19fSwgMHg3NToge2w6IHsweDNCOiB7YzogWzk2NF19fX19fSwgMHg2Mjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFs5MTQwXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM1N119fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFszNTVdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5MF19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NDExXX19fX19fX0sIDB4NjU6IHtsOiB7MHg2Qzoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzg5ODFdfX19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExM119fX19fSwgMHg2ODoge2w6IHsweDY1OiB7bDogezB4NzI6IHtsOiB7MHg2NToge2w6IHsweDM0OiB7bDogezB4M0I6IHtjOiBbODc1Nl19fX0sIDB4NjY6IHtsOiB7MHg2Rjoge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzU2XX19fX19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzk1Ml19LCAweDczOiB7bDogezB4Nzk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzk3N119fX19fX19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbOTc3XX19fX19fX19fSwgMHg2OToge2w6IHsweDYzOiB7bDogezB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzg6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4M0I6IHtjOiBbODc2NF19fX19fX19fX19fSwgMHg2RToge2w6IHsweDczOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4MjAxXX19fX19fX19fSwgMHg2Qjoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4Nzc2XX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzg3NjRdfX19fX19fX19LCAweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzI1NF19fSwgYzogWzI1NF19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbNzMyXX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4MDFdfX19fX0sIDB4M0I6IHtjOiBbODg2NF19fX0sIDB4M0I6IHtjOiBbMjE1XX0sIDB4NjQ6IHtsOiB7MHgzQjoge2M6IFsxMDgwMF19fX19LCBjOiBbMjE1XX19fX19LCAweDZFOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4NzQ5XX19fX19fX0sIDB4NkY6IHtsOiB7MHg2NToge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA1MzZdfX19fX0sIDB4NzA6IHtsOiB7MHg2Mjoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs5MDE0XX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5OTNdfX19fX19fSwgMHgzQjoge2M6IFs4ODY4XX0sIDB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjVdfSwgMHg2Rjoge2w6IHsweDcyOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFsxMDk3MF19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbMTA1MzddfX19fX19fSwgMHg3MDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2RDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODI0NF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NjQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg0ODJdfX19fX19fSwgMHg2OToge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs5NjUzXX0sIDB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc3OiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjYzXX19fX19fX19fSwgMHg2Qzoge2w6IHsweDY1OiB7bDogezB4NjY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NjddfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg4NF19fX19fX19fX19fX19LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc5Nl19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk2NTddfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg4NV19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzk3MDhdfX19fX19fSwgMHg2NToge2w6IHsweDNCOiB7YzogWzg3OTZdfX19LCAweDZEOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDgxMF19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDZDOiB7bDogezB4NzU6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzEwODA5XX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYyOiB7bDogezB4M0I6IHtjOiBbMTA3MDFdfX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDgxMV19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY1OiB7bDogezB4N0E6IHtsOiB7MHg2OToge2w6IHsweDc1OiB7bDogezB4NkQ6IHtsOiB7MHgzQjoge2M6IFs5MTg2XX19fX19fX19fX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMDldfX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5NF19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTE1XX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkI6IHtsOiB7MHgzQjoge2M6IFszNTldfX19fX19fX19fX0sIDB4Nzc6IHtsOiB7MHg2OToge2w6IHsweDc4OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODEyXX19fX19fX0sIDB4NkY6IHtsOiB7MHg2ODoge2w6IHsweDY1OiB7bDogezB4NjE6IHtsOiB7MHg2NDoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDZdfX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MDhdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sXHJcbiAgICAweDU1OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzIxOF19fSwgYzogWzIxOF19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjA3XX0sIDB4NkY6IHtsOiB7MHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU2OV19fX19fX19fX19fX19fX0sIDB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDM4XX19fX19LCAweDY1OiB7bDogezB4NzY6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzM2NF19fX19fX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzIxOV19fSwgYzogWzIxOV19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNTldfX19fX0sIDB4NjQ6IHtsOiB7MHg2Mjoge2w6IHsweDZDOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM2OF19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg4XX19fX19LCAweDY3OiB7bDogezB4NzI6IHtsOiB7MHg2MToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsyMTddfX0sIGM6IFsyMTddfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMzYyXX19fX19fX19fSwgMHg2RToge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDQyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzk1XX19fX19LCAweDcyOiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbOTE4M119fX0sIDB4NkI6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbOTE0MV19fX19fX19fX19fX19fX0sIDB4NTA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjU6IHtsOiB7MHg2RToge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDczOiB7bDogezB4Njk6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzkxODFdfX19fX19fX19fX19fX19fX19fX19fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODg5OV19LCAweDUwOiB7bDogezB4NkM6IHtsOiB7MHg3NToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODg0Nl19fX19fX19fX19fX19fX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM3MF19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDBdfX19fX19fSwgMHg3MDoge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDUxNF19fX19fX19LCAweDNCOiB7YzogWzg1OTNdfSwgMHg0NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjQ1XX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjU3XX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTddfX19fX19fX19fX19fX19fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg2RToge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NjYxXX19fX19fX19fX19fX19fX19fX0sIDB4NDU6IHtsOiB7MHg3MToge2w6IHsweDc1OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY5OiB7bDogezB4NjI6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDNCOiB7YzogWzEwNjA2XX19fX19fX19fX19fX19fX19fX19fX19LCAweDcwOiB7bDogezB4NjU6IHtsOiB7MHg3Mjoge2w6IHsweDRDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OThdfX19fX19fX19fX19fX19fX19fSwgMHg1Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTldfX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDczOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzhdfSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5MzNdfX19fX19fX19fX0sIDB4NTQ6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg2MTNdfX19fX19fX19fX0sIDB4M0I6IHtjOiBbODg2OV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFszNjZdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4NF19fX19fX19LCAweDc0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNjBdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2RDoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbMjIwXX19LCBjOiBbMjIwXX19fX19fX0sXHJcbiAgICAweDc1OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI1MF19fSwgYzogWzI1MF19fX19fX19LCAweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY1N119fX19fX19LCAweDYyOiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTExOF19fX19fSwgMHg2NToge2w6IHsweDc2OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNjVdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFsyNTFdfX0sIGM6IFsyNTFdfX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDkxXX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY0NV19fX19fX19LCAweDYyOiB7bDogezB4NkM6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzY5XX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDYwNl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjIyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExNF19fX19fSwgMHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Njoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjQ5XX19LCBjOiBbMjQ5XX19fX19fX19fSwgMHg0ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDU5NV19fX19fX19LCAweDY4OiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZDOiB7bDogezB4M0I6IHtjOiBbODYzOV19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjM4XX19fX19fX0sIDB4NjI6IHtsOiB7MHg2Qzoge2w6IHsweDZCOiB7bDogezB4M0I6IHtjOiBbOTYwMF19fX19fX19fX0sIDB4NkM6IHtsOiB7MHg2Mzoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzg5ODhdfSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODk4OF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4OTc1XX19fX19fX19fSwgMHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5NzIwXX19fX19fX19fSwgMHg2RDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzM2M119fX19fX19LCAweDZDOiB7bDogezB4M0I6IHtjOiBbMTY4XX19LCBjOiBbMTY4XX19fSwgMHg2Rjoge2w6IHsweDY3OiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM3MV19fX19fX19LCAweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNjZdfX19fX19fSwgMHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHgzQjoge2M6IFs4NTkzXX19fX19fX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDZFOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3Nzoge2w6IHsweDNCOiB7YzogWzg1OTddfX19fX19fX19fX19fX19fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3MDoge2w6IHsweDZGOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHg2Njoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODYzOV19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2OToge2w6IHsweDY3OiB7bDogezB4Njg6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzg2MzhdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFs4ODQ2XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk2NV19LCAweDY4OiB7bDogezB4M0I6IHtjOiBbOTc4XX19fSwgMHg2Qzoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFs5NjVdfX19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4Nzc6IHtsOiB7MHg3Mzoge2w6IHsweDNCOiB7YzogWzg2NDhdfX19fX19fX19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYzOiB7bDogezB4NkY6IHtsOiB7MHg3Mjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbODk4OV19LCAweDY1OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4OTg5XX19fX19fX19fX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzg5NzRdfX19fX19fX19LCAweDY5OiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDNCOiB7YzogWzM2N119fX19fX19LCAweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzk3MjFdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxMF19fX19fX19LCAweDc0OiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODk0NF19fX19fX19LCAweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzYxXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY1M119LCAweDY2OiB7bDogezB4M0I6IHtjOiBbOTY1Ml19fX19fX19fX0sIDB4NzU6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NjQ4XX19fX19fX0sIDB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzI1Ml19fSwgYzogWzI1Ml19fX19fSwgMHg3Nzoge2w6IHsweDYxOiB7bDogezB4NkU6IHtsOiB7MHg2Nzoge2w6IHsweDZDOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDY2M119fX19fX19fX19fX19fX0sXHJcbiAgICAweDc2OiB7bDogezB4NjE6IHtsOiB7MHg2RToge2w6IHsweDY3OiB7bDogezB4NzI6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzEwNjUyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg3Mzoge2w6IHsweDY5OiB7bDogezB4NkM6IHtsOiB7MHg2Rjoge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTAxM119fX19fX19fX19fX19fX0sIDB4NkI6IHtsOiB7MHg2MToge2w6IHsweDcwOiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDNCOiB7YzogWzEwMDhdfX19fX19fX19fX0sIDB4NkU6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFs4NzA5XX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDY4OiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODFdfX19fX0sIDB4Njk6IHtsOiB7MHgzQjoge2M6IFs5ODJdfX19LCAweDcyOiB7bDogezB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDc0OiB7bDogezB4NkY6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19fX19fX19fX0sIDB4NzI6IHtsOiB7MHgzQjoge2M6IFs4NTk3XX0sIDB4Njg6IHtsOiB7MHg2Rjoge2w6IHsweDNCOiB7YzogWzEwMDldfX19fX19fSwgMHg3Mzoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2RDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTYyXX19fX19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NzM6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NkU6IHtsOiB7MHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODg0MiwgNjUwMjRdfSwgMHg3MToge2w6IHsweDNCOiB7YzogWzEwOTU1LCA2NTAyNF19fX19fX19fX19fX19fX19fSwgMHg3MDoge2w6IHsweDczOiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDZFOiB7bDogezB4NjU6IHtsOiB7MHg3MToge2w6IHsweDNCOiB7YzogWzg4NDMsIDY1MDI0XX0sIDB4NzE6IHtsOiB7MHgzQjoge2M6IFsxMDk1NiwgNjUwMjRdfX19fX19fX19fX19fX19fX19fX19LCAweDc0OiB7bDogezB4Njg6IHtsOiB7MHg2NToge2w6IHsweDc0OiB7bDogezB4NjE6IHtsOiB7MHgzQjoge2M6IFs5NzddfX19fX19fX19LCAweDcyOiB7bDogezB4Njk6IHtsOiB7MHg2MToge2w6IHsweDZFOiB7bDogezB4Njc6IHtsOiB7MHg2Qzoge2w6IHsweDY1OiB7bDogezB4NkM6IHtsOiB7MHg2NToge2w6IHsweDY2OiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFs4ODgyXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg2ODoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbODg4M119fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19LCAweDQxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg2NjFdfX19fX19fSwgMHg0Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDk4NF19LCAweDc2OiB7bDogezB4M0I6IHtjOiBbMTA5ODVdfX19fX19fX19LCAweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc0XX19fX19LCAweDY0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg2Nl19fX19fX19fX0sIDB4NDQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODcyXX19fX19fX19fSwgMHg2NToge2w6IHsweDY1OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODg5MV19fX19fX19LCAweDNCOiB7YzogWzg3NDRdfSwgMHg2NToge2w6IHsweDcxOiB7bDogezB4M0I6IHtjOiBbODc5NF19fX19fX19LCAweDZDOiB7bDogezB4NkM6IHtsOiB7MHg2OToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODk0Ml19fX19fX19fX0sIDB4NzI6IHtsOiB7MHg2Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjRdfX19fX19fSwgMHg3NDoge2w6IHsweDNCOiB7YzogWzEyNF19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTVdfX19fX0sIDB4NkM6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4Njk6IHtsOiB7MHgzQjoge2M6IFs4ODgyXX19fX19fX19fSwgMHg2RToge2w6IHsweDczOiB7bDogezB4NzU6IHtsOiB7MHg2Mjoge2w6IHsweDNCOiB7YzogWzg4MzQsIDg0MDJdfX19LCAweDcwOiB7bDogezB4M0I6IHtjOiBbODgzNSwgODQwMl19fX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY3XX19fX19fX0sIDB4NzA6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NzMzXX19fX19fX19fSwgMHg3Mjoge2w6IHsweDc0OiB7bDogezB4NzI6IHtsOiB7MHg2OToge2w6IHsweDNCOiB7YzogWzg4ODNdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxMV19fX19fSwgMHg3NToge2w6IHsweDYyOiB7bDogezB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzEwOTU1LCA2NTAyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQyLCA2NTAyNF19fX19fX19LCAweDcwOiB7bDogezB4NkU6IHtsOiB7MHg0NToge2w6IHsweDNCOiB7YzogWzEwOTU2LCA2NTAyNF19fX0sIDB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODQzLCA2NTAyNF19fX19fX19fX19fSwgMHg3QToge2w6IHsweDY5OiB7bDogezB4Njc6IHtsOiB7MHg3QToge2w6IHsweDYxOiB7bDogezB4Njc6IHtsOiB7MHgzQjoge2M6IFsxMDY1MF19fX19fX19fX19fX19fX0sXHJcbiAgICAweDU2OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA5ODddfX19fX19fSwgMHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0Ml19fX19fSwgMHg2NDoge2w6IHsweDYxOiB7bDogezB4NzM6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg4NzNdfSwgMHg2Qzoge2w6IHsweDNCOiB7YzogWzEwOTgyXX19fX19fX19fX19LCAweDQ0OiB7bDogezB4NjE6IHtsOiB7MHg3Mzoge2w6IHsweDY4OiB7bDogezB4M0I6IHtjOiBbODg3NV19fX19fX19fX0sIDB4NjU6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzg4OTddfX19LCAweDcyOiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODIxNF19fX19fX19LCAweDc0OiB7bDogezB4M0I6IHtjOiBbODIxNF19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg2MToge2w6IHsweDZDOiB7bDogezB4NDI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODczOV19fX19fX19LCAweDRDOiB7bDogezB4Njk6IHtsOiB7MHg2RToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMTI0XX19fX19fX19fSwgMHg1Mzoge2w6IHsweDY1OiB7bDogezB4NzA6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3NDoge2w6IHsweDZGOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMDA3Ml19fX19fX19fX19fX19fX19fX19LCAweDU0OiB7bDogezB4Njk6IHtsOiB7MHg2Qzoge2w6IHsweDY0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4NzY4XX19fX19fX19fX19fX19fX19fX19fSwgMHg3OToge2w6IHsweDU0OiB7bDogezB4Njg6IHtsOiB7MHg2OToge2w6IHsweDZFOiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDJdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDg5XX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE0MV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzExOTk4NV19fX19fX19LCAweDc2OiB7bDogezB4NjQ6IHtsOiB7MHg2MToge2w6IHsweDczOiB7bDogezB4Njg6IHtsOiB7MHgzQjoge2M6IFs4ODc0XX19fX19fX19fX19fX0sXHJcbiAgICAweDU3OiB7bDogezB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNzJdfX19fX19fX19LCAweDY1OiB7bDogezB4NjQ6IHtsOiB7MHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5Nl19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5MF19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNDJdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODZdfX19fX19fX19LFxyXG4gICAgMHg3Nzoge2w6IHsweDYzOiB7bDogezB4Njk6IHtsOiB7MHg3Mjoge2w6IHsweDYzOiB7bDogezB4M0I6IHtjOiBbMzczXX19fX19fX19fSwgMHg2NToge2w6IHsweDY0OiB7bDogezB4NjI6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTA4NDddfX19fX19fSwgMHg2Nzoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODc0M119LCAweDcxOiB7bDogezB4M0I6IHtjOiBbODc5M119fX19fX19fX0sIDB4Njk6IHtsOiB7MHg2NToge2w6IHsweDcyOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NDcyXX19fX19fX19fX19LCAweDY2OiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAxMTZdfX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY4XX19fX19fX0sIDB4NzA6IHtsOiB7MHgzQjoge2M6IFs4NDcyXX19fSwgMHg3Mjoge2w6IHsweDNCOiB7YzogWzg3NjhdfSwgMHg2NToge2w6IHsweDYxOiB7bDogezB4NzQ6IHtsOiB7MHg2ODoge2w6IHsweDNCOiB7YzogWzg3NjhdfX19fX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMDEyXX19fX19fX19fSxcclxuICAgIDB4Nzg6IHtsOiB7MHg2Mzoge2w6IHsweDYxOiB7bDogezB4NzA6IHtsOiB7MHgzQjoge2M6IFs4ODk4XX19fX19LCAweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzk3MTFdfX19fX19fSwgMHg3NToge2w6IHsweDcwOiB7bDogezB4M0I6IHtjOiBbODg5OV19fX19fX19LCAweDY0OiB7bDogezB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY2MV19fX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExN119fX19fSwgMHg2ODoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMxXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzRdfX19fX19fX19LCAweDY5OiB7bDogezB4M0I6IHtjOiBbOTU4XX19fSwgMHg2Qzoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjI5XX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzJdfX19fX19fX19LCAweDZEOiB7bDogezB4NjE6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwMjM2XX19fX19fX0sIDB4NkU6IHtsOiB7MHg2OToge2w6IHsweDczOiB7bDogezB4M0I6IHtjOiBbODk1NV19fX19fX19LCAweDZGOiB7bDogezB4NjQ6IHtsOiB7MHg2Rjoge2w6IHsweDc0OiB7bDogezB4M0I6IHtjOiBbMTA3NTJdfX19fX19fSwgMHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTY5XX19fSwgMHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1M119fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg2OToge2w6IHsweDZEOiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFsxMDc1NF19fX19fX19fX19fSwgMHg3Mjoge2w6IHsweDYxOiB7bDogezB4NzI6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEwMjMwXX19fX19fX0sIDB4NDE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTAyMzNdfX19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxM119fX19fSwgMHg3MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3MDoge2w6IHsweDNCOiB7YzogWzEwNzU4XX19fX19fX19fX19LCAweDc1OiB7bDogezB4NzA6IHtsOiB7MHg2Qzoge2w6IHsweDc1OiB7bDogezB4NzM6IHtsOiB7MHgzQjoge2M6IFsxMDc1Nl19fX19fX19fX0sIDB4NzQ6IHtsOiB7MHg3Mjoge2w6IHsweDY5OiB7bDogezB4M0I6IHtjOiBbOTY1MV19fX19fX19fX0sIDB4NzY6IHtsOiB7MHg2NToge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbODg5N119fX19fX19LCAweDc3OiB7bDogezB4NjU6IHtsOiB7MHg2NDoge2w6IHsweDY3OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFs4ODk2XX19fX19fX19fX19fX0sXHJcbiAgICAweDU4OiB7bDogezB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5MV19fX19fSwgMHg2OToge2w6IHsweDNCOiB7YzogWzkyNl19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQzXX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg3XX19fX19fX19fSxcclxuICAgIDB4NTk6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMjIxXX19LCBjOiBbMjIxXX19fX19fX19fSwgMHg0MToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDcxXX19fX19fX0sIDB4NjM6IHtsOiB7MHg2OToge2w6IHsweDcyOiB7bDogezB4NjM6IHtsOiB7MHgzQjoge2M6IFszNzRdfX19fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzEwNjddfX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDA5Ml19fX19fSwgMHg0OToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDMxXX19fX19fX0sIDB4NkY6IHtsOiB7MHg3MDoge2w6IHsweDY2OiB7bDogezB4M0I6IHtjOiBbMTIwMTQ0XX19fX19fX0sIDB4NzM6IHtsOiB7MHg2Mzoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTE5OTg4XX19fX19fX0sIDB4NTU6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA3MF19fX19fX19LCAweDc1OiB7bDogezB4NkQ6IHtsOiB7MHg2Qzoge2w6IHsweDNCOiB7YzogWzM3Nl19fX19fX19fX0sXHJcbiAgICAweDc5OiB7bDogezB4NjE6IHtsOiB7MHg2Mzoge2w6IHsweDc1OiB7bDogezB4NzQ6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzI1M119fSwgYzogWzI1M119fX19fSwgMHg3OToge2w6IHsweDNCOiB7YzogWzExMDNdfX19fX19fSwgMHg2Mzoge2w6IHsweDY5OiB7bDogezB4NzI6IHtsOiB7MHg2Mzoge2w6IHsweDNCOiB7YzogWzM3NV19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA5OV19fX19fSwgMHg2NToge2w6IHsweDZFOiB7bDogezB4M0I6IHtjOiBbMTY1XX19LCBjOiBbMTY1XX19fSwgMHg2Njoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbMTIwMTE4XX19fX19LCAweDY5OiB7bDogezB4NjM6IHtsOiB7MHg3OToge2w6IHsweDNCOiB7YzogWzExMTFdfX19fX19fSwgMHg2Rjoge2w6IHsweDcwOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFsxMjAxNzBdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMjAwMTRdfX19fX19fSwgMHg3NToge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMTAyXX19fX19LCAweDZEOiB7bDogezB4NkM6IHtsOiB7MHgzQjoge2M6IFsyNTVdfX0sIGM6IFsyNTVdfX19fX19fSxcclxuICAgIDB4NUE6IHtsOiB7MHg2MToge2w6IHsweDYzOiB7bDogezB4NzU6IHtsOiB7MHg3NDoge2w6IHsweDY1OiB7bDogezB4M0I6IHtjOiBbMzc3XX19fX19fX19fX19LCAweDYzOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDZGOiB7bDogezB4NkU6IHtsOiB7MHgzQjoge2M6IFszODFdfX19fX19fX19LCAweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0N119fX19fSwgMHg2NDoge2w6IHsweDZGOiB7bDogezB4NzQ6IHtsOiB7MHgzQjoge2M6IFszNzldfX19fX19fSwgMHg2NToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg1Nzoge2w6IHsweDY5OiB7bDogezB4NjQ6IHtsOiB7MHg3NDoge2w6IHsweDY4OiB7bDogezB4NTM6IHtsOiB7MHg3MDoge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg2NToge2w6IHsweDNCOiB7YzogWzgyMDNdfX19fX19fX19fX19fX19fX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTE4XX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzg0ODhdfX19fX0sIDB4NDg6IHtsOiB7MHg2Mzoge2w6IHsweDc5OiB7bDogezB4M0I6IHtjOiBbMTA0Nl19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzg0ODRdfX19fX19fSwgMHg3Mzoge2w6IHsweDYzOiB7bDogezB4NzI6IHtsOiB7MHgzQjoge2M6IFsxMTk5ODldfX19fX19fX19LFxyXG4gICAgMHg3QToge2w6IHsweDYxOiB7bDogezB4NjM6IHtsOiB7MHg3NToge2w6IHsweDc0OiB7bDogezB4NjU6IHtsOiB7MHgzQjoge2M6IFszNzhdfX19fX19fX19fX0sIDB4NjM6IHtsOiB7MHg2MToge2w6IHsweDcyOiB7bDogezB4NkY6IHtsOiB7MHg2RToge2w6IHsweDNCOiB7YzogWzM4Ml19fX19fX19fX0sIDB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc5XX19fX19LCAweDY0OiB7bDogezB4NkY6IHtsOiB7MHg3NDoge2w6IHsweDNCOiB7YzogWzM4MF19fX19fX19LCAweDY1OiB7bDogezB4NjU6IHtsOiB7MHg3NDoge2w6IHsweDcyOiB7bDogezB4NjY6IHtsOiB7MHgzQjoge2M6IFs4NDg4XX19fX19fX19fSwgMHg3NDoge2w6IHsweDYxOiB7bDogezB4M0I6IHtjOiBbOTUwXX19fX19fX0sIDB4NjY6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDExOV19fX19fSwgMHg2ODoge2w6IHsweDYzOiB7bDogezB4Nzk6IHtsOiB7MHgzQjoge2M6IFsxMDc4XX19fX19fX0sIDB4Njk6IHtsOiB7MHg2Nzoge2w6IHsweDcyOiB7bDogezB4NjE6IHtsOiB7MHg3Mjoge2w6IHsweDcyOiB7bDogezB4M0I6IHtjOiBbODY2OV19fX19fX19fX19fX19LCAweDZGOiB7bDogezB4NzA6IHtsOiB7MHg2Njoge2w6IHsweDNCOiB7YzogWzEyMDE3MV19fX19fX19LCAweDczOiB7bDogezB4NjM6IHtsOiB7MHg3Mjoge2w6IHsweDNCOiB7YzogWzEyMDAxNV19fX19fX19LCAweDc3OiB7bDogezB4NkE6IHtsOiB7MHgzQjoge2M6IFs4MjA1XX19fSwgMHg2RToge2w6IHsweDZBOiB7bDogezB4M0I6IHtjOiBbODIwNF19fX19fX19fX1cclxufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKTtcblxuLy9BbGlhc2VzXG52YXIgJCA9IFVOSUNPREUuQ09ERV9QT0lOVFM7XG5cbi8vVXRpbHNcblxuLy9PUFRJTUlaQVRJT046IHRoZXNlIHV0aWxpdHkgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgbW92ZWQgb3V0IG9mIHRoaXMgbW9kdWxlLiBWOCBDcmFua3NoYWZ0IHdpbGwgbm90IGlubGluZVxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxuLy9BbHdheXMgcGVyZm9ybSBpbmxpbmluZyBjaGVjayBiZWZvcmUgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb25zICgnbm9kZSAtLXRyYWNlLWlubGluaW5nJykuXG5mdW5jdGlvbiBpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSB7XG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCAmJiBjcCA8PSAweERGRkYgfHwgY3AgPiAweDEwRkZGRjtcbn1cblxuZnVuY3Rpb24gaXNTdXJyb2dhdGVQYWlyKGNwMSwgY3AyKSB7XG4gICAgcmV0dXJuIGNwMSA+PSAweEQ4MDAgJiYgY3AxIDw9IDB4REJGRiAmJiBjcDIgPj0gMHhEQzAwICYmIGNwMiA8PSAweERGRkY7XG59XG5cbmZ1bmN0aW9uIGdldFN1cnJvZ2F0ZVBhaXJDb2RlUG9pbnQoY3AxLCBjcDIpIHtcbiAgICByZXR1cm4gKGNwMSAtIDB4RDgwMCkgKiAweDQwMCArIDB4MjQwMCArIGNwMjtcbn1cblxuLy9QcmVwcm9jZXNzb3Jcbi8vTk9URTogSFRNTCBpbnB1dCBwcmVwcm9jZXNzaW5nXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNwcmVwcm9jZXNzaW5nLXRoZS1pbnB1dC1zdHJlYW0pXG52YXIgUHJlcHJvY2Vzc29yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAgIHRoaXMud3JpdGUoaHRtbCk7XG5cbiAgICAvL05PVEU6IG9uZSBsZWFkaW5nIFUrRkVGRiBCWVRFIE9SREVSIE1BUksgY2hhcmFjdGVyIG11c3QgYmUgaWdub3JlZCBpZiBhbnkgYXJlIHByZXNlbnQgaW4gdGhlIGlucHV0IHN0cmVhbS5cbiAgICB0aGlzLnBvcyA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KDApID09PSAkLkJPTSA/IDAgOiAtMTtcblxuICAgIHRoaXMuZ2FwU3RhY2sgPSBbXTtcbiAgICB0aGlzLmxhc3RHYXBQb3MgPSAtMTtcbiAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgaWYgKHRoaXMuaHRtbCkge1xuICAgICAgICB0aGlzLmh0bWwgPSB0aGlzLmh0bWwuc3Vic3RyaW5nKDAsIHRoaXMucG9zICsgMSkgK1xuICAgICAgICAgICAgICAgICAgICBodG1sICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5odG1sLnN1YnN0cmluZyh0aGlzLnBvcyArIDEsIHRoaXMuaHRtbC5sZW5ndGgpO1xuXG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgdGhpcy5odG1sID0gaHRtbDtcblxuXG4gICAgdGhpcy5sYXN0Q2hhclBvcyA9IHRoaXMuaHRtbC5sZW5ndGggLSAxO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnBvcysrO1xuXG4gICAgaWYgKHRoaXMucG9zID4gdGhpcy5sYXN0Q2hhclBvcylcbiAgICAgICAgcmV0dXJuICQuRU9GO1xuXG4gICAgdmFyIGNwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuXG4gICAgLy9OT1RFOiBhbnkgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlcnMgdGhhdCBpbW1lZGlhdGVseSBmb2xsb3cgYSBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVyXG4gICAgLy9tdXN0IGJlIGlnbm9yZWQuXG4gICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lICYmIGNwID09PSAkLkxJTkVfRkVFRCkge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hZGRHYXAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZUFuZFBlZWtDb2RlUG9pbnQoKTtcbiAgICB9XG5cbiAgICAvL05PVEU6IGFsbCBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVycyBtdXN0IGJlIGNvbnZlcnRlZCB0byBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyc1xuICAgIGlmIChjcCA9PT0gJC5DQVJSSUFHRV9SRVRVUk4pIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gJC5MSU5FX0ZFRUQ7XG4gICAgfVxuXG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcblxuICAgIC8vT1BUSU1JWkFUSU9OOiBmaXJzdCBwZXJmb3JtIGNoZWNrIGlmIHRoZSBjb2RlIHBvaW50IGluIHRoZSBhbGxvd2VkIHJhbmdlIHRoYXQgY292ZXJzIG1vc3QgY29tbW9uXG4gICAgLy9IVE1MIGlucHV0IChlLmcuIEFTQ0lJIGNvZGVzKSB0byBhdm9pZCBwZXJmb3JtYW5jZS1jb3N0IG9wZXJhdGlvbnMgZm9yIGhpZ2gtcmFuZ2UgY29kZSBwb2ludHMuXG4gICAgcmV0dXJuIGNwID49IDB4RDgwMCA/IHRoaXMuX3Byb2Nlc3NIaWdoUmFuZ2VDb2RlUG9pbnQoY3ApIDogY3A7XG59O1xuXG5QcmVwcm9jZXNzb3IucHJvdG90eXBlLl9wcm9jZXNzSGlnaFJhbmdlQ29kZVBvaW50ID0gZnVuY3Rpb24gKGNwKSB7XG4gICAgLy9OT1RFOiB0cnkgdG8gcGVlayBhIHN1cnJvZ2F0ZSBwYWlyXG4gICAgaWYgKHRoaXMucG9zICE9PSB0aGlzLmxhc3RDaGFyUG9zKSB7XG4gICAgICAgIHZhciBuZXh0Q3AgPSB0aGlzLmh0bWwuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuXG4gICAgICAgIGlmIChpc1N1cnJvZ2F0ZVBhaXIoY3AsIG5leHRDcCkpIHtcbiAgICAgICAgICAgIC8vTk9URTogd2UgaGF2ZSBhIHN1cnJvZ2F0ZSBwYWlyLiBQZWVrIHBhaXIgY2hhcmFjdGVyIGFuZCByZWNhbGN1bGF0ZSBjb2RlIHBvaW50LlxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIGNwID0gZ2V0U3Vycm9nYXRlUGFpckNvZGVQb2ludChjcCwgbmV4dENwKTtcblxuICAgICAgICAgICAgLy9OT1RFOiBhZGQgZ2FwIHRoYXQgc2hvdWxkIGJlIGF2b2lkZWQgZHVyaW5nIHJldHJlYXRcbiAgICAgICAgICAgIHRoaXMuX2FkZEdhcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzUmVzZXJ2ZWRDb2RlUG9pbnQoY3ApKVxuICAgICAgICBjcCA9ICQuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuXG4gICAgcmV0dXJuIGNwO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5fYWRkR2FwID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZ2FwU3RhY2sucHVzaCh0aGlzLmxhc3RHYXBQb3MpO1xuICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMucG9zO1xufTtcblxuUHJlcHJvY2Vzc29yLnByb3RvdHlwZS5yZXRyZWF0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnBvcyA9PT0gdGhpcy5sYXN0R2FwUG9zKSB7XG4gICAgICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMuZ2FwU3RhY2sucG9wKCk7XG4gICAgICAgIHRoaXMucG9zLS07XG4gICAgfVxuXG4gICAgdGhpcy5wb3MtLTtcbn07XG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgUHJlcHJvY2Vzc29yID0gcmVxdWlyZSgnLi9wcmVwcm9jZXNzb3InKSxcclxuICAgIExvY2F0aW9uSW5mb01peGluID0gcmVxdWlyZSgnLi9sb2NhdGlvbl9pbmZvX21peGluJyksXHJcbiAgICBVTklDT0RFID0gcmVxdWlyZSgnLi4vY29tbW9uL3VuaWNvZGUnKSxcclxuICAgIE5BTUVEX0VOVElUWV9UUklFID0gcmVxdWlyZSgnLi9uYW1lZF9lbnRpdHlfdHJpZScpO1xyXG5cclxuLy9BbGlhc2VzXHJcbnZhciAkID0gVU5JQ09ERS5DT0RFX1BPSU5UUyxcclxuICAgICQkID0gVU5JQ09ERS5DT0RFX1BPSU5UX1NFUVVFTkNFUztcclxuXHJcbi8vUmVwbGFjZW1lbnQgY29kZSBwb2ludHMgZm9yIG51bWVyaWMgZW50aXRpZXNcclxudmFyIE5VTUVSSUNfRU5USVRZX1JFUExBQ0VNRU5UUyA9IHtcclxuICAgIDB4MDA6IDB4RkZGRCwgMHgwRDogMHgwMDBELCAweDgwOiAweDIwQUMsIDB4ODE6IDB4MDA4MSwgMHg4MjogMHgyMDFBLCAweDgzOiAweDAxOTIsIDB4ODQ6IDB4MjAxRSxcclxuICAgIDB4ODU6IDB4MjAyNiwgMHg4NjogMHgyMDIwLCAweDg3OiAweDIwMjEsIDB4ODg6IDB4MDJDNiwgMHg4OTogMHgyMDMwLCAweDhBOiAweDAxNjAsIDB4OEI6IDB4MjAzOSxcclxuICAgIDB4OEM6IDB4MDE1MiwgMHg4RDogMHgwMDhELCAweDhFOiAweDAxN0QsIDB4OEY6IDB4MDA4RiwgMHg5MDogMHgwMDkwLCAweDkxOiAweDIwMTgsIDB4OTI6IDB4MjAxOSxcclxuICAgIDB4OTM6IDB4MjAxQywgMHg5NDogMHgyMDFELCAweDk1OiAweDIwMjIsIDB4OTY6IDB4MjAxMywgMHg5NzogMHgyMDE0LCAweDk4OiAweDAyREMsIDB4OTk6IDB4MjEyMixcclxuICAgIDB4OUE6IDB4MDE2MSwgMHg5QjogMHgyMDNBLCAweDlDOiAweDAxNTMsIDB4OUQ6IDB4MDA5RCwgMHg5RTogMHgwMTdFLCAweDlGOiAweDAxNzhcclxufTtcclxuXHJcbi8vU3RhdGVzXHJcbnZhciBEQVRBX1NUQVRFID0gJ0RBVEFfU1RBVEUnLFxyXG4gICAgQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9EQVRBX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURScsXHJcbiAgICBSQ0RBVEFfU1RBVEUgPSAnUkNEQVRBX1NUQVRFJyxcclxuICAgIENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFID0gJ0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fUkNEQVRBX1NUQVRFJyxcclxuICAgIFJBV1RFWFRfU1RBVEUgPSAnUkFXVEVYVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9TVEFURSA9ICdTQ1JJUFRfREFUQV9TVEFURScsXHJcbiAgICBQTEFJTlRFWFRfU1RBVEUgPSAnUExBSU5URVhUX1NUQVRFJyxcclxuICAgIFRBR19PUEVOX1NUQVRFID0gJ1RBR19PUEVOX1NUQVRFJyxcclxuICAgIEVORF9UQUdfT1BFTl9TVEFURSA9ICdFTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgVEFHX05BTUVfU1RBVEUgPSAnVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1JDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBSQ0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFID0gJ1JDREFUQV9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQ0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFJyxcclxuICAgIFJBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEUgPSAnUkFXVEVYVF9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfT1BFTl9TVEFURScsXHJcbiAgICBSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURSA9ICdSQVdURVhUX0VORF9UQUdfTkFNRV9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURSA9ICdTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURSA9ICdTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURSA9ICdTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEUnLFxyXG4gICAgU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVF9TVEFURSA9ICdTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURScsXHJcbiAgICBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEUgPSAnU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFJyxcclxuICAgIFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFID0gJ1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFJyxcclxuICAgIEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUgPSAnQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUnLFxyXG4gICAgQkVGT1JFX0FUVFJJQlVURV9WQUxVRV9TVEFURSA9ICdCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRF9TVEFURSA9ICdBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEUnLFxyXG4gICAgQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEUgPSAnQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEUnLFxyXG4gICAgQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURSA9ICdBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFJyxcclxuICAgIFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEUgPSAnU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURScsXHJcbiAgICBCT0dVU19DT01NRU5UX1NUQVRFID0gJ0JPR1VTX0NPTU1FTlRfU1RBVEUnLFxyXG4gICAgTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUgPSAnTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9TVEFSVF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX1NUQVRFJyxcclxuICAgIENPTU1FTlRfU1RBUlRfREFTSF9TVEFURSA9ICdDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEUnLFxyXG4gICAgQ09NTUVOVF9TVEFURSA9ICdDT01NRU5UX1NUQVRFJyxcclxuICAgIENPTU1FTlRfRU5EX0RBU0hfU1RBVEUgPSAnQ09NTUVOVF9FTkRfREFTSF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9TVEFURSA9ICdDT01NRU5UX0VORF9TVEFURScsXHJcbiAgICBDT01NRU5UX0VORF9CQU5HX1NUQVRFID0gJ0NPTU1FTlRfRU5EX0JBTkdfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TVEFURSA9ICdET0NUWVBFX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX05BTUVfU1RBVEUgPSAnQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURScsXHJcbiAgICBET0NUWVBFX05BTUVfU1RBVEUgPSAnRE9DVFlQRV9OQU1FX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfTkFNRV9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX05BTUVfU1RBVEUnLFxyXG4gICAgQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRF9TVEFURSA9ICdBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFJyxcclxuICAgIEJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFID0gJ0JFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFJyxcclxuICAgIERPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURSA9ICdET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFID0gJ0JFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU19TVEFURScsXHJcbiAgICBBRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEX1NUQVRFID0gJ0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEUnLFxyXG4gICAgQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUgPSAnQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUnLFxyXG4gICAgRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFID0gJ0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURScsXHJcbiAgICBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEUgPSAnRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFJyxcclxuICAgIEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEUgPSAnQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURScsXHJcbiAgICBCT0dVU19ET0NUWVBFX1NUQVRFID0gJ0JPR1VTX0RPQ1RZUEVfU1RBVEUnLFxyXG4gICAgQ0RBVEFfU0VDVElPTl9TVEFURSA9ICdDREFUQV9TRUNUSU9OX1NUQVRFJztcclxuXHJcbi8vVXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIG1vdmVkIG91dCBvZiB0aGlzIG1vZHVsZS4gVjggQ3JhbmtzaGFmdCB3aWxsIG5vdCBpbmxpbmVcclxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxyXG4vL0Fsd2F5cyBwZXJmb3JtIGlubGluaW5nIGNoZWNrIGJlZm9yZSBtb2RpZnlpbmcgdGhpcyBmdW5jdGlvbnMgKCdub2RlIC0tdHJhY2UtaW5saW5pbmcnKS5cclxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPT09ICQuU1BBQ0UgfHwgY3AgPT09ICQuTElORV9GRUVEIHx8IGNwID09PSAkLlRBQlVMQVRJT04gfHwgY3AgPT09ICQuRk9STV9GRUVEO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzY2lpRGlnaXQoY3ApIHtcclxuICAgIHJldHVybiBjcCA+PSAkLkRJR0lUXzAgJiYgY3AgPD0gJC5ESUdJVF85O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FzY2lpVXBwZXIoY3ApIHtcclxuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX0NBUElUQUxfQSAmJiBjcCA8PSAkLkxBVElOX0NBUElUQUxfWjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaUxvd2VyKGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gJC5MQVRJTl9TTUFMTF9BICYmIGNwIDw9ICQuTEFUSU5fU01BTExfWjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBc2NpaUFscGhhTnVtZXJpYyhjcCkge1xyXG4gICAgcmV0dXJuIGlzQXNjaWlEaWdpdChjcCkgfHwgaXNBc2NpaVVwcGVyKGNwKSB8fCBpc0FzY2lpTG93ZXIoY3ApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RpZ2l0KGNwLCBpc0hleCkge1xyXG4gICAgcmV0dXJuIGlzQXNjaWlEaWdpdChjcCkgfHwgKGlzSGV4ICYmICgoY3AgPj0gJC5MQVRJTl9DQVBJVEFMX0EgJiYgY3AgPD0gJC5MQVRJTl9DQVBJVEFMX0YpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcCA+PSAkLkxBVElOX1NNQUxMX0EgJiYgY3AgPD0gJC5MQVRJTl9TTUFMTF9GKSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Jlc2VydmVkQ29kZVBvaW50KGNwKSB7XHJcbiAgICByZXR1cm4gY3AgPj0gMHhEODAwICYmIGNwIDw9IDB4REZGRiB8fCBjcCA+IDB4MTBGRkZGO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApIHtcclxuICAgIHJldHVybiBjcCArIDB4MDAyMDtcclxufVxyXG5cclxuLy9OT1RFOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCkgZnVuY3Rpb24gY2FuIGhhbmRsZSBvbmx5IGNoYXJhY3RlcnMgZnJvbSBCTVAgc3Vic2V0LlxyXG4vL1NvLCB3ZSBuZWVkIHRvIHdvcmthcm91bmQgdGhpcyBtYW51YWxseS5cclxuLy8oc2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9mcm9tQ2hhckNvZGUjR2V0dGluZ19pdF90b193b3JrX3dpdGhfaGlnaGVyX3ZhbHVlcylcclxuZnVuY3Rpb24gdG9DaGFyKGNwKSB7XHJcbiAgICBpZiAoY3AgPD0gMHhGRkZGKVxyXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKTtcclxuXHJcbiAgICBjcCAtPSAweDEwMDAwO1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3AgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApICsgU3RyaW5nLmZyb21DaGFyQ29kZSgweERDMDAgfCBjcCAmIDB4M0ZGKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdG9Bc2NpaUxvd2VyQ2hhcihjcCkge1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbn1cclxuXHJcbi8vVG9rZW5pemVyXHJcbnZhciBUb2tlbml6ZXIgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChodG1sLCBvcHRpb25zKSB7XHJcbiAgICB0aGlzLmRpc2FibGVFbnRpdGllc0RlY29kaW5nID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IgPSBuZXcgUHJlcHJvY2Vzc29yKGh0bWwpO1xyXG5cclxuICAgIHRoaXMudG9rZW5RdWV1ZSA9IFtdO1xyXG5cclxuICAgIHRoaXMuYWxsb3dDREFUQSA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgdGhpcy5yZXR1cm5TdGF0ZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuY29uc3VtcHRpb25Qb3MgPSAwO1xyXG5cclxuICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuICAgIHRoaXMubGFzdFN0YXJ0VGFnTmFtZSA9ICcnO1xyXG5cclxuICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudFRva2VuID0gbnVsbDtcclxuICAgIHRoaXMuY3VycmVudEF0dHIgPSBudWxsO1xyXG5cclxuICAgIGlmIChvcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlRW50aXRpZXNEZWNvZGluZyA9ICFvcHRpb25zLmRlY29kZUh0bWxFbnRpdGllcztcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMubG9jYXRpb25JbmZvKVxyXG4gICAgICAgICAgICBMb2NhdGlvbkluZm9NaXhpbi5hc3NpZ24odGhpcyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL1Rva2VuIHR5cGVzXHJcblRva2VuaXplci5DSEFSQUNURVJfVE9LRU4gPSAnQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOID0gJ05VTExfQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOID0gJ1dISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOJztcclxuVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiA9ICdTVEFSVF9UQUdfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRU5EX1RBR19UT0tFTiA9ICdFTkRfVEFHX1RPS0VOJztcclxuVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4gPSAnQ09NTUVOVF9UT0tFTic7XHJcblRva2VuaXplci5ET0NUWVBFX1RPS0VOID0gJ0RPQ1RZUEVfVE9LRU4nO1xyXG5Ub2tlbml6ZXIuRU9GX1RPS0VOID0gJ0VPRl9UT0tFTic7XHJcblxyXG4vL1Rva2VuaXplciBpbml0aWFsIHN0YXRlcyBmb3IgZGlmZmVyZW50IG1vZGVzXHJcblRva2VuaXplci5NT0RFID0gVG9rZW5pemVyLnByb3RvdHlwZS5NT0RFID0ge1xyXG4gICAgREFUQTogREFUQV9TVEFURSxcclxuICAgIFJDREFUQTogUkNEQVRBX1NUQVRFLFxyXG4gICAgUkFXVEVYVDogUkFXVEVYVF9TVEFURSxcclxuICAgIFNDUklQVF9EQVRBOiBTQ1JJUFRfREFUQV9TVEFURSxcclxuICAgIFBMQUlOVEVYVDogUExBSU5URVhUX1NUQVRFXHJcbn07XHJcblxyXG4vL1N0YXRpY1xyXG5Ub2tlbml6ZXIuZ2V0VG9rZW5BdHRyID0gZnVuY3Rpb24gKHRva2VuLCBhdHRyTmFtZSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRva2VuLmF0dHJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgaWYgKHRva2VuLmF0dHJzW2ldLm5hbWUgPT09IGF0dHJOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdG9rZW4uYXR0cnNbaV0udmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG4vL0dldCB0b2tlblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICghdGhpcy50b2tlblF1ZXVlLmxlbmd0aClcclxuICAgICAgICB0aGlzW3RoaXMuc3RhdGVdKHRoaXMuX2NvbnN1bWUoKSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudG9rZW5RdWV1ZS5zaGlmdCgpO1xyXG59O1xyXG5cclxuLy9Db25zdW1wdGlvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jb25zdW1lID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jb25zdW1wdGlvblBvcysrO1xyXG4gICAgcmV0dXJuIHRoaXMucHJlcHJvY2Vzc29yLmFkdmFuY2VBbmRQZWVrQ29kZVBvaW50KCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl91bmNvbnN1bWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmNvbnN1bXB0aW9uUG9zLS07XHJcbiAgICB0aGlzLnByZXByb2Nlc3Nvci5yZXRyZWF0KCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl91bmNvbnN1bWVTZXZlcmFsID0gZnVuY3Rpb24gKGNvdW50KSB7XHJcbiAgICB3aGlsZSAoY291bnQtLSlcclxuICAgICAgICB0aGlzLl91bmNvbnN1bWUoKTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX3JlY29uc3VtZUluU3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIHRoaXMuX3VuY29uc3VtZSgpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoID0gZnVuY3Rpb24gKHBhdHRlcm4sIHN0YXJ0Q3AsIGNhc2VTZW5zaXRpdmUpIHtcclxuICAgIHZhciByb2xsYmFja1BvcyA9IHRoaXMuY29uc3VtcHRpb25Qb3MsXHJcbiAgICAgICAgaXNNYXRjaCA9IHRydWUsXHJcbiAgICAgICAgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm4ubGVuZ3RoLFxyXG4gICAgICAgIHBhdHRlcm5Qb3MgPSAwLFxyXG4gICAgICAgIGNwID0gc3RhcnRDcCxcclxuICAgICAgICBwYXR0ZXJuQ3AgPSB2b2lkIDA7XHJcblxyXG4gICAgZm9yICg7IHBhdHRlcm5Qb3MgPCBwYXR0ZXJuTGVuZ3RoOyBwYXR0ZXJuUG9zKyspIHtcclxuICAgICAgICBpZiAocGF0dGVyblBvcyA+IDApXHJcbiAgICAgICAgICAgIGNwID0gdGhpcy5fY29uc3VtZSgpO1xyXG5cclxuICAgICAgICBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYXR0ZXJuQ3AgPSBwYXR0ZXJuW3BhdHRlcm5Qb3NdO1xyXG5cclxuICAgICAgICBpZiAoY3AgIT09IHBhdHRlcm5DcCAmJiAoY2FzZVNlbnNpdGl2ZSB8fCBjcCAhPT0gdG9Bc2NpaUxvd2VyQ29kZVBvaW50KHBhdHRlcm5DcCkpKSB7XHJcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNNYXRjaClcclxuICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKHRoaXMuY29uc3VtcHRpb25Qb3MgLSByb2xsYmFja1Bvcyk7XHJcblxyXG4gICAgcmV0dXJuIGlzTWF0Y2g7XHJcbn07XHJcblxyXG4vL0xvb2thaGVhZFxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9sb29rYWhlYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY3AgPSB0aGlzLnByZXByb2Nlc3Nvci5hZHZhbmNlQW5kUGVla0NvZGVQb2ludCgpO1xyXG4gICAgdGhpcy5wcmVwcm9jZXNzb3IucmV0cmVhdCgpO1xyXG5cclxuICAgIHJldHVybiBjcDtcclxufTtcclxuXHJcbi8vVGVtcCBidWZmZXJcclxuVG9rZW5pemVyLnByb3RvdHlwZS5pc1RlbXBCdWZmZXJFcXVhbFRvU2NyaXB0U3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMudGVtcEJ1ZmYubGVuZ3RoICE9PSAkJC5TQ1JJUFRfU1RSSU5HLmxlbmd0aClcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnRlbXBCdWZmLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcEJ1ZmZbaV0gIT09ICQkLlNDUklQVF9TVFJJTkdbaV0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbi8vVG9rZW4gY3JlYXRpb25cclxuVG9rZW5pemVyLnByb3RvdHlwZS5idWlsZFN0YXJ0VGFnVG9rZW4gPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgc2VsZkNsb3Npbmc6IGZhbHNlLFxyXG4gICAgICAgIGF0dHJzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuYnVpbGRFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IFRva2VuaXplci5FTkRfVEFHX1RPS0VOLFxyXG4gICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgaWdub3JlZDogZmFsc2UsXHJcbiAgICAgICAgYXR0cnM6IFtdXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlU3RhcnRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0aGlzLmJ1aWxkU3RhcnRUYWdUb2tlbih0YWdOYW1lRmlyc3RDaCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICh0YWdOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB0aGlzLmJ1aWxkRW5kVGFnVG9rZW4odGFnTmFtZUZpcnN0Q2gpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQ29tbWVudFRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5jdXJyZW50VG9rZW4gPSB7XHJcbiAgICAgICAgdHlwZTogVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4sXHJcbiAgICAgICAgZGF0YTogJydcclxuICAgIH07XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVEb2N0eXBlVG9rZW4gPSBmdW5jdGlvbiAoZG9jdHlwZU5hbWVGaXJzdENoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHtcclxuICAgICAgICB0eXBlOiBUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTixcclxuICAgICAgICBuYW1lOiBkb2N0eXBlTmFtZUZpcnN0Q2ggfHwgJycsXHJcbiAgICAgICAgZm9yY2VRdWlya3M6IGZhbHNlLFxyXG4gICAgICAgIHB1YmxpY0lkOiBudWxsLFxyXG4gICAgICAgIHN5c3RlbUlkOiBudWxsXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY3JlYXRlQ2hhcmFjdGVyVG9rZW4gPSBmdW5jdGlvbiAodHlwZSwgY2gpIHtcclxuICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0ge1xyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgY2hhcnM6IGNoXHJcbiAgICB9O1xyXG59O1xyXG5cclxuLy9UYWcgYXR0cmlidXRlc1xyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jcmVhdGVBdHRyID0gZnVuY3Rpb24gKGF0dHJOYW1lRmlyc3RDaCkge1xyXG4gICAgdGhpcy5jdXJyZW50QXR0ciA9IHtcclxuICAgICAgICBuYW1lOiBhdHRyTmFtZUZpcnN0Q2gsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICB9O1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5faXNEdXBsaWNhdGVBdHRyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIFRva2VuaXplci5nZXRUb2tlbkF0dHIodGhpcy5jdXJyZW50VG9rZW4sIHRoaXMuY3VycmVudEF0dHIubmFtZSkgIT09IG51bGw7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9sZWF2ZUF0dHJOYW1lID0gZnVuY3Rpb24gKHRvU3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSB0b1N0YXRlO1xyXG5cclxuICAgIGlmICghdGhpcy5faXNEdXBsaWNhdGVBdHRyKCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uYXR0cnMucHVzaCh0aGlzLmN1cnJlbnRBdHRyKTtcclxufTtcclxuXHJcbi8vQXBwcm9wcmlhdGUgZW5kIHRhZyB0b2tlblxyXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI2FwcHJvcHJpYXRlLWVuZC10YWctdG9rZW4pXHJcblRva2VuaXplci5wcm90b3R5cGUuX2lzQXBwcm9wcmlhdGVFbmRUYWdUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPT09IHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWU7XHJcbn07XHJcblxyXG4vL1Rva2VuIGVtaXNzaW9uXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRDdXJyZW50VG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcblxyXG4gICAgLy9OT1RFOiBzdG9yZSBlbWl0ZWQgc3RhcnQgdGFnJ3MgdGFnTmFtZSB0byBkZXRlcm1pbmUgaXMgdGhlIGZvbGxvd2luZyBlbmQgdGFnIHRva2VuIGlzIGFwcHJvcHJpYXRlLlxyXG4gICAgaWYgKHRoaXMuY3VycmVudFRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4pXHJcbiAgICAgICAgdGhpcy5sYXN0U3RhcnRUYWdOYW1lID0gdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZTtcclxuXHJcbiAgICB0aGlzLnRva2VuUXVldWUucHVzaCh0aGlzLmN1cnJlbnRUb2tlbik7XHJcbiAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKSB7XHJcbiAgICAgICAgdGhpcy50b2tlblF1ZXVlLnB1c2godGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0gbnVsbDtcclxuICAgIH1cclxufTtcclxuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRFT0ZUb2tlbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4oKTtcclxuICAgIHRoaXMudG9rZW5RdWV1ZS5wdXNoKHt0eXBlOiBUb2tlbml6ZXIuRU9GX1RPS0VOfSk7XHJcbn07XHJcblxyXG4vL0NoYXJhY3RlcnMgZW1pc3Npb25cclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBzcGVjaWZpY2F0aW9uIHVzZXMgb25seSBvbmUgdHlwZSBvZiBjaGFyYWN0ZXIgdG9rZW5zIChvbmUgdG9rZW4gcGVyIGNoYXJhY3RlcikuXHJcbi8vVGhpcyBjYXVzZXMgYSBodWdlIG1lbW9yeSBvdmVyaGVhZCBhbmQgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgcGFyc2VyIGxvb3BzLiBwYXJzZTUgdXNlcyAzIGdyb3VwcyBvZiBjaGFyYWN0ZXJzLlxyXG4vL0lmIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYmVsb25nIHRvIHRoZSBzYW1lIGdyb3VwLCBwYXJzZXIgY2FuIHByb2Nlc3MgaXRcclxuLy9hcyBhIHNpbmdsZSBzb2xpZCBjaGFyYWN0ZXIgdG9rZW4uXHJcbi8vU28sIHRoZXJlIGFyZSAzIHR5cGVzIG9mIGNoYXJhY3RlciB0b2tlbnMgaW4gcGFyc2U1OlxyXG4vLzEpTlVMTF9DSEFSQUNURVJfVE9LRU4gLSBcXHUwMDAwLWNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcdTAwMDBcXHUwMDAwXFx1MDAwMCcpXHJcbi8vMilXSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAtIGFueSB3aGl0ZXNwYWNlL25ldy1saW5lIGNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcbiAgXFxyXFx0ICAgXFxmJylcclxuLy8zKUNIQVJBQ1RFUl9UT0tFTiAtIGFueSBjaGFyYWN0ZXIgc2VxdWVuY2Ugd2hpY2ggZG9uJ3QgYmVsb25nIHRvIGdyb3VwcyAxIGFuZCAyIChlLmcuICdhYmNkZWYxMjM0QEAjJCVeJylcclxuVG9rZW5pemVyLnByb3RvdHlwZS5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuID0gZnVuY3Rpb24gKHR5cGUsIGNoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gJiYgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4udHlwZSAhPT0gdHlwZSlcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKVxyXG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmNoYXJzICs9IGNoO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbih0eXBlLCBjaCk7XHJcbn07XHJcblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9lbWl0Q29kZVBvaW50ID0gZnVuY3Rpb24gKGNwKSB7XHJcbiAgICB2YXIgdHlwZSA9IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdHlwZSA9IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHR5cGUgPSBUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU47XHJcblxyXG4gICAgdGhpcy5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKHR5cGUsIHRvQ2hhcihjcCkpO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdFNldmVyYWxDb2RlUG9pbnRzID0gZnVuY3Rpb24gKGNvZGVQb2ludHMpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNvZGVQb2ludHNbaV0pO1xyXG59O1xyXG5cclxuLy9OT1RFOiB1c2VkIHRoZW4gd2UgZW1pdCBjaGFyYWN0ZXIgZXhwbGljaXRseS4gVGhpcyBpcyBhbHdheXMgYSBub24td2hpdGVzcGFjZSBhbmQgYSBub24tbnVsbCBjaGFyYWN0ZXIuXHJcbi8vU28gd2UgY2FuIGF2b2lkIGFkZGl0aW9uYWwgY2hlY2tzIGhlcmUuXHJcblRva2VuaXplci5wcm90b3R5cGUuX2VtaXRDaGFyID0gZnVuY3Rpb24gKGNoKSB7XHJcbiAgICB0aGlzLl9hcHBlbmRDaGFyVG9DdXJyZW50Q2hhcmFjdGVyVG9rZW4oVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiwgY2gpO1xyXG59O1xyXG5cclxuLy9DaGFyYWN0ZXIgcmVmZXJlbmNlIHRva2VuaXphdGlvblxyXG5Ub2tlbml6ZXIucHJvdG90eXBlLl9jb25zdW1lTnVtZXJpY0VudGl0eSA9IGZ1bmN0aW9uIChpc0hleCkge1xyXG4gICAgdmFyIGRpZ2l0cyA9ICcnLFxyXG4gICAgICAgIG5leHRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgICAgZGlnaXRzICs9IHRvQ2hhcih0aGlzLl9jb25zdW1lKCkpO1xyXG4gICAgICAgIG5leHRDcCA9IHRoaXMuX2xvb2thaGVhZCgpO1xyXG4gICAgfSB3aGlsZSAobmV4dENwICE9PSAkLkVPRiAmJiBpc0RpZ2l0KG5leHRDcCwgaXNIZXgpKTtcclxuXHJcbiAgICBpZiAodGhpcy5fbG9va2FoZWFkKCkgPT09ICQuU0VNSUNPTE9OKVxyXG4gICAgICAgIHRoaXMuX2NvbnN1bWUoKTtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENwID0gcGFyc2VJbnQoZGlnaXRzLCBpc0hleCA/IDE2IDogMTApLFxyXG4gICAgICAgIHJlcGxhY2VtZW50ID0gTlVNRVJJQ19FTlRJVFlfUkVQTEFDRU1FTlRTW3JlZmVyZW5jZWRDcF07XHJcblxyXG4gICAgaWYgKHJlcGxhY2VtZW50KVxyXG4gICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcclxuXHJcbiAgICBpZiAoaXNSZXNlcnZlZENvZGVQb2ludChyZWZlcmVuY2VkQ3ApKVxyXG4gICAgICAgIHJldHVybiAkLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICByZXR1cm4gcmVmZXJlbmNlZENwO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZU5hbWVkRW50aXR5ID0gZnVuY3Rpb24gKHN0YXJ0Q3AsIGluQXR0cikge1xyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gbnVsbCxcclxuICAgICAgICBlbnRpdHlDb2RlUG9pbnRzQ291bnQgPSAwLFxyXG4gICAgICAgIGNwID0gc3RhcnRDcCxcclxuICAgICAgICBsZWFmID0gTkFNRURfRU5USVRZX1RSSUVbY3BdLFxyXG4gICAgICAgIGNvbnN1bWVkQ291bnQgPSAxLFxyXG4gICAgICAgIHNlbWljb2xvblRlcm1pbmF0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKDsgbGVhZiAmJiBjcCAhPT0gJC5FT0Y7IGNwID0gdGhpcy5fY29uc3VtZSgpLCBjb25zdW1lZENvdW50KyssIGxlYWYgPSBsZWFmLmwgJiYgbGVhZi5sW2NwXSkge1xyXG4gICAgICAgIGlmIChsZWFmLmMpIHtcclxuICAgICAgICAgICAgLy9OT1RFOiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBuYW1lZCByZWZlcmVuY2UgbWF0Y2guIEJ1dCB3ZSBkb24ndCBzdG9wIGxvb2t1cCBhdCB0aGlzIHBvaW50LFxyXG4gICAgICAgICAgICAvL2JlY2F1c2UgbG9uZ2VyIG1hdGNoZXMgc3RpbGwgY2FuIGJlIGZvdW5kIChlLmcuICcmbm90JyBhbmQgJyZub3RpbjsnKSBleGNlcHQgdGhlIGNhc2VcclxuICAgICAgICAgICAgLy90aGVuIGZvdW5kIG1hdGNoIGlzIHRlcm1pbmF0ZWQgYnkgc2VtaWNvbG9uLlxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQ29kZVBvaW50cyA9IGxlYWYuYztcclxuICAgICAgICAgICAgZW50aXR5Q29kZVBvaW50c0NvdW50ID0gY29uc3VtZWRDb3VudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TRU1JQ09MT04pIHtcclxuICAgICAgICAgICAgICAgIHNlbWljb2xvblRlcm1pbmF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgaWYgKCFzZW1pY29sb25UZXJtaW5hdGVkKSB7XHJcbiAgICAgICAgICAgIC8vTk9URTogdW5jb25zdW1lIGV4Y2VzcyAoZS5nLiAnaXQnIGluICcmbm90aXQnKVxyXG4gICAgICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGNvbnN1bWVkQ291bnQgLSBlbnRpdHlDb2RlUG9pbnRzQ291bnQpO1xyXG5cclxuICAgICAgICAgICAgLy9OT1RFOiBJZiB0aGUgY2hhcmFjdGVyIHJlZmVyZW5jZSBpcyBiZWluZyBjb25zdW1lZCBhcyBwYXJ0IG9mIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIG5leHQgY2hhcmFjdGVyXHJcbiAgICAgICAgICAgIC8vaXMgZWl0aGVyIGEgVSswMDNEIEVRVUFMUyBTSUdOIGNoYXJhY3RlciAoPSkgb3IgYW4gYWxwaGFudW1lcmljIEFTQ0lJIGNoYXJhY3RlciwgdGhlbiwgZm9yIGhpc3RvcmljYWxcclxuICAgICAgICAgICAgLy9yZWFzb25zLCBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCB3ZXJlIG1hdGNoZWQgYWZ0ZXIgdGhlIFUrMDAyNiBBTVBFUlNBTkQgY2hhcmFjdGVyICgmKSBtdXN0IGJlXHJcbiAgICAgICAgICAgIC8vdW5jb25zdW1lZCwgYW5kIG5vdGhpbmcgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgICAgIC8vSG93ZXZlciwgaWYgdGhpcyBuZXh0IGNoYXJhY3RlciBpcyBpbiBmYWN0IGEgVSswMDNEIEVRVUFMUyBTSUdOIGNoYXJhY3RlciAoPSksIHRoZW4gdGhpcyBpcyBhXHJcbiAgICAgICAgICAgIC8vcGFyc2UgZXJyb3IsIGJlY2F1c2Ugc29tZSBsZWdhY3kgdXNlciBhZ2VudHMgd2lsbCBtaXNpbnRlcnByZXQgdGhlIG1hcmt1cCBpbiB0aG9zZSBjYXNlcy5cclxuICAgICAgICAgICAgLy8oc2VlOiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tlbml6YXRpb24uaHRtbCN0b2tlbml6aW5nLWNoYXJhY3Rlci1yZWZlcmVuY2VzKVxyXG4gICAgICAgICAgICBpZiAoaW5BdHRyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV4dENwID0gdGhpcy5fbG9va2FoZWFkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRDcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBpc0FzY2lpQWxwaGFOdW1lcmljKG5leHRDcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGVudGl0eUNvZGVQb2ludHNDb3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZWZlcmVuY2VkQ29kZVBvaW50cztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl91bmNvbnN1bWVTZXZlcmFsKGNvbnN1bWVkQ291bnQpO1xyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuVG9rZW5pemVyLnByb3RvdHlwZS5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZSA9IGZ1bmN0aW9uIChzdGFydENwLCBpbkF0dHIpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVFbnRpdGllc0RlY29kaW5nIHx8IGlzV2hpdGVzcGFjZShzdGFydENwKSB8fCBzdGFydENwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOIHx8XHJcbiAgICAgICAgc3RhcnRDcCA9PT0gJC5BTVBFUlNBTkQgfHwgc3RhcnRDcCA9PT0gdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwIHx8IHN0YXJ0Q3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgLy9OT1RFOiBub3QgYSBjaGFyYWN0ZXIgcmVmZXJlbmNlLiBObyBjaGFyYWN0ZXJzIGFyZSBjb25zdW1lZCwgYW5kIG5vdGhpbmcgaXMgcmV0dXJuZWQuXHJcbiAgICAgICAgdGhpcy5fdW5jb25zdW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoc3RhcnRDcCA9PT0gJC5OVU1CRVJfU0lHTikge1xyXG4gICAgICAgIC8vTk9URTogd2UgaGF2ZSBhIG51bWVyaWMgZW50aXR5IGNhbmRpZGF0ZSwgbm93IHdlIHNob3VsZCBkZXRlcm1pbmUgaWYgaXQncyBoZXggb3IgZGVjaW1hbFxyXG4gICAgICAgIHZhciBpc0hleCA9IGZhbHNlLFxyXG4gICAgICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuXHJcbiAgICAgICAgaWYgKG5leHRDcCA9PT0gJC5MQVRJTl9TTUFMTF9YIHx8IG5leHRDcCA9PT0gJC5MQVRJTl9DQVBJVEFMX1gpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29uc3VtZSgpO1xyXG4gICAgICAgICAgICBpc0hleCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuZXh0Q3AgPSB0aGlzLl9sb29rYWhlYWQoKTtcclxuXHJcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBkaWdpdCB0aGlzIGlzIGEgbnVtZXJpYyBlbnRpdHkgZm9yIHN1cmUsIHNvIHdlIGNvbnN1bWUgaXRcclxuICAgICAgICBpZiAobmV4dENwICE9PSAkLkVPRiAmJiBpc0RpZ2l0KG5leHRDcCwgaXNIZXgpKVxyXG4gICAgICAgICAgICByZXR1cm4gW3RoaXMuX2NvbnN1bWVOdW1lcmljRW50aXR5KGlzSGV4KV07XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvL05PVEU6IG90aGVyd2lzZSB0aGlzIGlzIGEgYm9ndXMgbnVtYmVyIGVudGl0eSBhbmQgYSBwYXJzZSBlcnJvci4gVW5jb25zdW1lIHRoZSBudW1iZXIgc2lnblxyXG4gICAgICAgICAgICAvL2FuZCB0aGUgJ3gnLWNoYXJhY3RlciBpZiBhcHByb3ByaWF0ZS5cclxuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lU2V2ZXJhbChpc0hleCA/IDIgOiAxKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uc3VtZU5hbWVkRW50aXR5KHN0YXJ0Q3AsIGluQXR0cik7XHJcbn07XHJcblxyXG4vL1N0YXRlIG1hY2hpbmVcclxudmFyIF8gPSBUb2tlbml6ZXIucHJvdG90eXBlO1xyXG5cclxuLy8xMi4yLjQuMSBEYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bREFUQV9TVEFURV0gPSBmdW5jdGlvbiBkYXRhU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BTVBFUlNBTkQpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fREFUQV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjIgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBkYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9EQVRBX1NUQVRFXSA9IGZ1bmN0aW9uIGNoYXJhY3RlclJlZmVyZW5jZUluRGF0YVN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9IHZvaWQgMDtcclxuXHJcbiAgICB2YXIgcmVmZXJlbmNlZENvZGVQb2ludHMgPSB0aGlzLl9jb25zdW1lQ2hhcmFjdGVyUmVmZXJlbmNlKGNwLCBmYWxzZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKVxyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyhyZWZlcmVuY2VkQ29kZVBvaW50cyk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJyYnKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zIFJDREFUQSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JDREFUQV9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkFNUEVSU0FORClcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9SQ0RBVEFfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQgQ2hhcmFjdGVyIHJlZmVyZW5jZSBpbiBSQ0RBVEEgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDSEFSQUNURVJfUkVGRVJFTkNFX0lOX1JDREFUQV9TVEFURV0gPSBmdW5jdGlvbiBjaGFyYWN0ZXJSZWZlcmVuY2VJblJjZGF0YVN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLnN0YXRlID0gUkNEQVRBX1NUQVRFO1xyXG4gICAgdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwID0gdm9pZCAwO1xyXG5cclxuICAgIHZhciByZWZlcmVuY2VkQ29kZVBvaW50cyA9IHRoaXMuX2NvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoY3AsIGZhbHNlKTtcclxuXHJcbiAgICBpZiAocmVmZXJlbmNlZENvZGVQb2ludHMpXHJcbiAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHJlZmVyZW5jZWRDb2RlUG9pbnRzKTtcclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignJicpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUgUkFXVEVYVCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcihVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42IFNjcmlwdCBkYXRhIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNyBQTEFJTlRFWFQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tQTEFJTlRFWFRfU1RBVEVdID0gZnVuY3Rpb24gcGxhaW50ZXh0U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjggVGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tUQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiB0YWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5FWENMQU1BVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBNQVJLVVBfREVDTEFSQVRJT05fT1BFTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBFTkRfVEFHX09QRU5fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlU3RhcnRUYWdUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVFU1RJT05fTUFSSykge1xyXG4gICAgICAgIC8vTk9URTogY2FsbCBib2d1cyBjb21tZW50IHN0YXRlIGRpcmVjdGx5IHdpdGggY3VycmVudCBjb25zdW1lZCBjaGFyYWN0ZXIgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVjb25zdW1wdGlvbi5cclxuICAgICAgICB0aGlzW0JPR1VTX0NPTU1FTlRfU1RBVEVdKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuOSBFbmQgdGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tFTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gZW5kVGFnT3BlblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBUQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICAvL05PVEU6IGNhbGwgYm9ndXMgY29tbWVudCBzdGF0ZSBkaXJlY3RseSB3aXRoIGN1cnJlbnQgY29uc3VtZWQgY2hhcmFjdGVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IHJlY29uc3VtcHRpb24uXHJcbiAgICAgICAgdGhpc1tCT0dVU19DT01NRU5UX1NUQVRFXShjcCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTAgVGFnIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tUQUdfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiB0YWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpVXBwZXIoY3ApKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTEgUkNEQVRBIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHJjZGF0YUxlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkNEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xMiBSQ0RBVEEgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJDREFUQV9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkNEQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xMyBSQ0RBVEEgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkNEQVRBX0VORF9UQUdfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiByY2RhdGFFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJDREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTQgUkFXVEVYVCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1JBV1RFWFRfTEVTU19USEFOX1NJR05fU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE1IFJBV1RFWFQgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkFXVEVYVF9FTkRfVEFHX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dEVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFJBV1RFWFRfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFJBV1RFWFRfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjE2IFJBV1RFWFQgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bUkFXVEVYVF9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gcmF3dGV4dEVuZFRhZ05hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCcvJyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdFNldmVyYWxDb2RlUG9pbnRzKHRoaXMudGVtcEJ1ZmYpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoUkFXVEVYVF9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTcgU2NyaXB0IGRhdGEgbGVzcy10aGFuIHNpZ24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhTGVzc1RoYW5TaWduU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignIScpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMTggU2NyaXB0IGRhdGEgZW5kIHRhZyBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFbmRUYWdPcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VORF9UQUdfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4odG9DaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4xOSBTY3JpcHQgZGF0YSBlbmQgdGFnIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVuZFRhZ05hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQXNjaWlMb3dlckNoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnRhZ05hbWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0FwcHJvcHJpYXRlRW5kVGFnVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9BVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNFTEZfQ0xPU0lOR19TVEFSVF9UQUdfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX1NUQVRFKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yMCBTY3JpcHQgZGF0YSBlc2NhcGUgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZVN0YXJ0U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjEgU2NyaXB0IGRhdGEgZXNjYXBlIHN0YXJ0IGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlU3RhcnREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjIgU2NyaXB0IGRhdGEgZXNjYXBlZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjMgU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNCBTY3JpcHQgZGF0YSBlc2NhcGVkIGRhc2ggZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFFc2NhcGVkRGFzaERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLScpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc+Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4yNSBTY3JpcHQgZGF0YSBlc2NhcGVkIGxlc3MtdGhhbiBzaWduIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2lnblN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5fU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYgPSBbXTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjYgU2NyaXB0IGRhdGEgZXNjYXBlZCBlbmQgdGFnIG9wZW4gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfT1BFTl9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRXNjYXBlZEVuZFRhZ09wZW5TdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbih0b0FzY2lpTG93ZXJDaGFyKGNwKSk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKHRvQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCc8Jyk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy8nKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI3IFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YUVzY2FwZWRFbmRUYWdOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc0FzY2lpVXBwZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4udGFnTmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2goY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlMb3dlcihjcCkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi50YWdOYW1lICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5faXNBcHByb3ByaWF0ZUVuZFRhZ1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgICAgIHRoaXMuX2VtaXRTZXZlcmFsQ29kZVBvaW50cyh0aGlzLnRlbXBCdWZmKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjI4IFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGUgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSB8fCBjcCA9PT0gJC5TT0xJRFVTIHx8IGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMuaXNUZW1wQnVmZmVyRXF1YWxUb1NjcmlwdFN0cmluZygpID8gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEUgOiBTQ1JJUFRfREFUQV9FU0NBUEVEX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLnRlbXBCdWZmLnB1c2godG9Bc2NpaUxvd2VyQ29kZVBvaW50KGNwKSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaUxvd2VyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaChjcCk7XHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoU0NSSVBUX0RBVEFfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMjkgU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMCBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBkYXNoIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBzY3JpcHREYXRhRG91YmxlRXNjYXBlZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTl9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMSBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBkYXNoIGRhc2ggc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gc2NyaXB0RGF0YURvdWJsZUVzY2FwZWREYXNoRGFzaFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuX2VtaXRDaGFyKCctJyk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTEVTU19USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05fU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoJzwnKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignPicpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdENoYXIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMiBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVkTGVzc1RoYW5TaWduU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZiA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORF9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q2hhcignLycpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKFNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC4zMyBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlIGVuZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW1NDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EX1NUQVRFXSA9IGZ1bmN0aW9uIHNjcmlwdERhdGFEb3VibGVFc2NhcGVFbmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkgfHwgY3AgPT09ICQuU09MSURVUyB8fCBjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmlzVGVtcEJ1ZmZlckVxdWFsVG9TY3JpcHRTdHJpbmcoKSA/IFNDUklQVF9EQVRBX0VTQ0FQRURfU1RBVEUgOiBTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURTtcclxuXHJcbiAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xyXG4gICAgICAgIHRoaXMudGVtcEJ1ZmYucHVzaCh0b0FzY2lpTG93ZXJDb2RlUG9pbnQoY3ApKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXIoY3ApKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wQnVmZi5wdXNoKGNwKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9TVEFURSk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzQgQmVmb3JlIGF0dHJpYnV0ZSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZUF0dHJpYnV0ZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8IGNwID09PSAkLkVRVUFMU19TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzUgQXR0cmlidXRlIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVOYW1lU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoQUZURVJfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlNPTElEVVMpXHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FUVVBTFNfU0lHTilcclxuICAgICAgICB0aGlzLl9sZWF2ZUF0dHJOYW1lKEJFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZShEQVRBX1NUQVRFKTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoaXNBc2NpaVVwcGVyKGNwKSlcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdG9Bc2NpaUxvd2VyQ2hhcihjcCk7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUksgfHwgY3AgPT09ICQuQVBPU1RST1BIRSB8fCBjcCA9PT0gJC5MRVNTX1RIQU5fU0lHTilcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gdG9DaGFyKGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzYgQWZ0ZXIgYXR0cmlidXRlIG5hbWUgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9BVFRSSUJVVEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckF0dHJpYnV0ZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVRVUFMU19TSUdOKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKHRvQXNjaWlMb3dlckNoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfTkFNRV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQXR0cih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzcgQmVmb3JlIGF0dHJpYnV0ZSB2YWx1ZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9BVFRSSUJVVEVfVkFMVUVfU1RBVEVdID0gZnVuY3Rpb24gYmVmb3JlQXR0cmlidXRlVmFsdWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8IGNwID09PSAkLkVRVUFMU19TSUdOIHx8IGNwID09PSAkLkdSQVZFX0FDQ0VOVCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjM4IEF0dHJpYnV0ZSB2YWx1ZSAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQU1QRVJTQU5EKSB7XHJcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsQWxsb3dlZENwID0gJC5RVU9UQVRJT05fTUFSSztcclxuICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuMzkgQXR0cmlidXRlIHZhbHVlIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuQVBPU1RST1BIRTtcclxuICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0hBUkFDVEVSX1JFRkVSRU5DRV9JTl9BVFRSSUJVVEVfVkFMVUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRilcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDAgQXR0cmlidXRlIHZhbHVlICh1bnF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gYXR0cmlidXRlVmFsdWVVbnF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0FUVFJJQlVURV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFNUEVSU0FORCkge1xyXG4gICAgICAgIHRoaXMuYWRkaXRpb25hbEFsbG93ZWRDcCA9ICQuR1JFQVRFUl9USEFOX1NJR047XHJcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5RVU9UQVRJT05fTUFSSyB8fCBjcCA9PT0gJC5BUE9TVFJPUEhFIHx8IGNwID09PSAkLkxFU1NfVEhBTl9TSUdOIHx8XHJcbiAgICAgICAgICAgICBjcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBjcCA9PT0gJC5HUkFWRV9BQ0NFTlQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IHRvQ2hhcihjcCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKVxyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40MSBDaGFyYWN0ZXIgcmVmZXJlbmNlIGluIGF0dHJpYnV0ZSB2YWx1ZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NIQVJBQ1RFUl9SRUZFUkVOQ0VfSU5fQVRUUklCVVRFX1ZBTFVFX1NUQVRFXSA9IGZ1bmN0aW9uIGNoYXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlVmFsdWVTdGF0ZShjcCkge1xyXG4gICAgdmFyIHJlZmVyZW5jZWRDb2RlUG9pbnRzID0gdGhpcy5fY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShjcCwgdHJ1ZSk7XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZWRDb2RlUG9pbnRzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZlcmVuY2VkQ29kZVBvaW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSB0b0NoYXIocmVmZXJlbmNlZENvZGVQb2ludHNbaV0pO1xyXG4gICAgfSBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSAnJic7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMucmV0dXJuU3RhdGU7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDIgQWZ0ZXIgYXR0cmlidXRlIHZhbHVlIChxdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckF0dHJpYnV0ZVZhbHVlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuU09MSURVUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gU0VMRl9DTE9TSU5HX1NUQVJUX1RBR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQzIFNlbGYtY2xvc2luZyBzdGFydCB0YWcgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tTRUxGX0NMT1NJTkdfU1RBUlRfVEFHX1NUQVRFXSA9IGZ1bmN0aW9uIHNlbGZDbG9zaW5nU3RhcnRUYWdTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc2VsZkNsb3NpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfQVRUUklCVVRFX05BTUVfU1RBVEUpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ0IEJvZ3VzIGNvbW1lbnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCT0dVU19DT01NRU5UX1NUQVRFXSA9IGZ1bmN0aW9uIGJvZ3VzQ29tbWVudFN0YXRlKGNwKSB7XHJcbiAgICB0aGlzLl9jcmVhdGVDb21tZW50VG9rZW4oKTtcclxuXHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBjcCA9PT0gJC5OVUxMID8gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVIgOiB0b0NoYXIoY3ApO1xyXG4gICAgICAgICAgICBjcCA9IHRoaXMuX2NvbnN1bWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ1IE1hcmt1cCBkZWNsYXJhdGlvbiBvcGVuIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5fU1RBVEVdID0gZnVuY3Rpb24gbWFya3VwRGVjbGFyYXRpb25PcGVuU3RhdGUoY3ApIHtcclxuICAgIGlmICh0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuREFTSF9EQVNIX1NUUklORywgY3AsIHRydWUpKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBUlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLkRPQ1RZUEVfU1RSSU5HLCBjcCwgZmFsc2UpKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKHRoaXMuYWxsb3dDREFUQSAmJiB0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuQ0RBVEFfU1RBUlRfU1RSSU5HLCBjcCwgdHJ1ZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENEQVRBX1NFQ1RJT05fU1RBVEU7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgLy9OT1RFOiBjYWxsIGJvZ3VzIGNvbW1lbnQgc3RhdGUgZGlyZWN0bHkgd2l0aCBjdXJyZW50IGNvbnN1bWVkIGNoYXJhY3RlciB0byBhdm9pZCB1bm5lY2Vzc2FyeSByZWNvbnN1bXB0aW9uLlxyXG4gICAgICAgIHRoaXNbQk9HVVNfQ09NTUVOVF9TVEFURV0oY3ApO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ2IENvbW1lbnQgc3RhcnQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDT01NRU5UX1NUQVJUX1NUQVRFXSA9IGZ1bmN0aW9uIGNvbW1lbnRTdGFydFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVJUX0RBU0hfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjQ3IENvbW1lbnQgc3RhcnQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfU1RBUlRfREFTSF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhcnREYXNoU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC40OCBDb21tZW50IHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9TVEFURV0gPSBmdW5jdGlvbiBjb21tZW50U3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0RBU0hfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTClcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNDkgQ29tbWVudCBlbmQgZGFzaCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX0RBU0hfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZERhc2hTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSB0b0NoYXIoY3ApO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjUwIENvbW1lbnQgZW5kIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQ09NTUVOVF9FTkRfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRVhDTEFNQVRJT05fTUFSSylcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9FTkRfQkFOR19TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSAnLSc7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBDT01NRU5UX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9IHRvQ2hhcihjcCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTEgQ29tbWVudCBlbmQgYmFuZyBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0NPTU1FTlRfRU5EX0JBTkdfU1RBVEVdID0gZnVuY3Rpb24gY29tbWVudEVuZEJhbmdTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IENPTU1FTlRfRU5EX0RBU0hfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuTlVMTCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZGF0YSArPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgKz0gdG9DaGFyKGNwKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ09NTUVOVF9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MiBET0NUWVBFIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShCRUZPUkVfRE9DVFlQRV9OQU1FX1NUQVRFKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41MyBCZWZvcmUgRE9DVFlQRSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQkVGT1JFX0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4odG9Bc2NpaUxvd2VyQ2hhcihjcCkpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX05BTUVfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbih0b0NoYXIoY3ApKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU0IERPQ1RZUEUgbmFtZSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfTkFNRV9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlTmFtZVN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGlzQXNjaWlVcHBlcihjcCkpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ubmFtZSArPSB0b0FzY2lpTG93ZXJDaGFyKGNwKTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLm5hbWUgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5uYW1lICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTUgQWZ0ZXIgRE9DVFlQRSBuYW1lIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9OQU1FX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZU5hbWVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLlBVQkxJQ19TVFJJTkcsIGNwLCBmYWxzZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAodGhpcy5fY29uc3VtZVN1YnNlcXVlbnRJZk1hdGNoKCQkLlNZU1RFTV9TVFJJTkcsIGNwLCBmYWxzZSkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEU7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBCT0dVU19ET0NUWVBFX1NUQVRFO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjU2IEFmdGVyIERPQ1RZUEUgcHVibGljIGtleXdvcmQgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEX1NUQVRFXSA9IGZ1bmN0aW9uIGFmdGVyRG9jdHlwZVB1YmxpY0tleXdvcmRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGlzV2hpdGVzcGFjZShjcCkpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTcgQmVmb3JlIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBiZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5wdWJsaWNJZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNTggRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciAoZG91YmxlLXF1b3RlZCkgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEVdID0gZnVuY3Rpb24gZG9jdHlwZVB1YmxpY0lkZW50aWZpZXJEb3VibGVRdW90ZWRTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4ucHVibGljSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC41OSBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlUHVibGljSWRlbnRpZmllclNpbmdsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TVEFURTtcclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUoREFUQV9TVEFURSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnB1YmxpY0lkICs9IHRvQ2hhcihjcCk7XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjAgQWZ0ZXIgRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlUHVibGljSWRlbnRpZmllclN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkFQT1NUUk9QSEUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42MSBCZXR3ZWVuIERPQ1RZUEUgcHVibGljIGFuZCBzeXN0ZW0gaWRlbnRpZmllcnMgc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNfU1RBVEVdID0gZnVuY3Rpb24gYmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVyc1N0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLlFVT1RBVElPTl9NQVJLKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJztcclxuICAgICAgICB0aGlzLnN0YXRlID0gRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEJPR1VTX0RPQ1RZUEVfU1RBVEU7XHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuLy8xMi4yLjQuNjIgQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0ga2V5d29yZCBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0FGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRfU1RBVEVdID0gZnVuY3Rpb24gYWZ0ZXJEb2N0eXBlU3lzdGVtS2V5d29yZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoaXNXaGl0ZXNwYWNlKGNwKSlcclxuICAgICAgICB0aGlzLnN0YXRlID0gQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42MyBCZWZvcmUgRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0JFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFXSA9IGZ1bmN0aW9uIGJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuQVBPU1RST1BIRSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRF9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5HUkVBVEVSX1RIQU5fU0lHTikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NCBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIChkb3VibGUtcXVvdGVkKSBzdGF0ZVxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5fW0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRF9TVEFURV0gPSBmdW5jdGlvbiBkb2N0eXBlU3lzdGVtSWRlbnRpZmllckRvdWJsZVF1b3RlZFN0YXRlKGNwKSB7XHJcbiAgICBpZiAoY3AgPT09ICQuUVVPVEFUSU9OX01BUkspXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IEFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU1RBVEU7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLk5VTEwpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gVU5JQ09ERS5SRVBMQUNFTUVOVF9DSEFSQUNURVI7XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5zeXN0ZW1JZCArPSB0b0NoYXIoY3ApO1xyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjY1IERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgKHNpbmdsZS1xdW90ZWQpIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEX1NUQVRFXSA9IGZ1bmN0aW9uIGRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU2luZ2xlUXVvdGVkU3RhdGUoY3ApIHtcclxuICAgIGlmIChjcCA9PT0gJC5BUE9TVFJPUEhFKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NUQVRFO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0gREFUQV9TVEFURTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChjcCA9PT0gJC5OVUxMKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLnN5c3RlbUlkICs9IFVOSUNPREUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uc3lzdGVtSWQgKz0gdG9DaGFyKGNwKTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NiBBZnRlciBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TVEFURV0gPSBmdW5jdGlvbiBhZnRlckRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU3RhdGUoY3ApIHtcclxuICAgIGlmIChpc1doaXRlc3BhY2UoY3ApKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICBpZiAoY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR04pIHtcclxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudFRva2VuKCk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IERBVEFfU1RBVEU7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoY3AgPT09ICQuRU9GKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2VcclxuICAgICAgICB0aGlzLnN0YXRlID0gQk9HVVNfRE9DVFlQRV9TVEFURTtcclxufTtcclxuXHJcblxyXG4vLzEyLjIuNC42NyBCb2d1cyBET0NUWVBFIHN0YXRlXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbl9bQk9HVVNfRE9DVFlQRV9TVEFURV0gPSBmdW5jdGlvbiBib2d1c0RvY3R5cGVTdGF0ZShjcCkge1xyXG4gICAgaWYgKGNwID09PSAkLkdSRUFURVJfVEhBTl9TSUdOKSB7XHJcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRUb2tlbigpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGNwID09PSAkLkVPRikge1xyXG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50VG9rZW4oKTtcclxuICAgICAgICB0aGlzLl9yZWNvbnN1bWVJblN0YXRlKERBVEFfU1RBVEUpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vMTIuMi40LjY4IENEQVRBIHNlY3Rpb24gc3RhdGVcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuX1tDREFUQV9TRUNUSU9OX1NUQVRFXSA9IGZ1bmN0aW9uIGNkYXRhU2VjdGlvblN0YXRlKGNwKSB7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGlmIChjcCA9PT0gJC5FT0YpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZShEQVRBX1NUQVRFKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb25zdW1lU3Vic2VxdWVudElmTWF0Y2goJCQuQ0RBVEFfRU5EX1NUUklORywgY3AsIHRydWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBEQVRBX1NUQVRFO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcclxuICAgICAgICAgICAgY3AgPSB0aGlzLl9jb25zdW1lKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG4vL05vZGUgY29uc3RydWN0aW9uXHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vZGVOYW1lOiAnI2RvY3VtZW50JyxcclxuICAgICAgICBxdWlya3NNb2RlOiBmYWxzZSxcclxuICAgICAgICBjaGlsZE5vZGVzOiBbXVxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnQtZnJhZ21lbnQnLFxyXG4gICAgICAgIHF1aXJrc01vZGU6IGZhbHNlLFxyXG4gICAgICAgIGNoaWxkTm9kZXM6IFtdXHJcbiAgICB9O1xyXG59O1xyXG5cclxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6IHRhZ05hbWUsXHJcbiAgICAgICAgdGFnTmFtZTogdGFnTmFtZSxcclxuICAgICAgICBhdHRyczogYXR0cnMsXHJcbiAgICAgICAgbmFtZXNwYWNlVVJJOiBuYW1lc3BhY2VVUkksXHJcbiAgICAgICAgY2hpbGROb2RlczogW10sXHJcbiAgICAgICAgcGFyZW50Tm9kZTogbnVsbFxyXG4gICAgfTtcclxufTtcclxuXHJcbmV4cG9ydHMuY3JlYXRlQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBub2RlTmFtZTogJyNjb21tZW50JyxcclxuICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH07XHJcbn07XHJcblxyXG52YXIgY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbm9kZU5hbWU6ICcjdGV4dCcsXHJcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgIHBhcmVudE5vZGU6IG51bGxcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vL1RyZWUgbXV0YXRpb25cclxuZXhwb3J0cy5zZXREb2N1bWVudFR5cGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xyXG4gICAgdmFyIGRvY3R5cGVOb2RlID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGROb2Rlc1tpXS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnKSB7XHJcbiAgICAgICAgICAgIGRvY3R5cGVOb2RlID0gZG9jdW1lbnQuY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb2N0eXBlTm9kZSkge1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIGRvY3R5cGVOb2RlLnB1YmxpY0lkID0gcHVibGljSWQ7XHJcbiAgICAgICAgZG9jdHlwZU5vZGUuc3lzdGVtSWQgPSBzeXN0ZW1JZDtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBhcHBlbmRDaGlsZChkb2N1bWVudCwge1xyXG4gICAgICAgICAgICBub2RlTmFtZTogJyNkb2N1bWVudFR5cGUnLFxyXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICBwdWJsaWNJZDogcHVibGljSWQsXHJcbiAgICAgICAgICAgIHN5c3RlbUlkOiBzeXN0ZW1JZFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0cy5zZXRRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XHJcbiAgICBkb2N1bWVudC5xdWlya3NNb2RlID0gdHJ1ZTtcclxufTtcclxuXHJcbmV4cG9ydHMuaXNRdWlya3NNb2RlID0gZnVuY3Rpb24gKGRvY3VtZW50KSB7XHJcbiAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzTW9kZTtcclxufTtcclxuXHJcbnZhciBhcHBlbmRDaGlsZCA9IGV4cG9ydHMuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xyXG4gICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnB1c2gobmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG59O1xyXG5cclxudmFyIGluc2VydEJlZm9yZSA9IGV4cG9ydHMuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcclxuICAgIHZhciBpbnNlcnRpb25JZHggPSBwYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihyZWZlcmVuY2VOb2RlKTtcclxuXHJcbiAgICBwYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3Tm9kZSk7XHJcbiAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5kZXRhY2hOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICB2YXIgaWR4ID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihub2RlKTtcclxuXHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXMuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlID0gbnVsbDtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dCA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0KSB7XHJcbiAgICBpZiAocGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBwcmV2Tm9kZSA9IHBhcmVudE5vZGUuY2hpbGROb2Rlc1twYXJlbnROb2RlLmNoaWxkTm9kZXMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgIGlmIChwcmV2Tm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0Jykge1xyXG4gICAgICAgICAgICBwcmV2Tm9kZS52YWx1ZSArPSB0ZXh0O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFwcGVuZENoaWxkKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpKTtcclxufTtcclxuXHJcbmV4cG9ydHMuaW5zZXJ0VGV4dEJlZm9yZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0ZXh0LCByZWZlcmVuY2VOb2RlKSB7XHJcbiAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkTm9kZXNbcGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2YocmVmZXJlbmNlTm9kZSkgLSAxXTtcclxuXHJcbiAgICBpZiAocHJldk5vZGUgJiYgcHJldk5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCcpXHJcbiAgICAgICAgcHJldk5vZGUudmFsdWUgKz0gdGV4dDtcclxuICAgIGVsc2VcclxuICAgICAgICBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgY3JlYXRlVGV4dE5vZGUodGV4dCksIHJlZmVyZW5jZU5vZGUpO1xyXG59O1xyXG5cclxuZXhwb3J0cy5hZG9wdEF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAocmVjaXBpZW50Tm9kZSwgYXR0cnMpIHtcclxuICAgIHZhciByZWNpcGllbnRBdHRyc01hcCA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjaXBpZW50Tm9kZS5hdHRycy5sZW5ndGg7IGkrKylcclxuICAgICAgICByZWNpcGllbnRBdHRyc01hcC5wdXNoKHJlY2lwaWVudE5vZGUuYXR0cnNbaV0ubmFtZSk7XHJcblxyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmIChyZWNpcGllbnRBdHRyc01hcC5pbmRleE9mKGF0dHJzW2pdLm5hbWUpID09PSAtMSlcclxuICAgICAgICAgICAgcmVjaXBpZW50Tm9kZS5hdHRycy5wdXNoKGF0dHJzW2pdKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vL1RyZWUgdHJhdmVyc2luZ1xyXG5leHBvcnRzLmdldEZpcnN0Q2hpbGQgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlc1swXTtcclxufTtcclxuXHJcbmV4cG9ydHMuZ2V0Q2hpbGROb2RlcyA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldEF0dHJMaXN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiBub2RlLmF0dHJzO1xyXG59O1xyXG5cclxuLy9Ob2RlIGRhdGFcclxuZXhwb3J0cy5nZXRUYWdOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHJldHVybiBlbGVtZW50LnRhZ05hbWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldE5hbWVzcGFjZVVSSSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lc3BhY2VVUkk7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldFRleHROb2RlQ29udGVudCA9IGZ1bmN0aW9uICh0ZXh0Tm9kZSkge1xyXG4gICAgcmV0dXJuIHRleHROb2RlLnZhbHVlO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXRDb21tZW50Tm9kZUNvbnRlbnQgPSBmdW5jdGlvbiAoY29tbWVudE5vZGUpIHtcclxuICAgIHJldHVybiBjb21tZW50Tm9kZS5kYXRhO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlTmFtZSA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlLm5hbWU7XHJcbn07XHJcblxyXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xyXG4gICAgcmV0dXJuIGRvY3R5cGVOb2RlLnB1YmxpY0lkO1xyXG59O1xyXG5cclxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcclxuICAgIHJldHVybiBkb2N0eXBlTm9kZS5zeXN0ZW1JZDtcclxufTtcclxuXHJcbi8vTm9kZSB0eXBlc1xyXG5leHBvcnRzLmlzVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xyXG4gICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjY29tbWVudCc7XHJcbn07XHJcblxyXG5leHBvcnRzLmlzRG9jdW1lbnRUeXBlTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XHJcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnO1xyXG59O1xyXG5cclxuZXhwb3J0cy5pc0VsZW1lbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgIHJldHVybiAhIW5vZGUudGFnTmFtZTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRG9jdHlwZSA9IHJlcXVpcmUoJy4uL2NvbW1vbi9kb2N0eXBlJyk7XG5cbi8vQ29udmVyc2lvbiB0YWJsZXMgZm9yIERPTSBMZXZlbDEgc3RydWN0dXJlIGVtdWxhdGlvblxudmFyIG5vZGVUeXBlcyA9IHtcbiAgICBlbGVtZW50OiAxLFxuICAgIHRleHQ6IDMsXG4gICAgY2RhdGE6IDQsXG4gICAgY29tbWVudDogOFxufTtcblxudmFyIG5vZGVQcm9wZXJ0eVNob3J0aGFuZHMgPSB7XG4gICAgdGFnTmFtZTogJ25hbWUnLFxuICAgIGNoaWxkTm9kZXM6ICdjaGlsZHJlbicsXG4gICAgcGFyZW50Tm9kZTogJ3BhcmVudCcsXG4gICAgcHJldmlvdXNTaWJsaW5nOiAncHJldicsXG4gICAgbmV4dFNpYmxpbmc6ICduZXh0JyxcbiAgICBub2RlVmFsdWU6ICdkYXRhJ1xufTtcblxuLy9Ob2RlXG52YXIgTm9kZSA9IGZ1bmN0aW9uIChwcm9wcykge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IHByb3BzW2tleV07XG4gICAgfVxufTtcblxuTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgIHJldHVybiBjaGlsZHJlbiAmJiBjaGlsZHJlblswXSB8fCBudWxsO1xuICAgIH0sXG5cbiAgICBnZXQgbGFzdENoaWxkKCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4gJiYgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0gfHwgbnVsbDtcbiAgICB9LFxuXG4gICAgZ2V0IG5vZGVUeXBlKCkge1xuICAgICAgICByZXR1cm4gbm9kZVR5cGVzW3RoaXMudHlwZV0gfHwgbm9kZVR5cGVzLmVsZW1lbnQ7XG4gICAgfVxufTtcblxuT2JqZWN0LmtleXMobm9kZVByb3BlcnR5U2hvcnRoYW5kcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHNob3J0aGFuZCA9IG5vZGVQcm9wZXJ0eVNob3J0aGFuZHNba2V5XTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOb2RlLnByb3RvdHlwZSwga2V5LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbc2hvcnRoYW5kXSB8fCBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXNbc2hvcnRoYW5kXSA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuXG5cbi8vTm9kZSBjb25zdHJ1Y3Rpb25cbmV4cG9ydHMuY3JlYXRlRG9jdW1lbnQgPVxuZXhwb3J0cy5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6ICdyb290JyxcbiAgICAgICAgbmFtZTogJ3Jvb3QnLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH0pO1xufTtcblxuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcbiAgICB2YXIgYXR0cmlicyA9IHt9LFxuICAgICAgICBhdHRyaWJzTmFtZXNwYWNlID0ge30sXG4gICAgICAgIGF0dHJpYnNQcmVmaXggPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGF0dHJOYW1lID0gYXR0cnNbaV0ubmFtZTtcblxuICAgICAgICBhdHRyaWJzW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnZhbHVlO1xuICAgICAgICBhdHRyaWJzTmFtZXNwYWNlW2F0dHJOYW1lXSA9IGF0dHJzW2ldLm5hbWVzcGFjZTtcbiAgICAgICAgYXR0cmlic1ByZWZpeFthdHRyTmFtZV0gPSBhdHRyc1tpXS5wcmVmaXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBOb2RlKHtcbiAgICAgICAgdHlwZTogdGFnTmFtZSA9PT0gJ3NjcmlwdCcgfHwgdGFnTmFtZSA9PT0gJ3N0eWxlJyA/IHRhZ05hbWUgOiAndGFnJyxcbiAgICAgICAgbmFtZTogdGFnTmFtZSxcbiAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2VVUkksXG4gICAgICAgIGF0dHJpYnM6IGF0dHJpYnMsXG4gICAgICAgICd4LWF0dHJpYnNOYW1lc3BhY2UnOiBhdHRyaWJzTmFtZXNwYWNlLFxuICAgICAgICAneC1hdHRyaWJzUHJlZml4JzogYXR0cmlic1ByZWZpeCxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICB9KTtcbn07XG5cbmV4cG9ydHMuY3JlYXRlQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHJldHVybiBuZXcgTm9kZSh7XG4gICAgICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICBwcmV2OiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgfSk7XG59O1xuXG52YXIgY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IE5vZGUoe1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIGRhdGE6IHZhbHVlLFxuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIHByZXY6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICB9KTtcbn07XG5cblxuLy9UcmVlIG11dGF0aW9uXG5leHBvcnRzLnNldERvY3VtZW50VHlwZSA9IGZ1bmN0aW9uIChkb2N1bWVudCwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XG4gICAgdmFyIGRhdGEgPSBEb2N0eXBlLnNlcmlhbGl6ZUNvbnRlbnQobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSxcbiAgICAgICAgZG9jdHlwZU5vZGUgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZG9jdW1lbnQuY2hpbGRyZW5baV0udHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgZG9jdW1lbnQuY2hpbGRyZW5baV0ubmFtZSA9PT0gJyFkb2N0eXBlJykge1xuICAgICAgICAgICAgZG9jdHlwZU5vZGUgPSBkb2N1bWVudC5jaGlsZHJlbltpXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRvY3R5cGVOb2RlKSB7XG4gICAgICAgIGRvY3R5cGVOb2RlLmRhdGEgPSBkYXRhO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1uYW1lJ10gPSBuYW1lO1xuICAgICAgICBkb2N0eXBlTm9kZVsneC1wdWJsaWNJZCddID0gcHVibGljSWQ7XG4gICAgICAgIGRvY3R5cGVOb2RlWyd4LXN5c3RlbUlkJ10gPSBzeXN0ZW1JZDtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgYXBwZW5kQ2hpbGQoZG9jdW1lbnQsIG5ldyBOb2RlKHtcbiAgICAgICAgICAgIHR5cGU6ICdkaXJlY3RpdmUnLFxuICAgICAgICAgICAgbmFtZTogJyFkb2N0eXBlJyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAneC1uYW1lJzogbmFtZSxcbiAgICAgICAgICAgICd4LXB1YmxpY0lkJzogcHVibGljSWQsXG4gICAgICAgICAgICAneC1zeXN0ZW1JZCc6IHN5c3RlbUlkXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbn07XG5cbmV4cG9ydHMuc2V0UXVpcmtzTW9kZSA9IGZ1bmN0aW9uIChkb2N1bWVudCkge1xuICAgIGRvY3VtZW50LnF1aXJrc01vZGUgPSB0cnVlO1xufTtcblxuZXhwb3J0cy5pc1F1aXJrc01vZGUgPSBmdW5jdGlvbiAoZG9jdW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzTW9kZTtcbn07XG5cbnZhciBhcHBlbmRDaGlsZCA9IGV4cG9ydHMuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgbmV3Tm9kZSkge1xuICAgIHZhciBwcmV2ID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgbmV3Tm9kZS5wcmV2ID0gcHJldjtcbiAgICB9XG5cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnB1c2gobmV3Tm9kZSk7XG4gICAgbmV3Tm9kZS5wYXJlbnQgPSBwYXJlbnROb2RlO1xufTtcblxudmFyIGluc2VydEJlZm9yZSA9IGV4cG9ydHMuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICB2YXIgaW5zZXJ0aW9uSWR4ID0gcGFyZW50Tm9kZS5jaGlsZHJlbi5pbmRleE9mKHJlZmVyZW5jZU5vZGUpLFxuICAgICAgICBwcmV2ID0gcmVmZXJlbmNlTm9kZS5wcmV2O1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgbmV3Tm9kZS5wcmV2ID0gcHJldjtcbiAgICB9XG5cbiAgICByZWZlcmVuY2VOb2RlLnByZXYgPSBuZXdOb2RlO1xuICAgIG5ld05vZGUubmV4dCA9IHJlZmVyZW5jZU5vZGU7XG5cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld05vZGUpO1xuICAgIG5ld05vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcbn07XG5cbmV4cG9ydHMuZGV0YWNoTm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKG5vZGUucGFyZW50KSB7XG4gICAgICAgIHZhciBpZHggPSBub2RlLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKG5vZGUpLFxuICAgICAgICAgICAgcHJldiA9IG5vZGUucHJldixcbiAgICAgICAgICAgIG5leHQgPSBub2RlLm5leHQ7XG5cbiAgICAgICAgbm9kZS5wcmV2ID0gbnVsbDtcbiAgICAgICAgbm9kZS5uZXh0ID0gbnVsbDtcblxuICAgICAgICBpZiAocHJldilcbiAgICAgICAgICAgIHByZXYubmV4dCA9IG5leHQ7XG5cbiAgICAgICAgaWYgKG5leHQpXG4gICAgICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xuXG4gICAgICAgIG5vZGUucGFyZW50LmNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xuICAgICAgICBub2RlLnBhcmVudCA9IG51bGw7XG4gICAgfVxufTtcblxuZXhwb3J0cy5pbnNlcnRUZXh0ID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIHRleHQpIHtcbiAgICB2YXIgbGFzdENoaWxkID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQudHlwZSA9PT0gJ3RleHQnKVxuICAgICAgICBsYXN0Q2hpbGQuZGF0YSArPSB0ZXh0O1xuICAgIGVsc2VcbiAgICAgICAgYXBwZW5kQ2hpbGQocGFyZW50Tm9kZSwgY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xufTtcblxuZXhwb3J0cy5pbnNlcnRUZXh0QmVmb3JlID0gZnVuY3Rpb24gKHBhcmVudE5vZGUsIHRleHQsIHJlZmVyZW5jZU5vZGUpIHtcbiAgICB2YXIgcHJldk5vZGUgPSBwYXJlbnROb2RlLmNoaWxkcmVuW3BhcmVudE5vZGUuY2hpbGRyZW4uaW5kZXhPZihyZWZlcmVuY2VOb2RlKSAtIDFdO1xuXG4gICAgaWYgKHByZXZOb2RlICYmIHByZXZOb2RlLnR5cGUgPT09ICd0ZXh0JylcbiAgICAgICAgcHJldk5vZGUuZGF0YSArPSB0ZXh0O1xuICAgIGVsc2VcbiAgICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpLCByZWZlcmVuY2VOb2RlKTtcbn07XG5cbmV4cG9ydHMuYWRvcHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHJlY2lwaWVudE5vZGUsIGF0dHJzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYXR0ck5hbWUgPSBhdHRyc1tpXS5uYW1lO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcmVjaXBpZW50Tm9kZS5hdHRyaWJzW2F0dHJOYW1lXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGUuYXR0cmlic1thdHRyTmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGVbJ3gtYXR0cmlic05hbWVzcGFjZSddW2F0dHJOYW1lXSA9IGF0dHJzW2ldLm5hbWVzcGFjZTtcbiAgICAgICAgICAgIHJlY2lwaWVudE5vZGVbJ3gtYXR0cmlic1ByZWZpeCddW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnByZWZpeDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblxuLy9UcmVlIHRyYXZlcnNpbmdcbmV4cG9ydHMuZ2V0Rmlyc3RDaGlsZCA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW5bMF07XG59O1xuXG5leHBvcnRzLmdldENoaWxkTm9kZXMgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuO1xufTtcblxuZXhwb3J0cy5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5wYXJlbnQ7XG59O1xuXG5leHBvcnRzLmdldEF0dHJMaXN0ID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgYXR0ckxpc3QgPSBbXTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gbm9kZS5hdHRyaWJzKSB7XG4gICAgICAgIGlmIChub2RlLmF0dHJpYnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIGF0dHJMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG5vZGUuYXR0cmlic1tuYW1lXSxcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5vZGVbJ3gtYXR0cmlic05hbWVzcGFjZSddW25hbWVdLFxuICAgICAgICAgICAgICAgIHByZWZpeDogbm9kZVsneC1hdHRyaWJzUHJlZml4J11bbmFtZV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dHJMaXN0O1xufTtcblxuXG4vL05vZGUgZGF0YVxuZXhwb3J0cy5nZXRUYWdOYW1lID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5uYW1lO1xufTtcblxuZXhwb3J0cy5nZXROYW1lc3BhY2VVUkkgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50Lm5hbWVzcGFjZTtcbn07XG5cbmV4cG9ydHMuZ2V0VGV4dE5vZGVDb250ZW50ID0gZnVuY3Rpb24gKHRleHROb2RlKSB7XG4gICAgcmV0dXJuIHRleHROb2RlLmRhdGE7XG59O1xuXG5leHBvcnRzLmdldENvbW1lbnROb2RlQ29udGVudCA9IGZ1bmN0aW9uIChjb21tZW50Tm9kZSkge1xuICAgIHJldHVybiBjb21tZW50Tm9kZS5kYXRhO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlTmFtZSA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xuICAgIHJldHVybiBkb2N0eXBlTm9kZVsneC1uYW1lJ107XG59O1xuXG5leHBvcnRzLmdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZCA9IGZ1bmN0aW9uIChkb2N0eXBlTm9kZSkge1xuICAgIHJldHVybiBkb2N0eXBlTm9kZVsneC1wdWJsaWNJZCddO1xufTtcblxuZXhwb3J0cy5nZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQgPSBmdW5jdGlvbiAoZG9jdHlwZU5vZGUpIHtcbiAgICByZXR1cm4gZG9jdHlwZU5vZGVbJ3gtc3lzdGVtSWQnXTtcbn07XG5cblxuLy9Ob2RlIHR5cGVzXG5leHBvcnRzLmlzVGV4dE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09ICd0ZXh0Jztcbn07XG5cbmV4cG9ydHMuaXNDb21tZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ2NvbW1lbnQnO1xufTtcblxuZXhwb3J0cy5pc0RvY3VtZW50VHlwZU5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09ICdkaXJlY3RpdmUnICYmIG5vZGUubmFtZSA9PT0gJyFkb2N0eXBlJztcbn07XG5cbmV4cG9ydHMuaXNFbGVtZW50Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuICEhbm9kZS5hdHRyaWJzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbi8vQ29uc3RcclxudmFyIE5PQUhfQVJLX0NBUEFDSVRZID0gMztcclxuXHJcbi8vTGlzdCBvZiBmb3JtYXR0aW5nIGVsZW1lbnRzXHJcbnZhciBGb3JtYXR0aW5nRWxlbWVudExpc3QgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0cmVlQWRhcHRlcikge1xyXG4gICAgdGhpcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5lbnRyaWVzID0gW107XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XHJcbiAgICB0aGlzLmJvb2ttYXJrID0gbnVsbDtcclxufTtcclxuXHJcbi8vRW50cnkgdHlwZXNcclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWSA9ICdNQVJLRVJfRU5UUlknO1xyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSA9ICdFTEVNRU5UX0VOVFJZJztcclxuXHJcbi8vTm9haCBBcmsncyBjb25kaXRpb25cclxuLy9PUFRJTUlaQVRJT046IGF0IGZpcnN0IHdlIHRyeSB0byBmaW5kIHBvc3NpYmxlIGNhbmRpZGF0ZXMgZm9yIGV4Y2x1c2lvbiB1c2luZ1xyXG4vL2xpZ2h0d2VpZ2h0IGhldXJpc3RpY3Mgd2l0aG91dCB0aG9yb3VnaCBhdHRyaWJ1dGVzIGNoZWNrLlxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLl9nZXROb2FoQXJrQ29uZGl0aW9uQ2FuZGlkYXRlcyA9IGZ1bmN0aW9uIChuZXdFbGVtZW50KSB7XHJcbiAgICB2YXIgY2FuZGlkYXRlcyA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLmxlbmd0aCA+PSBOT0FIX0FSS19DQVBBQ0lUWSkge1xyXG4gICAgICAgIHZhciBuZUF0dHJzTGVuZ3RoID0gdGhpcy50cmVlQWRhcHRlci5nZXRBdHRyTGlzdChuZXdFbGVtZW50KS5sZW5ndGgsXHJcbiAgICAgICAgICAgIG5lVGFnTmFtZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShuZXdFbGVtZW50KSxcclxuICAgICAgICAgICAgbmVOYW1lc3BhY2VVUkkgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShuZXdFbGVtZW50KTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZW50cnkuZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QoZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSBuZVRhZ05hbWUgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpID09PSBuZU5hbWVzcGFjZVVSSSAmJlxyXG4gICAgICAgICAgICAgICAgZWxlbWVudEF0dHJzLmxlbmd0aCA9PT0gbmVBdHRyc0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHtpZHg6IGksIGF0dHJzOiBlbGVtZW50QXR0cnN9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2FuZGlkYXRlcy5sZW5ndGggPCBOT0FIX0FSS19DQVBBQ0lUWSA/IFtdIDogY2FuZGlkYXRlcztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuX2Vuc3VyZU5vYWhBcmtDb25kaXRpb24gPSBmdW5jdGlvbiAobmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGNhbmRpZGF0ZXMgPSB0aGlzLl9nZXROb2FoQXJrQ29uZGl0aW9uQ2FuZGlkYXRlcyhuZXdFbGVtZW50KSxcclxuICAgICAgICBjTGVuZ3RoID0gY2FuZGlkYXRlcy5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGNMZW5ndGgpIHtcclxuICAgICAgICB2YXIgbmVBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QobmV3RWxlbWVudCksXHJcbiAgICAgICAgICAgIG5lQXR0cnNMZW5ndGggPSBuZUF0dHJzLmxlbmd0aCxcclxuICAgICAgICAgICAgbmVBdHRyc01hcCA9IHt9O1xyXG5cclxuICAgICAgICAvL05PVEU6IGJ1aWxkIGF0dHJzIG1hcCBmb3IgdGhlIG5ldyBlbGVtZW50IHNvIHdlIGNhbiBwZXJmb3JtIGZhc3QgbG9va3Vwc1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmVBdHRyc0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBuZUF0dHIgPSBuZUF0dHJzW2ldO1xyXG5cclxuICAgICAgICAgICAgbmVBdHRyc01hcFtuZUF0dHIubmFtZV0gPSBuZUF0dHIudmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5lQXR0cnNMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNMZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNBdHRyID0gY2FuZGlkYXRlc1tqXS5hdHRyc1tpXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmVBdHRyc01hcFtjQXR0ci5uYW1lXSAhPT0gY0F0dHIudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnNwbGljZShqLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBjTGVuZ3RoLS07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoIDwgTk9BSF9BUktfQ0FQQUNJVFkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL05PVEU6IHJlbW92ZSBib3R0b21tb3N0IGNhbmRpZGF0ZXMgdW50aWwgTm9haCdzIEFyayBjb25kaXRpb24gd2lsbCBub3QgYmUgbWV0XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IGNMZW5ndGggLSAxOyBpID49IE5PQUhfQVJLX0NBUEFDSVRZIC0gMTsgaS0tKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoY2FuZGlkYXRlc1tpXS5pZHgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8vTXV0YXRpb25zXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuaW5zZXJ0TWFya2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5lbnRyaWVzLnB1c2goe3R5cGU6IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUll9KTtcclxuICAgIHRoaXMubGVuZ3RoKys7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLnB1c2hFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHRva2VuKSB7XHJcbiAgICB0aGlzLl9lbnN1cmVOb2FoQXJrQ29uZGl0aW9uKGVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuZW50cmllcy5wdXNoKHtcclxuICAgICAgICB0eXBlOiBGb3JtYXR0aW5nRWxlbWVudExpc3QuRUxFTUVOVF9FTlRSWSxcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgIHRva2VuOiB0b2tlblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sZW5ndGgrKztcclxufTtcclxuXHJcbkZvcm1hdHRpbmdFbGVtZW50TGlzdC5wcm90b3R5cGUuaW5zZXJ0RWxlbWVudEFmdGVyQm9va21hcmsgPSBmdW5jdGlvbiAoZWxlbWVudCwgdG9rZW4pIHtcclxuICAgIHZhciBib29rbWFya0lkeCA9IHRoaXMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICBmb3IgKDsgYm9va21hcmtJZHggPj0gMDsgYm9va21hcmtJZHgtLSkge1xyXG4gICAgICAgIGlmICh0aGlzLmVudHJpZXNbYm9va21hcmtJZHhdID09PSB0aGlzLmJvb2ttYXJrKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGJvb2ttYXJrSWR4ICsgMSwgMCwge1xyXG4gICAgICAgIHR5cGU6IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZLFxyXG4gICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQsXHJcbiAgICAgICAgdG9rZW46IHRva2VuXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmxlbmd0aCsrO1xyXG59O1xyXG5cclxuRm9ybWF0dGluZ0VsZW1lbnRMaXN0LnByb3RvdHlwZS5yZW1vdmVFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBpZiAodGhpcy5lbnRyaWVzW2ldID09PSBlbnRyeSkge1xyXG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmNsZWFyVG9MYXN0TWFya2VyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnRyaWVzLnBvcCgpO1xyXG5cclxuICAgICAgICB0aGlzLmxlbmd0aC0tO1xyXG5cclxuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gRm9ybWF0dGluZ0VsZW1lbnRMaXN0Lk1BUktFUl9FTlRSWSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vL1NlYXJjaFxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5NQVJLRVJfRU5UUlkpXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVudHJ5LmVsZW1lbnQpID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gZW50cnk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn07XHJcblxyXG5Gb3JtYXR0aW5nRWxlbWVudExpc3QucHJvdG90eXBlLmdldEVsZW1lbnRFbnRyeSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEZvcm1hdHRpbmdFbGVtZW50TGlzdC5FTEVNRU5UX0VOVFJZICYmIGVudHJ5LmVsZW1lbnQgPT0gZWxlbWVudClcclxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBPcGVuRWxlbWVudFN0YWNrID0gcmVxdWlyZSgnLi9vcGVuX2VsZW1lbnRfc3RhY2snKSxcbiAgICBUb2tlbml6ZXIgPSByZXF1aXJlKCcuLi90b2tlbml6YXRpb24vdG9rZW5pemVyJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cblxuLy9BbGlhc2VzXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTO1xuXG5cbmZ1bmN0aW9uIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIGNsb3NpbmdUb2tlbiwgdHJlZUFkYXB0ZXIpIHtcbiAgICB2YXIgbG9jID0gZWxlbWVudC5fX2xvY2F0aW9uO1xuXG4gICAgaWYgKCFsb2MpXG4gICAgICAgIHJldHVybjtcblxuICAgIGlmICghbG9jLnN0YXJ0VGFnKSB7XG4gICAgICAgIGxvYy5zdGFydFRhZyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBsb2Muc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IGxvYy5lbmRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2xvc2luZ1Rva2VuLmxvY2F0aW9uKSB7XG4gICAgICAgIHZhciB0biA9IHRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXG4gICAgICAgICAgICAvLyBOT1RFOiBGb3IgY2FzZXMgbGlrZSA8cD4gPHA+IDwvcD4gLSBGaXJzdCAncCcgY2xvc2VzIHdpdGhvdXQgYSBjbG9zaW5nIHRhZyBhbmRcbiAgICAgICAgICAgIC8vIGZvciBjYXNlcyBsaWtlIDx0ZD4gPHA+IDwvdGQ+IC0gJ3AnIGNsb3NlcyB3aXRob3V0IGEgY2xvc2luZyB0YWdcbiAgICAgICAgICAgIGlzQ2xvc2luZ0VuZFRhZyA9IGNsb3NpbmdUb2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG4gPT09IGNsb3NpbmdUb2tlbi50YWdOYW1lO1xuXG4gICAgICAgIGlmIChpc0Nsb3NpbmdFbmRUYWcpIHtcbiAgICAgICAgICAgIGxvYy5lbmRUYWcgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IGNsb3NpbmdUb2tlbi5sb2NhdGlvbi5zdGFydCxcbiAgICAgICAgICAgICAgICBlbmQ6IGNsb3NpbmdUb2tlbi5sb2NhdGlvbi5lbmRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsb2MuZW5kID0gY2xvc2luZ1Rva2VuLmxvY2F0aW9uLmVuZDtcbiAgICB9XG59XG5cbi8vTk9URTogcGF0Y2ggb3BlbiBlbGVtZW50cyBzdGFjaywgc28gd2UgY2FuIGFzc2lnbiBlbmQgbG9jYXRpb24gZm9yIHRoZSBlbGVtZW50c1xuZnVuY3Rpb24gcGF0Y2hPcGVuRWxlbWVudHNTdGFjayhzdGFjaywgcGFyc2VyKSB7XG4gICAgdmFyIHRyZWVBZGFwdGVyID0gcGFyc2VyLnRyZWVBZGFwdGVyO1xuXG4gICAgc3RhY2sucG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRFbmRMb2NhdGlvbih0aGlzLmN1cnJlbnQsIHBhcnNlci5jdXJyZW50VG9rZW4sIHRyZWVBZGFwdGVyKTtcbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wLmNhbGwodGhpcyk7XG4gICAgfTtcblxuICAgIHN0YWNrLnBvcEFsbFVwVG9IdG1sRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pXG4gICAgICAgICAgICBzZXRFbmRMb2NhdGlvbih0aGlzLml0ZW1zW2ldLCBwYXJzZXIuY3VycmVudFRva2VuLCB0cmVlQWRhcHRlcik7XG5cbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wQWxsVXBUb0h0bWxFbGVtZW50LmNhbGwodGhpcyk7XG4gICAgfTtcblxuICAgIHN0YWNrLnJlbW92ZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIHBhcnNlci5jdXJyZW50VG9rZW4sIHRyZWVBZGFwdGVyKTtcbiAgICAgICAgT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgfTtcbn1cblxuZXhwb3J0cy5hc3NpZ24gPSBmdW5jdGlvbiAocGFyc2VyKSB7XG4gICAgLy9OT1RFOiBvYnRhaW4gUGFyc2VyIHByb3RvIHRoaXMgd2F5IHRvIGF2b2lkIG1vZHVsZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgdmFyIHBhcnNlclByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHBhcnNlciksXG4gICAgICAgIHRyZWVBZGFwdGVyID0gcGFyc2VyLnRyZWVBZGFwdGVyO1xuXG5cbiAgICAvL05PVEU6IHBhdGNoIF9yZXNldCBtZXRob2RcbiAgICBwYXJzZXIuX3Jlc2V0ID0gZnVuY3Rpb24gKGh0bWwsIGRvY3VtZW50LCBmcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgcGFyc2VyUHJvdG8uX3Jlc2V0LmNhbGwodGhpcywgaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCk7XG5cbiAgICAgICAgdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XG5cbiAgICAgICAgcGF0Y2hPcGVuRWxlbWVudHNTdGFjayh0aGlzLm9wZW5FbGVtZW50cywgcGFyc2VyKTtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50ID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gdG9rZW47XG4gICAgICAgIHBhcnNlclByb3RvLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50LmNhbGwodGhpcywgdG9rZW4pO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX3Byb2Nlc3NUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgICAgICBwYXJzZXJQcm90by5fcHJvY2Vzc1Rva2VuLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIC8vTk9URTogPGJvZHk+IGFuZCA8aHRtbD4gYXJlIG5ldmVyIHBvcHBlZCBmcm9tIHRoZSBzdGFjaywgc28gd2UgbmVlZCB0byB1cGRhdGVkXG4gICAgICAgIC8vdGhlaXIgZW5kIGxvY2F0aW9uIGV4cGxpY2l0bHkuXG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuRU5EX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgKHRva2VuLnRhZ05hbWUgPT09ICQuSFRNTCB8fFxuICAgICAgICAgICAgKHRva2VuLnRhZ05hbWUgPT09ICQuQk9EWSAmJiB0aGlzLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQk9EWSkpKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0b2tlbi50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEVuZExvY2F0aW9uKGVsZW1lbnQsIHRva2VuLCB0cmVlQWRhcHRlcik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvL0RvY3R5cGVcbiAgICBwYXJzZXIuX3NldERvY3VtZW50VHlwZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICBwYXJzZXJQcm90by5fc2V0RG9jdW1lbnRUeXBlLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciBkb2N1bWVudENoaWxkcmVuID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKHRoaXMuZG9jdW1lbnQpLFxuICAgICAgICAgICAgY25MZW5ndGggPSBkb2N1bWVudENoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNuTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnRDaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy9FbGVtZW50c1xuICAgIHBhcnNlci5fYXR0YWNoRWxlbWVudFRvVHJlZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgIC8vTk9URTogX2F0dGFjaEVsZW1lbnRUb1RyZWUgaXMgY2FsbGVkIGZyb20gX2FwcGVuZEVsZW1lbnQsIF9pbnNlcnRFbGVtZW50IGFuZCBfaW5zZXJ0VGVtcGxhdGUgbWV0aG9kcy5cbiAgICAgICAgLy9TbyB3ZSB3aWxsIHVzZSB0b2tlbiBsb2NhdGlvbiBzdG9yZWQgaW4gdGhpcyBtZXRob2RzIGZvciB0aGUgZWxlbWVudC5cbiAgICAgICAgZWxlbWVudC5fX2xvY2F0aW9uID0gdGhpcy5hdHRhY2hhYmxlRWxlbWVudExvY2F0aW9uIHx8IG51bGw7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IG51bGw7XG4gICAgICAgIHBhcnNlclByb3RvLl9hdHRhY2hFbGVtZW50VG9UcmVlLmNhbGwodGhpcywgZWxlbWVudCk7XG4gICAgfTtcblxuICAgIHBhcnNlci5fYXBwZW5kRWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIHRoaXMuYXR0YWNoYWJsZUVsZW1lbnRMb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kRWxlbWVudC5jYWxsKHRoaXMsIHRva2VuLCBuYW1lc3BhY2VVUkkpO1xuICAgIH07XG5cbiAgICBwYXJzZXIuX2luc2VydEVsZW1lbnQgPSBmdW5jdGlvbiAodG9rZW4sIG5hbWVzcGFjZVVSSSkge1xuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydEVsZW1lbnQuY2FsbCh0aGlzLCB0b2tlbiwgbmFtZXNwYWNlVVJJKTtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICB0aGlzLmF0dGFjaGFibGVFbGVtZW50TG9jYXRpb24gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgcGFyc2VyUHJvdG8uX2luc2VydFRlbXBsYXRlLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciB0bXBsQ29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyh0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50KVswXTtcblxuICAgICAgICB0bXBsQ29udGVudC5fX2xvY2F0aW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudC5fX2xvY2F0aW9uID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy9Db21tZW50c1xuICAgIHBhcnNlci5fYXBwZW5kQ29tbWVudE5vZGUgPSBmdW5jdGlvbiAodG9rZW4sIHBhcmVudCkge1xuICAgICAgICBwYXJzZXJQcm90by5fYXBwZW5kQ29tbWVudE5vZGUuY2FsbCh0aGlzLCB0b2tlbiwgcGFyZW50KTtcblxuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcbiAgICAgICAgICAgIGNvbW1lbnROb2RlID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgY29tbWVudE5vZGUuX19sb2NhdGlvbiA9IHRva2VuLmxvY2F0aW9uO1xuICAgIH07XG5cbiAgICAvL1RleHRcbiAgICBwYXJzZXIuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9OT1RFOiBzdG9yZSBsYXN0IGZvc3RlciBwYXJlbnRpbmcgbG9jYXRpb24sIHNvIHdlIHdpbGwgYmUgYWJsZSB0byBmaW5kIGluc2VydGVkIHRleHRcbiAgICAgICAgLy9pbiBjYXNlIG9mIGZvc3RlciBwYXJlbnRpbmdcbiAgICAgICAgdGhpcy5sYXN0Rm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBwYXJzZXJQcm90by5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbjtcbiAgICB9O1xuXG4gICAgcGFyc2VyLl9pbnNlcnRDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgIHBhcnNlclByb3RvLl9pbnNlcnRDaGFyYWN0ZXJzLmNhbGwodGhpcywgdG9rZW4pO1xuXG4gICAgICAgIHZhciBoYXNGb3N0ZXJQYXJlbnQgPSB0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpLFxuICAgICAgICAgICAgcGFyZW50aW5nTG9jYXRpb24gPSB0aGlzLmxhc3RGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbixcbiAgICAgICAgICAgIHBhcmVudCA9IChoYXNGb3N0ZXJQYXJlbnQgJiYgcGFyZW50aW5nTG9jYXRpb24ucGFyZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudFRtcGxDb250ZW50IHx8XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50LFxuICAgICAgICAgICAgc2libGluZ3MgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KSxcbiAgICAgICAgICAgIHRleHROb2RlSWR4ID0gaGFzRm9zdGVyUGFyZW50ICYmIHBhcmVudGluZ0xvY2F0aW9uLmJlZm9yZUVsZW1lbnQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5ncy5pbmRleE9mKHBhcmVudGluZ0xvY2F0aW9uLmJlZm9yZUVsZW1lbnQpIC0gMSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmdzLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICB0ZXh0Tm9kZSA9IHNpYmxpbmdzW3RleHROb2RlSWR4XTtcblxuICAgICAgICAvL05PVEU6IGlmIHdlIGhhdmUgbG9jYXRpb24gYXNzaWduZWQgYnkgYW5vdGhlciB0b2tlbiwgdGhlbiBqdXN0IHVwZGF0ZSBlbmQgcG9zaXRpb25cbiAgICAgICAgaWYgKHRleHROb2RlLl9fbG9jYXRpb24pXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uLmVuZCA9IHRva2VuLmxvY2F0aW9uLmVuZDtcblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0ZXh0Tm9kZS5fX2xvY2F0aW9uID0gdG9rZW4ubG9jYXRpb247XG4gICAgfTtcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciBIVE1MID0gcmVxdWlyZSgnLi4vY29tbW9uL2h0bWwnKTtcclxuXHJcbi8vQWxpYXNlc1xyXG52YXIgJCA9IEhUTUwuVEFHX05BTUVTLFxyXG4gICAgTlMgPSBIVE1MLk5BTUVTUEFDRVM7XHJcblxyXG4vL0VsZW1lbnQgdXRpbHNcclxuXHJcbi8vT1BUSU1JWkFUSU9OOiBJbnRlZ2VyIGNvbXBhcmlzb25zIGFyZSBsb3ctY29zdCwgc28gd2UgY2FuIHVzZSB2ZXJ5IGZhc3QgdGFnIG5hbWUgbGVuZ3RoIGZpbHRlcnMgaGVyZS5cclxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXHJcbmZ1bmN0aW9uIGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRuKSB7XHJcbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlA7XHJcblxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlJQIHx8IHRuID09PSAkLlJUIHx8IHRuID09PSAkLkREIHx8IHRuID09PSAkLkRUIHx8IHRuID09PSAkLkxJO1xyXG5cclxuICAgICAgICBjYXNlIDY6XHJcbiAgICAgICAgICAgIHJldHVybiB0biA9PT0gJC5PUFRJT047XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLk9QVEdST1VQO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTY29waW5nRWxlbWVudCh0biwgbnMpIHtcclxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NSSB8fCB0biA9PT0gJC5NTyB8fCB0biA9PSAkLk1OIHx8IHRuID09PSAkLk1TKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRFU0MpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1URVhUKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUw7XHJcblxyXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5USVRMRSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBucyA9PT0gTlMuU1ZHO1xyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgcmV0dXJuICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKSAmJiBucyA9PT0gTlMuSFRNTDtcclxuXHJcbiAgICAgICAgY2FzZSA3OlxyXG4gICAgICAgICAgICByZXR1cm4gKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuTUFSUVVFRSkgJiYgbnMgPT09IE5TLkhUTUw7XHJcblxyXG4gICAgICAgIGNhc2UgODpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MO1xyXG5cclxuICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICByZXR1cm4gdG4gPT09ICQuRk9SRUlHTl9PQkpFQ1QgJiYgbnMgPT09IE5TLlNWRztcclxuXHJcbiAgICAgICAgY2FzZSAxNDpcclxuICAgICAgICAgICAgcmV0dXJuIHRuID09PSAkLkFOTk9UQVRJT05fWE1MICYmIG5zID09PSBOUy5NQVRITUw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vL1N0YWNrIG9mIG9wZW4gZWxlbWVudHNcclxudmFyIE9wZW5FbGVtZW50U3RhY2sgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb2N1bWVudCwgdHJlZUFkYXB0ZXIpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AgPSAtMTtcclxuICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIHRoaXMuY3VycmVudCA9IGRvY3VtZW50O1xyXG4gICAgdGhpcy5jdXJyZW50VGFnTmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmN1cnJlbnRUbXBsQ29udGVudCA9IG51bGw7XHJcbiAgICB0aGlzLnRtcGxDb3VudCA9IDA7XHJcbiAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XHJcbn07XHJcblxyXG4vL0luZGV4IG9mIGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2luZGV4T2YgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IC0xO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlkeCA9IGk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpZHg7XHJcbn07XHJcblxyXG4vL1VwZGF0ZSBjdXJyZW50IGVsZW1lbnRcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2lzSW5UZW1wbGF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KSA9PT0gTlMuSFRNTDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLl91cGRhdGVDdXJyZW50RWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMuaXRlbXNbdGhpcy5zdGFja1RvcF07XHJcbiAgICB0aGlzLmN1cnJlbnRUYWdOYW1lID0gdGhpcy5jdXJyZW50ICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLmN1cnJlbnQpO1xyXG5cclxuICAgIHRoaXMuY3VycmVudFRtcGxDb250ZW50ID0gdGhpcy5faXNJblRlbXBsYXRlKCkgPyB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXModGhpcy5jdXJyZW50KVswXSA6IG51bGw7XHJcbn07XHJcblxyXG4vL011dGF0aW9uc1xyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHRoaXMuaXRlbXNbKyt0aGlzLnN0YWNrVG9wXSA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xyXG5cclxuICAgIGlmICh0aGlzLl9pc0luVGVtcGxhdGUoKSlcclxuICAgICAgICB0aGlzLnRtcGxDb3VudCsrO1xyXG5cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuc3RhY2tUb3AtLTtcclxuXHJcbiAgICBpZiAodGhpcy50bXBsQ291bnQgPiAwICYmIHRoaXMuX2lzSW5UZW1wbGF0ZSgpKVxyXG4gICAgICAgIHRoaXMudG1wbENvdW50LS07XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiAob2xkRWxlbWVudCwgbmV3RWxlbWVudCkge1xyXG4gICAgdmFyIGlkeCA9IHRoaXMuX2luZGV4T2Yob2xkRWxlbWVudCk7XHJcbiAgICB0aGlzLml0ZW1zW2lkeF0gPSBuZXdFbGVtZW50O1xyXG5cclxuICAgIGlmIChpZHggPT09IHRoaXMuc3RhY2tUb3ApXHJcbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmluc2VydEFmdGVyID0gZnVuY3Rpb24gKHJlZmVyZW5jZUVsZW1lbnQsIG5ld0VsZW1lbnQpIHtcclxuICAgIHZhciBpbnNlcnRpb25JZHggPSB0aGlzLl9pbmRleE9mKHJlZmVyZW5jZUVsZW1lbnQpICsgMTtcclxuXHJcbiAgICB0aGlzLml0ZW1zLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld0VsZW1lbnQpO1xyXG5cclxuICAgIGlmIChpbnNlcnRpb25JZHggPT0gKyt0aGlzLnN0YWNrVG9wKVxyXG4gICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRhZ05hbWVQb3BwZWQgPSBmdW5jdGlvbiAodGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWU7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPiAtMSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMuY3VycmVudFRhZ05hbWUsXHJcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5jdXJyZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsRWxlbWVudFBvcHBlZCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHBvcHBlZEVsZW1lbnQgPSB0aGlzLmN1cnJlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMucG9wKCk7XHJcblxyXG4gICAgICAgIGlmIChwb3BwZWRFbGVtZW50ID09PSBlbGVtZW50KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcFVudGlsTnVtYmVyZWRIZWFkZXJQb3BwZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5zdGFja1RvcCA+IC0xKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy5jdXJyZW50VGFnTmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnBvcEFsbFVwVG9IdG1sRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIC8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCByb290IDxodG1sPiBlbGVtZW50IGlzIGFsd2F5cyBmaXJzdCBpbiB0aGUgb3BlbiBlbGVtZW50IHN0YWNrLCBzb1xyXG4gICAgLy93ZSBwZXJmb3JtIHRoaXMgZmFzdCBzdGFjayBjbGVhbiB1cC5cclxuICAgIHRoaXMuc3RhY2tUb3AgPSAwO1xyXG4gICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEFCTEUgJiYgdGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5URU1QTEFURSAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRCT0RZICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEZPT1QgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRIRUFEICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuVEVNUExBVEUgJiZcclxuICAgICAgICAgICB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkhUTUwpIHtcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY2xlYXJCYWNrVG9UYWJsZVJvd0NvbnRleHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB3aGlsZSAodGhpcy5jdXJyZW50VGFnTmFtZSAhPT0gJC5UUiAmJiB0aGlzLmN1cnJlbnRUYWdOYW1lICE9PSAkLlRFTVBMQVRFICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09ICQuSFRNTClcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2ldID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLnN0YWNrVG9wLS07XHJcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8vU2VhcmNoXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgLy9Qcm9wZXJseSBuZXN0ZWQgPGJvZHk+IGVsZW1lbnQgKHNob3VsZCBiZSBzZWNvbmQgZWxlbWVudCBpbiBzdGFjaykuXHJcbiAgICB2YXIgZWxlbWVudCA9IHRoaXMuaXRlbXNbMV07XHJcbiAgICByZXR1cm4gZWxlbWVudCAmJiB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09ICQuQk9EWSA/IGVsZW1lbnQgOiBudWxsO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGV4T2YoZWxlbWVudCkgPiAtMTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmdldENvbW1vbkFuY2VzdG9yID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgIHZhciBlbGVtZW50SWR4ID0gdGhpcy5faW5kZXhPZihlbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gLS1lbGVtZW50SWR4ID49IDAgPyB0aGlzLml0ZW1zW2VsZW1lbnRJZHhdIDogbnVsbDtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YWNrVG9wID09PSAwICYmIHRoaXMuY3VycmVudFRhZ05hbWUgPT09ICQuSFRNTDtcclxufTtcclxuXHJcbi8vRWxlbWVudCBpbiBzY29wZVxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmIChpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc051bWJlcmVkSGVhZGVySW5TY29wZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2KVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGlzU2NvcGluZ0VsZW1lbnQodG4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5MaXN0SXRlbVNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgoKHRuID09PSAkLlVMIHx8IHRuID09PSAkLk9MKSAmJiBucyA9PT0gTlMuSFRNTCkgfHwgaXNTY29waW5nRWxlbWVudCh0biwgbnMpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNJbkJ1dHRvblNjb3BlID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICgodG4gPT09ICQuQlVUVE9OICYmIG5zID09PSBOUy5IVE1MKSB8fCBpc1Njb3BpbmdFbGVtZW50KHRuLCBucykpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbk9wZW5FbGVtZW50U3RhY2sucHJvdG90eXBlLmhhc0luVGFibGVTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAoKHRuID09PSAkLlRBQkxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLkhUTUwpICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG5PcGVuRWxlbWVudFN0YWNrLnByb3RvdHlwZS5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVEZPT1QpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcclxuXHJcbiAgICAgICAgaWYgKCh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5IVE1MKSAmJiBucyA9PT0gTlMuSFRNTClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzSW5TZWxlY3RTY29wZSA9IGZ1bmN0aW9uICh0YWdOYW1lKSB7XHJcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUodGhpcy5pdGVtc1tpXSk7XHJcblxyXG4gICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIHZhciBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xyXG5cclxuICAgICAgICBpZiAodG4gIT09ICQuT1BUSU9OICYmIHRuICE9PSAkLk9QVEdST1VQICYmIG5zID09PSBOUy5IVE1MKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG4vL0ltcGxpZWQgZW5kIHRhZ3NcclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHdoaWxlIChpc0ltcGxpZWRFbmRUYWdSZXF1aXJlZCh0aGlzLmN1cnJlbnRUYWdOYW1lKSlcclxuICAgICAgICB0aGlzLnBvcCgpO1xyXG59O1xyXG5cclxuT3BlbkVsZW1lbnRTdGFjay5wcm90b3R5cGUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24gPSBmdW5jdGlvbiAoZXhjbHVzaW9uVGFnTmFtZSkge1xyXG4gICAgd2hpbGUgKGlzSW1wbGllZEVuZFRhZ1JlcXVpcmVkKHRoaXMuY3VycmVudFRhZ05hbWUpICYmIHRoaXMuY3VycmVudFRhZ05hbWUgIT09IGV4Y2x1c2lvblRhZ05hbWUpXHJcbiAgICAgICAgdGhpcy5wb3AoKTtcclxufTtcclxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVG9rZW5pemVyID0gcmVxdWlyZSgnLi4vdG9rZW5pemF0aW9uL3Rva2VuaXplcicpLFxuICAgIE9wZW5FbGVtZW50U3RhY2sgPSByZXF1aXJlKCcuL29wZW5fZWxlbWVudF9zdGFjaycpLFxuICAgIEZvcm1hdHRpbmdFbGVtZW50TGlzdCA9IHJlcXVpcmUoJy4vZm9ybWF0dGluZ19lbGVtZW50X2xpc3QnKSxcbiAgICBMb2NhdGlvbkluZm9NaXhpbiA9IHJlcXVpcmUoJy4vbG9jYXRpb25faW5mb19taXhpbicpLFxuICAgIERlZmF1bHRUcmVlQWRhcHRlciA9IHJlcXVpcmUoJy4uL3RyZWVfYWRhcHRlcnMvZGVmYXVsdCcpLFxuICAgIERvY3R5cGUgPSByZXF1aXJlKCcuLi9jb21tb24vZG9jdHlwZScpLFxuICAgIEZvcmVpZ25Db250ZW50ID0gcmVxdWlyZSgnLi4vY29tbW9uL2ZvcmVpZ25fY29udGVudCcpLFxuICAgIFV0aWxzID0gcmVxdWlyZSgnLi4vY29tbW9uL3V0aWxzJyksXG4gICAgVU5JQ09ERSA9IHJlcXVpcmUoJy4uL2NvbW1vbi91bmljb2RlJyksXG4gICAgSFRNTCA9IHJlcXVpcmUoJy4uL2NvbW1vbi9odG1sJyk7XG5cbi8vQWxpYXNlc1xudmFyICQgPSBIVE1MLlRBR19OQU1FUyxcbiAgICBOUyA9IEhUTUwuTkFNRVNQQUNFUyxcbiAgICBBVFRSUyA9IEhUTUwuQVRUUlM7XG5cbi8vRGVmYXVsdCBvcHRpb25zXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIGRlY29kZUh0bWxFbnRpdGllczogdHJ1ZSxcbiAgICBsb2NhdGlvbkluZm86IGZhbHNlXG59O1xuXG4vL01pc2MgY29uc3RhbnRzXG52YXIgU0VBUkNIQUJMRV9JTkRFWF9ERUZBVUxUX1BST01QVCA9ICdUaGlzIGlzIGEgc2VhcmNoYWJsZSBpbmRleC4gRW50ZXIgc2VhcmNoIGtleXdvcmRzOiAnLFxuICAgIFNFQVJDSEFCTEVfSU5ERVhfSU5QVVRfTkFNRSA9ICdpc2luZGV4JyxcbiAgICBISURERU5fSU5QVVRfVFlQRSA9ICdoaWRkZW4nO1xuXG4vL0Fkb3B0aW9uIGFnZW5jeSBsb29wcyBpdGVyYXRpb24gY291bnRcbnZhciBBQV9PVVRFUl9MT09QX0lURVIgPSA4LFxuICAgIEFBX0lOTkVSX0xPT1BfSVRFUiA9IDM7XG5cbi8vSW5zZXJ0aW9uIG1vZGVzXG52YXIgSU5JVElBTF9NT0RFID0gJ0lOSVRJQUxfTU9ERScsXG4gICAgQkVGT1JFX0hUTUxfTU9ERSA9ICdCRUZPUkVfSFRNTF9NT0RFJyxcbiAgICBCRUZPUkVfSEVBRF9NT0RFID0gJ0JFRk9SRV9IRUFEX01PREUnLFxuICAgIElOX0hFQURfTU9ERSA9ICdJTl9IRUFEX01PREUnLFxuICAgIEFGVEVSX0hFQURfTU9ERSA9ICdBRlRFUl9IRUFEX01PREUnLFxuICAgIElOX0JPRFlfTU9ERSA9ICdJTl9CT0RZX01PREUnLFxuICAgIFRFWFRfTU9ERSA9ICdURVhUX01PREUnLFxuICAgIElOX1RBQkxFX01PREUgPSAnSU5fVEFCTEVfTU9ERScsXG4gICAgSU5fVEFCTEVfVEVYVF9NT0RFID0gJ0lOX1RBQkxFX1RFWFRfTU9ERScsXG4gICAgSU5fQ0FQVElPTl9NT0RFID0gJ0lOX0NBUFRJT05fTU9ERScsXG4gICAgSU5fQ09MVU1OX0dST1VQX01PREUgPSAnSU5fQ09MVU1OX0dST1VQX01PREUnLFxuICAgIElOX1RBQkxFX0JPRFlfTU9ERSA9ICdJTl9UQUJMRV9CT0RZX01PREUnLFxuICAgIElOX1JPV19NT0RFID0gJ0lOX1JPV19NT0RFJyxcbiAgICBJTl9DRUxMX01PREUgPSAnSU5fQ0VMTF9NT0RFJyxcbiAgICBJTl9TRUxFQ1RfTU9ERSA9ICdJTl9TRUxFQ1RfTU9ERScsXG4gICAgSU5fU0VMRUNUX0lOX1RBQkxFX01PREUgPSAnSU5fU0VMRUNUX0lOX1RBQkxFX01PREUnLFxuICAgIElOX1RFTVBMQVRFX01PREUgPSAnSU5fVEVNUExBVEVfTU9ERScsXG4gICAgQUZURVJfQk9EWV9NT0RFID0gJ0FGVEVSX0JPRFlfTU9ERScsXG4gICAgSU5fRlJBTUVTRVRfTU9ERSA9ICdJTl9GUkFNRVNFVF9NT0RFJyxcbiAgICBBRlRFUl9GUkFNRVNFVF9NT0RFID0gJ0FGVEVSX0ZSQU1FU0VUX01PREUnLFxuICAgIEFGVEVSX0FGVEVSX0JPRFlfTU9ERSA9ICdBRlRFUl9BRlRFUl9CT0RZX01PREUnLFxuICAgIEFGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREUgPSAnQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERSc7XG5cbi8vSW5zZXJ0aW9uIG1vZGUgcmVzZXQgbWFwXG52YXIgSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQID0ge307XG5cbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRSXSA9IElOX1JPV19NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEJPRFldID1cbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLlRIRUFEXSA9XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5URk9PVF0gPSBJTl9UQUJMRV9CT0RZX01PREU7XG5JTlNFUlRJT05fTU9ERV9SRVNFVF9NQVBbJC5DQVBUSU9OXSA9IElOX0NBUFRJT05fTU9ERTtcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkNPTEdST1VQXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuVEFCTEVdID0gSU5fVEFCTEVfTU9ERTtcbklOU0VSVElPTl9NT0RFX1JFU0VUX01BUFskLkJPRFldID0gSU5fQk9EWV9NT0RFO1xuSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQWyQuRlJBTUVTRVRdID0gSU5fRlJBTUVTRVRfTU9ERTtcblxuLy9UZW1wbGF0ZSBpbnNlcnRpb24gbW9kZSBzd2l0Y2ggbWFwXG52YXIgVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUCA9IHt9O1xuXG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ0FQVElPTl0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLkNPTEdST1VQXSA9XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuVEJPRFldID1cblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5URk9PVF0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIRUFEXSA9IElOX1RBQkxFX01PREU7XG5URU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQWyQuQ09MXSA9IElOX0NPTFVNTl9HUk9VUF9NT0RFO1xuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRSXSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcblRFTVBMQVRFX0lOU0VSVElPTl9NT0RFX1NXSVRDSF9NQVBbJC5URF0gPVxuVEVNUExBVEVfSU5TRVJUSU9OX01PREVfU1dJVENIX01BUFskLlRIXSA9IElOX1JPV19NT0RFO1xuXG4vL1Rva2VuIGhhbmRsZXJzIG1hcCBmb3IgaW5zZXJ0aW9uIG1vZGVzXG52YXIgXyA9IHt9O1xuXG5fW0lOSVRJQUxfTU9ERV0gPSB7fTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IHRva2VuSW5Jbml0aWFsTW9kZTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBkb2N0eXBlSW5Jbml0aWFsTW9kZTtcbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9XG5fW0lOSVRJQUxfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID1cbl9bSU5JVElBTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuSW5Jbml0aWFsTW9kZTtcblxuX1tCRUZPUkVfSFRNTF9NT0RFXSA9IHt9O1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUh0bWw7XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQkVGT1JFX0hUTUxfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0JFRk9SRV9IVE1MX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdCZWZvcmVIdG1sO1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdCZWZvcmVIdG1sO1xuX1tCRUZPUkVfSFRNTF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSHRtbDtcblxuX1tCRUZPUkVfSEVBRF9NT0RFXSA9IHt9O1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkJlZm9yZUhlYWQ7XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQkVGT1JFX0hFQURfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0JFRk9SRV9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdCZWZvcmVIZWFkO1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdCZWZvcmVIZWFkO1xuX1tCRUZPUkVfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQmVmb3JlSGVhZDtcblxuX1tJTl9IRUFEX01PREVdID0ge307XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluSGVhZDtcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fSEVBRF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkhlYWQ7XG5fW0lOX0hFQURfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5IZWFkO1xuX1tJTl9IRUFEX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gdG9rZW5JbkhlYWQ7XG5cbl9bQUZURVJfSEVBRF9NT0RFXSA9IHt9O1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckhlYWQ7XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0FGVEVSX0hFQURfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJIZWFkO1xuX1tBRlRFUl9IRUFEX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0FmdGVySGVhZDtcbl9bQUZURVJfSEVBRF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHRva2VuQWZ0ZXJIZWFkO1xuXG5fW0lOX0JPRFlfTU9ERV0gPSB7fTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5Cb2R5O1xuX1tJTl9CT0RZX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQm9keTtcbl9bSU5fQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tURVhUX01PREVdID0ge307XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tURVhUX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxuX1tURVhUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tURVhUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9XG5fW1RFWFRfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID1cbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tURVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luVGV4dDtcbl9bVEVYVF9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluVGV4dDtcblxuX1tJTl9UQUJMRV9NT0RFXSA9IHt9O1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gY2hhcmFjdGVySW5UYWJsZTtcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEFCTEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRhYmxlO1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblRhYmxlO1xuX1tJTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9UQUJMRV9URVhUX01PREVdID0ge307XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlVGV4dDtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJblRhYmxlVGV4dDtcbl9bSU5fVEFCTEVfVEVYVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPVxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPVxuX1tJTl9UQUJMRV9URVhUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9XG5fW0lOX1RBQkxFX1RFWFRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSB0b2tlbkluVGFibGVUZXh0O1xuXG5fW0lOX0NBUFRJT05fTU9ERV0gPSB7fTtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0NBUFRJT05fTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5DYXB0aW9uO1xuX1tJTl9DQVBUSU9OX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luQ2FwdGlvbjtcbl9bSU5fQ0FQVElPTl9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV0gPSB7fTtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5OVUxMX0NIQVJBQ1RFUl9UT0tFTl0gPSB0b2tlbkluQ29sdW1uR3JvdXA7XG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0NPTFVNTl9HUk9VUF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJbkNvbHVtbkdyb3VwO1xuX1tJTl9DT0xVTU5fR1JPVVBfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Db2x1bW5Hcm91cDtcbl9bSU5fQ09MVU1OX0dST1VQX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gZW9mSW5Cb2R5O1xuXG5fW0lOX1RBQkxFX0JPRFlfTU9ERV0gPSB7fTtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluVGFibGU7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fVEFCTEVfQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnSW5UYWJsZUJvZHk7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5UYWJsZUJvZHk7XG5fW0lOX1RBQkxFX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fUk9XX01PREVdID0ge307XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID1cbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJblRhYmxlO1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fUk9XX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luUm93O1xuX1tJTl9ST1dfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnSW5Sb3c7XG5fW0lOX1JPV19NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9DRUxMX01PREVdID0ge307XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPSBjaGFyYWN0ZXJJbkJvZHk7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5O1xuX1tJTl9DRUxMX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luQ2VsbDtcbl9bSU5fQ0VMTF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJbkNlbGw7XG5fW0lOX0NFTExfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fU0VMRUNUX01PREVdID0ge307XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX1NFTEVDVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblNlbGVjdDtcbl9bSU5fU0VMRUNUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luU2VsZWN0O1xuX1tJTl9TRUxFQ1RfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBlb2ZJbkJvZHk7XG5cbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdID0ge307XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGluc2VydENoYXJhY3RlcnM7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gaW5zZXJ0Q2hhcmFjdGVycztcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5DT01NRU5UX1RPS0VOXSA9IGFwcGVuZENvbW1lbnQ7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fU0VMRUNUX0lOX1RBQkxFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblNlbGVjdEluVGFibGU7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblNlbGVjdEluVGFibGU7XG5fW0lOX1NFTEVDVF9JTl9UQUJMRV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluQm9keTtcblxuX1tJTl9URU1QTEFURV9NT0RFXSA9IHt9O1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuQ0hBUkFDVEVSX1RPS0VOXSA9IGNoYXJhY3RlckluQm9keTtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudDtcbl9bSU5fVEVNUExBVEVfTU9ERV1bVG9rZW5pemVyLkRPQ1RZUEVfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX1RFTVBMQVRFX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdJblRlbXBsYXRlO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBlbmRUYWdJblRlbXBsYXRlO1xuX1tJTl9URU1QTEFURV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IGVvZkluVGVtcGxhdGU7XG5cbl9bQUZURVJfQk9EWV9NT0RFXSA9IHt9O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLldISVRFU1BBQ0VfQ0hBUkFDVEVSX1RPS0VOXSA9IHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5TVEFSVF9UQUdfVE9LRU5dID0gc3RhcnRUYWdBZnRlckJvZHk7XG5fW0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gZW5kVGFnQWZ0ZXJCb2R5O1xuX1tBRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bSU5fRlJBTUVTRVRfTU9ERV0gPSB7fTtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tJTl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bSU5fRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0luRnJhbWVzZXQ7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0luRnJhbWVzZXQ7XG5fW0lOX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bQUZURVJfRlJBTUVTRVRfTU9ERV0gPSB7fTtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTl0gPVxuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gaWdub3JlVG9rZW47XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTl0gPSBpbnNlcnRDaGFyYWN0ZXJzO1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50O1xuX1tBRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTl0gPSBzdGFydFRhZ0FmdGVyRnJhbWVzZXQ7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FTkRfVEFHX1RPS0VOXSA9IGVuZFRhZ0FmdGVyRnJhbWVzZXQ7XG5fW0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5FT0ZfVE9LRU5dID0gc3RvcFBhcnNpbmc7XG5cbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXSA9IHt9O1xuX1tBRlRFUl9BRlRFUl9CT0RZX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuTlVMTF9DSEFSQUNURVJfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuQ09NTUVOVF9UT0tFTl0gPSBhcHBlbmRDb21tZW50VG9Eb2N1bWVudDtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRE9DVFlQRV9UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJBZnRlckJvZHk7XG5fW0FGVEVSX0FGVEVSX0JPRFlfTU9ERV1bVG9rZW5pemVyLkVORF9UQUdfVE9LRU5dID0gdG9rZW5BZnRlckFmdGVyQm9keTtcbl9bQUZURVJfQUZURVJfQk9EWV9NT0RFXVtUb2tlbml6ZXIuRU9GX1RPS0VOXSA9IHN0b3BQYXJzaW5nO1xuXG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdID0ge307XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5DSEFSQUNURVJfVE9LRU5dID1cbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU5dID0gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keTtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkNPTU1FTlRfVE9LRU5dID0gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQ7XG5fW0FGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREVdW1Rva2VuaXplci5ET0NUWVBFX1RPS0VOXSA9IGlnbm9yZVRva2VuO1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuU1RBUlRfVEFHX1RPS0VOXSA9IHN0YXJ0VGFnQWZ0ZXJBZnRlckZyYW1lc2V0O1xuX1tBRlRFUl9BRlRFUl9GUkFNRVNFVF9NT0RFXVtUb2tlbml6ZXIuRU5EX1RBR19UT0tFTl0gPSBpZ25vcmVUb2tlbjtcbl9bQUZURVJfQUZURVJfRlJBTUVTRVRfTU9ERV1bVG9rZW5pemVyLkVPRl9UT0tFTl0gPSBzdG9wUGFyc2luZztcblxuLy9TZWFyY2hhYmxlIGluZGV4IGJ1aWxkaW5nIHV0aWxzICg8aXNpbmRleD4gdGFnKVxuZnVuY3Rpb24gZ2V0U2VhcmNoYWJsZUluZGV4Rm9ybUF0dHJzKGlzaW5kZXhTdGFydFRhZ1Rva2VuKSB7XG4gICAgdmFyIGluZGV4QWN0aW9uID0gVG9rZW5pemVyLmdldFRva2VuQXR0cihpc2luZGV4U3RhcnRUYWdUb2tlbiwgQVRUUlMuQUNUSU9OKSxcbiAgICAgICAgYXR0cnMgPSBbXTtcblxuICAgIGlmIChpbmRleEFjdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBhdHRycy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IEFUVFJTLkFDVElPTixcbiAgICAgICAgICAgIHZhbHVlOiBpbmRleEFjdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleExhYmVsVGV4dChpc2luZGV4U3RhcnRUYWdUb2tlbikge1xuICAgIHZhciBpbmRleFByb21wdCA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIoaXNpbmRleFN0YXJ0VGFnVG9rZW4sIEFUVFJTLlBST01QVCk7XG5cbiAgICByZXR1cm4gaW5kZXhQcm9tcHQgPT09IG51bGwgPyBTRUFSQ0hBQkxFX0lOREVYX0RFRkFVTFRfUFJPTVBUIDogaW5kZXhQcm9tcHQ7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaGFibGVJbmRleElucHV0QXR0cnMoaXNpbmRleFN0YXJ0VGFnVG9rZW4pIHtcbiAgICB2YXIgaXNpbmRleEF0dHJzID0gaXNpbmRleFN0YXJ0VGFnVG9rZW4uYXR0cnMsXG4gICAgICAgIGlucHV0QXR0cnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXNpbmRleEF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBuYW1lID0gaXNpbmRleEF0dHJzW2ldLm5hbWU7XG5cbiAgICAgICAgaWYgKG5hbWUgIT09IEFUVFJTLk5BTUUgJiYgbmFtZSAhPT0gQVRUUlMuQUNUSU9OICYmIG5hbWUgIT09IEFUVFJTLlBST01QVClcbiAgICAgICAgICAgIGlucHV0QXR0cnMucHVzaChpc2luZGV4QXR0cnNbaV0pO1xuICAgIH1cblxuICAgIGlucHV0QXR0cnMucHVzaCh7XG4gICAgICAgIG5hbWU6IEFUVFJTLk5BTUUsXG4gICAgICAgIHZhbHVlOiBTRUFSQ0hBQkxFX0lOREVYX0lOUFVUX05BTUVcbiAgICB9KTtcblxuICAgIHJldHVybiBpbnB1dEF0dHJzO1xufVxuXG4vL1BhcnNlclxudmFyIFBhcnNlciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRyZWVBZGFwdGVyLCBvcHRpb25zKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyIHx8IERlZmF1bHRUcmVlQWRhcHRlcjtcbiAgICB0aGlzLm9wdGlvbnMgPSBVdGlscy5tZXJnZU9wdGlvbnMoREVGQVVMVF9PUFRJT05TLCBvcHRpb25zKTtcbiAgICB0aGlzLnNjcmlwdEhhbmRsZXIgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbkluZm8pXG4gICAgICAgIExvY2F0aW9uSW5mb01peGluLmFzc2lnbih0aGlzKTtcbn07XG5cbi8vQVBJXG5QYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGh0bWwpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50KCk7XG5cbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudCwgbnVsbCk7XG4gICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcblxuICAgIHJldHVybiBkb2N1bWVudDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUucGFyc2VGcmFnbWVudCA9IGZ1bmN0aW9uIChodG1sLCBmcmFnbWVudENvbnRleHQpIHtcbiAgICAvL05PVEU6IHVzZSA8dGVtcGxhdGU+IGVsZW1lbnQgYXMgYSBmcmFnbWVudCBjb250ZXh0IGlmIGNvbnRleHQgZWxlbWVudCB3YXMgbm90IHByb3ZpZGVkLFxuICAgIC8vc28gd2Ugd2lsbCBwYXJzZSBpbiBcImZvcmdpdmluZ1wiIG1hbm5lclxuICAgIGlmICghZnJhZ21lbnRDb250ZXh0KVxuICAgICAgICBmcmFnbWVudENvbnRleHQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJC5URU1QTEFURSwgTlMuSFRNTCwgW10pO1xuXG4gICAgLy9OT1RFOiBjcmVhdGUgZmFrZSBlbGVtZW50IHdoaWNoIHdpbGwgYmUgdXNlZCBhcyAnZG9jdW1lbnQnIGZvciBmcmFnbWVudCBwYXJzaW5nLlxuICAgIC8vVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGpzZG9tIHRoZXJlICdkb2N1bWVudCcgY2FuJ3QgYmUgcmVjcmVhdGVkLCB0aGVyZWZvcmVcbiAgICAvL2ZyYWdtZW50IHBhcnNpbmcgY2F1c2VzIG1lc3Npbmcgb2YgdGhlIG1haW4gYGRvY3VtZW50YC5cbiAgICB2YXIgZG9jdW1lbnRNb2NrID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KCdkb2N1bWVudG1vY2snLCBOUy5IVE1MLCBbXSk7XG5cbiAgICB0aGlzLl9yZXNldChodG1sLCBkb2N1bWVudE1vY2ssIGZyYWdtZW50Q29udGV4dCk7XG5cbiAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGZyYWdtZW50Q29udGV4dCkgPT09ICQuVEVNUExBVEUpXG4gICAgICAgIHRoaXMuX3B1c2hUbXBsSW5zZXJ0aW9uTW9kZShJTl9URU1QTEFURV9NT0RFKTtcblxuICAgIHRoaXMuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcoKTtcbiAgICB0aGlzLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQoKTtcbiAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICB0aGlzLl9maW5kRm9ybUluRnJhZ21lbnRDb250ZXh0KCk7XG4gICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcblxuICAgIHZhciByb290RWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Rmlyc3RDaGlsZChkb2N1bWVudE1vY2spLFxuICAgICAgICBmcmFnbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgdGhpcy5fYWRvcHROb2Rlcyhyb290RWxlbWVudCwgZnJhZ21lbnQpO1xuXG4gICAgcmV0dXJuIGZyYWdtZW50O1xufTtcblxuLy9SZXNldCBzdGF0ZVxuUGFyc2VyLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbiAoaHRtbCwgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCkge1xuICAgIHRoaXMudG9rZW5pemVyID0gbmV3IFRva2VuaXplcihodG1sLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgdGhpcy5zdG9wcGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTklUSUFMX01PREU7XG4gICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSAnJztcblxuICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IGZyYWdtZW50Q29udGV4dDtcblxuICAgIHRoaXMuaGVhZEVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuZm9ybUVsZW1lbnQgPSBudWxsO1xuXG4gICAgdGhpcy5vcGVuRWxlbWVudHMgPSBuZXcgT3BlbkVsZW1lbnRTdGFjayh0aGlzLmRvY3VtZW50LCB0aGlzLnRyZWVBZGFwdGVyKTtcbiAgICB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IG5ldyBGb3JtYXR0aW5nRWxlbWVudExpc3QodGhpcy50cmVlQWRhcHRlcik7XG5cbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sgPSBbXTtcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IG51bGw7XG5cbiAgICB0aGlzLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICB0aGlzLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSBmYWxzZTtcblxuICAgIHRoaXMuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSBmYWxzZTtcbn07XG5cbi8vUGFyc2luZyBsb29wXG5QYXJzZXIucHJvdG90eXBlLl9pdGVyYXRlUGFyc2luZ0xvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUoKTtcblxuICAgIHZhciB0b2tlbiA9IHRoaXMudG9rZW5pemVyLmdldE5leHRUb2tlbigpO1xuXG4gICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5XSElURVNQQUNFX0NIQVJBQ1RFUl9UT0tFTiAmJiB0b2tlbi5jaGFyc1swXSA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGlmICh0b2tlbi5jaGFycy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB0b2tlbi5jaGFycyA9IHRva2VuLmNoYXJzLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSlcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudCh0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9ydW5QYXJzaW5nTG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICB3aGlsZSAoIXRoaXMuc3RvcHBlZClcbiAgICAgICAgdGhpcy5faXRlcmF0ZVBhcnNpbmdMb29wKCk7XG59O1xuXG4vL1RleHQgcGFyc2luZ1xuUGFyc2VyLnByb3RvdHlwZS5fc2V0dXBUb2tlbml6ZXJDREFUQU1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50KCk7XG5cbiAgICB0aGlzLnRva2VuaXplci5hbGxvd0NEQVRBID0gY3VycmVudCAmJiBjdXJyZW50ICE9PSB0aGlzLmRvY3VtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpICE9PSBOUy5IVE1MICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3N3aXRjaFRvVGV4dFBhcnNpbmcgPSBmdW5jdGlvbiAoY3VycmVudFRva2VuLCBuZXh0VG9rZW5pemVyU3RhdGUpIHtcbiAgICB0aGlzLl9pbnNlcnRFbGVtZW50KGN1cnJlbnRUb2tlbiwgTlMuSFRNTCk7XG4gICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBuZXh0VG9rZW5pemVyU3RhdGU7XG4gICAgdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSB0aGlzLmluc2VydGlvbk1vZGU7XG4gICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gVEVYVF9NT0RFO1xufTtcblxuLy9GcmFnbWVudCBwYXJzaW5nXG5QYXJzZXIucHJvdG90eXBlLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA9PT0gMCAmJiB0aGlzLmZyYWdtZW50Q29udGV4dCA/XG4gICAgICAgICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0IDpcbiAgICAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcblxuICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKSA9PT0gJC5GT1JNKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgICB9IHdoaWxlIChub2RlKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKHRoaXMuZnJhZ21lbnRDb250ZXh0KTtcblxuICAgIGlmICh0biA9PT0gJC5USVRMRSB8fCB0biA9PT0gJC5URVhUQVJFQSlcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXIuTU9ERS5SQ0RBVEE7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TVFlMRSB8fCB0biA9PT0gJC5YTVAgfHwgdG4gPT09ICQuSUZSQU1FIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuTk9FTUJFRCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5OT1NDUklQVCkge1xuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlJBV1RFWFQ7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuUExBSU5URVhUKVxuICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplci5NT0RFLlBMQUlOVEVYVDtcbn07XG5cbi8vVHJlZSBtdXRhdGlvblxuUGFyc2VyLnByb3RvdHlwZS5fc2V0RG9jdW1lbnRUeXBlID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgdGhpcy50cmVlQWRhcHRlci5zZXREb2N1bWVudFR5cGUodGhpcy5kb2N1bWVudCwgdG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2F0dGFjaEVsZW1lbnRUb1RyZWUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpKVxuICAgICAgICB0aGlzLl9mb3N0ZXJQYXJlbnRFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHBhcmVudCwgZWxlbWVudCk7XG4gICAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fYXBwZW5kRWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG5cbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5faW5zZXJ0RWxlbWVudCA9IGZ1bmN0aW9uICh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG5cbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIHZhciB0bXBsID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIE5TLkhUTUwsIHRva2VuLmF0dHJzKSxcbiAgICAgICAgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZCh0bXBsLCBjb250ZW50KTtcbiAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKHRtcGwpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2godG1wbCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJC5IVE1MLCBOUy5IVE1MLCBbXSk7XG5cbiAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQsIGVsZW1lbnQpO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9hcHBlbmRDb21tZW50Tm9kZSA9IGZ1bmN0aW9uICh0b2tlbiwgcGFyZW50KSB7XG4gICAgdmFyIGNvbW1lbnROb2RlID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVDb21tZW50Tm9kZSh0b2tlbi5kYXRhKTtcblxuICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBjb21tZW50Tm9kZSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9pbnNlcnRDaGFyYWN0ZXJzID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCkpXG4gICAgICAgIHRoaXMuX2Zvc3RlclBhcmVudFRleHQodG9rZW4uY2hhcnMpO1xuXG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudDtcblxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQocGFyZW50LCB0b2tlbi5jaGFycyk7XG4gICAgfVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fYWRvcHROb2RlcyA9IGZ1bmN0aW9uIChkb25vciwgcmVjaXBpZW50KSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKGRvbm9yKTtcblxuICAgICAgICBpZiAoIWNoaWxkKVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGNoaWxkKTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChyZWNpcGllbnQsIGNoaWxkKTtcbiAgICB9XG59O1xuXG4vL1Rva2VuIHByb2Nlc3NpbmdcblBhcnNlci5wcm90b3R5cGUuX3Nob3VsZFByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKTtcblxuICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50ID09PSB0aGlzLmRvY3VtZW50KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB2YXIgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KTtcblxuICAgIGlmIChucyA9PT0gTlMuSFRNTClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShjdXJyZW50KSA9PT0gJC5BTk5PVEFUSU9OX1hNTCAmJiBucyA9PT0gTlMuTUFUSE1MICYmXG4gICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gJiYgdG9rZW4udGFnTmFtZSA9PT0gJC5TVkcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBpc0NoYXJhY3RlclRva2VuID0gdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNIQVJBQ1RFUl9UT0tFTiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4sXG4gICAgICAgIGlzTWF0aE1MVGV4dFN0YXJ0VGFnID0gdG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLnRhZ05hbWUgIT09ICQuTUdMWVBIICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4udGFnTmFtZSAhPT0gJC5NQUxJR05NQVJLO1xuXG4gICAgaWYgKChpc01hdGhNTFRleHRTdGFydFRhZyB8fCBpc0NoYXJhY3RlclRva2VuKSAmJiB0aGlzLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5TVEFSVF9UQUdfVE9LRU4gfHwgaXNDaGFyYWN0ZXJUb2tlbikgJiYgdGhpcy5faXNIdG1sSW50ZWdyYXRpb25Qb2ludChjdXJyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRva2VuLnR5cGUgIT09IFRva2VuaXplci5FT0ZfVE9LRU47XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICBfW3RoaXMuaW5zZXJ0aW9uTW9kZV1bdG9rZW4udHlwZV0odGhpcywgdG9rZW4pO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fcHJvY2Vzc1Rva2VuSW5Cb2R5TW9kZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgIF9bSU5fQk9EWV9NT0RFXVt0b2tlbi50eXBlXSh0aGlzLCB0b2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50ID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5DSEFSQUNURVJfVE9LRU4pXG4gICAgICAgIGNoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLk5VTExfQ0hBUkFDVEVSX1RPS0VOKVxuICAgICAgICBudWxsQ2hhcmFjdGVySW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlbml6ZXIuV0hJVEVTUEFDRV9DSEFSQUNURVJfVE9LRU4pXG4gICAgICAgIGluc2VydENoYXJhY3RlcnModGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLkNPTU1FTlRfVE9LRU4pXG4gICAgICAgIGFwcGVuZENvbW1lbnQodGhpcywgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5pemVyLlNUQVJUX1RBR19UT0tFTilcbiAgICAgICAgc3RhcnRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuaXplci5FTkRfVEFHX1RPS0VOKVxuICAgICAgICBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMgPSBmdW5jdGlvbiAodGFnTmFtZSwgYXR0cnMpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRTdGFydFRhZ1Rva2VuKHRhZ05hbWUpO1xuXG4gICAgZmFrZVRva2VuLmF0dHJzID0gYXR0cnM7XG4gICAgdGhpcy5fcHJvY2Vzc1Rva2VuKGZha2VUb2tlbik7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wcm9jZXNzRmFrZVN0YXJ0VGFnID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRTdGFydFRhZ1Rva2VuKHRhZ05hbWUpO1xuXG4gICAgdGhpcy5fcHJvY2Vzc1Rva2VuKGZha2VUb2tlbik7XG4gICAgcmV0dXJuIGZha2VUb2tlbjtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Byb2Nlc3NGYWtlRW5kVGFnID0gZnVuY3Rpb24gKHRhZ05hbWUpIHtcbiAgICB2YXIgZmFrZVRva2VuID0gdGhpcy50b2tlbml6ZXIuYnVpbGRFbmRUYWdUb2tlbih0YWdOYW1lKTtcblxuICAgIHRoaXMuX3Byb2Nlc3NUb2tlbihmYWtlVG9rZW4pO1xuICAgIHJldHVybiBmYWtlVG9rZW47XG59O1xuXG4vL0ludGVncmF0aW9uIHBvaW50c1xuUGFyc2VyLnByb3RvdHlwZS5faXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEZvcmVpZ25Db250ZW50LmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX2lzSHRtbEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSxcbiAgICAgICAgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSxcbiAgICAgICAgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEZvcmVpZ25Db250ZW50LmlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIG5zLCBhdHRycyk7XG59O1xuXG4vL0FjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIHJlY29uc3RydWN0aW9uXG5QYXJzZXIucHJvdG90eXBlLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGlzdExlbmd0aCA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmxlbmd0aDtcblxuICAgIGlmIChsaXN0TGVuZ3RoKSB7XG4gICAgICAgIHZhciB1bm9wZW5JZHggPSBsaXN0TGVuZ3RoLFxuICAgICAgICAgICAgZW50cnkgPSBudWxsO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHVub3BlbklkeC0tO1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5lbnRyaWVzW3Vub3BlbklkeF07XG5cbiAgICAgICAgICAgIGlmIChlbnRyeS50eXBlID09PSBGb3JtYXR0aW5nRWxlbWVudExpc3QuTUFSS0VSX0VOVFJZIHx8IHRoaXMub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGVudHJ5LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdW5vcGVuSWR4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHVub3BlbklkeCA+IDApO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSB1bm9wZW5JZHg7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZW50cmllc1tpXTtcbiAgICAgICAgICAgIHRoaXMuX2luc2VydEVsZW1lbnQoZW50cnkudG9rZW4sIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVudHJ5LmVsZW1lbnQpKTtcbiAgICAgICAgICAgIGVudHJ5LmVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLy9DbG9zZSBlbGVtZW50c1xuUGFyc2VyLnByb3RvdHlwZS5fY2xvc2VUYWJsZUNlbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSlcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5URCk7XG5cbiAgICBlbHNlXG4gICAgICAgIHRoaXMuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVEgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fY2xvc2VQRWxlbWVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xuICAgIHRoaXMub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlApO1xufTtcblxuLy9JbnNlcnRpb24gbW9kZXNcblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3AsIGxhc3QgPSBmYWxzZTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgbGFzdCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmZyYWdtZW50Q29udGV4dClcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5mcmFnbWVudENvbnRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCksXG4gICAgICAgICAgICBuZXdJbnNlcnRpb25Nb2RlID0gSU5TRVJUSU9OX01PREVfUkVTRVRfTUFQW3RuXTtcblxuICAgICAgICBpZiAobmV3SW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gbmV3SW5zZXJ0aW9uTW9kZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAoIWxhc3QgJiYgKHRuID09PSAkLlREIHx8IHRuID09PSAkLlRIKSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fQ0VMTF9NT0RFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICghbGFzdCAmJiB0biA9PT0gJC5IRUFEKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9IRUFEX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVCkge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0KGkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gdGhpcy5jdXJyZW50VG1wbEluc2VydGlvbk1vZGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhUTUwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IHRoaXMuaGVhZEVsZW1lbnQgPyBBRlRFUl9IRUFEX01PREUgOiBCRUZPUkVfSEVBRF9NT0RFO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChsYXN0KSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3Jlc2V0SW5zZXJ0aW9uTW9kZUZvclNlbGVjdCA9IGZ1bmN0aW9uIChzZWxlY3RJZHgpIHtcbiAgICBpZiAoc2VsZWN0SWR4ID4gMCkge1xuICAgICAgICBmb3IgKHZhciBpID0gc2VsZWN0SWR4IC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV0sXG4gICAgICAgICAgICAgICAgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoYW5jZXN0b3IpO1xuXG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX0lOX1RBQkxFX01PREU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSU5fU0VMRUNUX01PREU7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9wdXNoVG1wbEluc2VydGlvbk1vZGUgPSBmdW5jdGlvbiAobW9kZSkge1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wdXNoKG1vZGUpO1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1RvcCsrO1xuICAgIHRoaXMuY3VycmVudFRtcGxJbnNlcnRpb25Nb2RlID0gbW9kZTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuX3BvcFRtcGxJbnNlcnRpb25Nb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjay5wb3AoKTtcbiAgICB0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AtLTtcbiAgICB0aGlzLmN1cnJlbnRUbXBsSW5zZXJ0aW9uTW9kZSA9IHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1t0aGlzLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3BdO1xufTtcblxuLy9Gb3N0ZXIgcGFyZW50aW5nXG5QYXJzZXIucHJvdG90eXBlLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHZhciB0biA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KTtcblxuICAgIHJldHVybiB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCAmJiB0aGlzLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcodGhpcy5vcGVuRWxlbWVudHMuY3VycmVudCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxvY2F0aW9uID0ge1xuICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgIGJlZm9yZUVsZW1lbnQ6IG51bGxcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgb3BlbkVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXSxcbiAgICAgICAgICAgIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG9wZW5FbGVtZW50KSxcbiAgICAgICAgICAgIG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkob3BlbkVsZW1lbnQpO1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKG9wZW5FbGVtZW50KVswXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShvcGVuRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhdGlvbi5wYXJlbnQpXG4gICAgICAgICAgICAgICAgbG9jYXRpb24uYmVmb3JlRWxlbWVudCA9IG9wZW5FbGVtZW50O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW1zW2kgLSAxXTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWxvY2F0aW9uLnBhcmVudClcbiAgICAgICAgbG9jYXRpb24ucGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbMF07XG5cbiAgICByZXR1cm4gbG9jYXRpb247XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLl9mb3N0ZXJQYXJlbnRFbGVtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKTtcblxuICAgIGlmIChsb2NhdGlvbi5iZWZvcmVFbGVtZW50KVxuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGVsZW1lbnQsIGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpO1xuICAgIGVsc2VcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChsb2NhdGlvbi5wYXJlbnQsIGVsZW1lbnQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5fZm9zdGVyUGFyZW50VGV4dCA9IGZ1bmN0aW9uIChjaGFycykge1xuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbigpO1xuXG4gICAgaWYgKGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dEJlZm9yZShsb2NhdGlvbi5wYXJlbnQsIGNoYXJzLCBsb2NhdGlvbi5iZWZvcmVFbGVtZW50KTtcbiAgICBlbHNlXG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dChsb2NhdGlvbi5wYXJlbnQsIGNoYXJzKTtcbn07XG5cbi8vU3BlY2lhbCBlbGVtZW50c1xuUGFyc2VyLnByb3RvdHlwZS5faXNTcGVjaWFsRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdmFyIHRuID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpLFxuICAgICAgICBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIEhUTUwuU1BFQ0lBTF9FTEVNRU5UU1tuc11bdG5dO1xufTtcblxuLy9BZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RyZWUtY29uc3RydWN0aW9uLmh0bWwjYWRvcHRpb25BZ2VuY3kpXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vL1N0ZXBzIDUtOCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYU9idGFpbkZvcm1hdHRpbmdFbGVtZW50RW50cnkocCwgdG9rZW4pIHtcbiAgICB2YXIgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSh0b2tlbi50YWdOYW1lKTtcblxuICAgIGlmIChmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgICAgIGlmICghcC5vcGVuRWxlbWVudHMuY29udGFpbnMoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSkge1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgICAgICAgICBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKCFwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRva2VuLnRhZ05hbWUpKVxuICAgICAgICAgICAgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IG51bGw7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIHJldHVybiBmb3JtYXR0aW5nRWxlbWVudEVudHJ5O1xufVxuXG4vL1N0ZXBzIDkgYW5kIDEwIG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgdmFyIGZ1cnRoZXN0QmxvY2sgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGZ1cnRoZXN0QmxvY2sgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIGlmICghZnVydGhlc3RCbG9jaykge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1cnRoZXN0QmxvY2s7XG59XG5cbi8vU3RlcCAxMyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudCkge1xuICAgIHZhciBlbGVtZW50ID0gbnVsbCxcbiAgICAgICAgbGFzdEVsZW1lbnQgPSBmdXJ0aGVzdEJsb2NrLFxuICAgICAgICBuZXh0RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZ1cnRoZXN0QmxvY2spO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBBQV9JTk5FUl9MT09QX0lURVI7IGkrKykge1xuICAgICAgICBlbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG5cbiAgICAgICAgLy9OT1RFOiBzdG9yZSBuZXh0IGVsZW1lbnQgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uIChpdCBtYXkgYmUgZGVsZXRlZCBmcm9tIHRoZSBzdGFjayBieSBzdGVwIDkuNSlcbiAgICAgICAgbmV4dEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5nZXRDb21tb25BbmNlc3RvcihlbGVtZW50KTtcblxuICAgICAgICB2YXIgZWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5KGVsZW1lbnQpO1xuXG4gICAgICAgIGlmICghZWxlbWVudEVudHJ5KSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudClcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGVsZW1lbnQgPSBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpO1xuXG4gICAgICAgIGlmIChsYXN0RWxlbWVudCA9PT0gZnVydGhlc3RCbG9jaylcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmJvb2ttYXJrID0gZWxlbWVudEVudHJ5O1xuXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShsYXN0RWxlbWVudCk7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCwgbGFzdEVsZW1lbnQpO1xuICAgICAgICBsYXN0RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RFbGVtZW50O1xufVxuXG4vL1N0ZXAgMTMuNyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpIHtcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50RW50cnkuZWxlbWVudCksXG4gICAgICAgIG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoZWxlbWVudEVudHJ5LnRva2VuLnRhZ05hbWUsIG5zLCBlbGVtZW50RW50cnkudG9rZW4uYXR0cnMpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucmVwbGFjZShlbGVtZW50RW50cnkuZWxlbWVudCwgbmV3RWxlbWVudCk7XG4gICAgZWxlbWVudEVudHJ5LmVsZW1lbnQgPSBuZXdFbGVtZW50O1xuXG4gICAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG5cbi8vU3RlcCAxNCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpIHtcbiAgICBpZiAocC5faXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKGNvbW1vbkFuY2VzdG9yKSlcbiAgICAgICAgcC5fZm9zdGVyUGFyZW50RWxlbWVudChsYXN0RWxlbWVudCk7XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHRuID0gcC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGNvbW1vbkFuY2VzdG9yKSxcbiAgICAgICAgICAgIG5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY29tbW9uQW5jZXN0b3IpO1xuXG4gICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSAmJiBucyA9PT0gTlMuSFRNTClcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKGNvbW1vbkFuY2VzdG9yKVswXTtcblxuICAgICAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCk7XG4gICAgfVxufVxuXG4vL1N0ZXBzIDE1LTE5IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhUmVwbGFjZUZvcm1hdHRpbmdFbGVtZW50KHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICB2YXIgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpLFxuICAgICAgICB0b2tlbiA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4sXG4gICAgICAgIG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbnMsIHRva2VuLmF0dHJzKTtcblxuICAgIHAuX2Fkb3B0Tm9kZXMoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG4gICAgcC50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcblxuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydEVsZW1lbnRBZnRlckJvb2ttYXJrKG5ld0VsZW1lbnQsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkudG9rZW4pO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgcC5vcGVuRWxlbWVudHMuaW5zZXJ0QWZ0ZXIoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG59XG5cbi8vQWxnb3JpdGhtIGVudHJ5IHBvaW50XG5mdW5jdGlvbiBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEFBX09VVEVSX0xPT1BfSVRFUjsgaSsrKSB7XG4gICAgICAgIHZhciBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gYWFPYnRhaW5Gb3JtYXR0aW5nRWxlbWVudEVudHJ5KHAsIHRva2VuLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcblxuICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50RW50cnkpXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB2YXIgZnVydGhlc3RCbG9jayA9IGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcblxuICAgICAgICBpZiAoIWZ1cnRoZXN0QmxvY2spXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5ib29rbWFyayA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XG5cbiAgICAgICAgdmFyIGxhc3RFbGVtZW50ID0gYWFJbm5lckxvb3AocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KSxcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC5vcGVuRWxlbWVudHMuZ2V0Q29tbW9uQW5jZXN0b3IoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcblxuICAgICAgICBwLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUobGFzdEVsZW1lbnQpO1xuICAgICAgICBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpO1xuICAgICAgICBhYVJlcGxhY2VGb3JtYXR0aW5nRWxlbWVudChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICB9XG59XG5cblxuLy9HZW5lcmljIHRva2VuIGhhbmRsZXJzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gaWdub3JlVG9rZW4ocCwgdG9rZW4pIHtcbiAgICAvL05PVEU6IGRvIG5vdGhpbmcgPSlcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnQgfHwgcC5vcGVuRWxlbWVudHMuY3VycmVudClcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kQ29tbWVudE5vZGUodG9rZW4sIHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5kb2N1bWVudCk7XG59XG5cbmZ1bmN0aW9uIGluc2VydENoYXJhY3RlcnMocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gc3RvcFBhcnNpbmcocCwgdG9rZW4pIHtcbiAgICBwLnN0b3BwZWQgPSB0cnVlO1xufVxuXG4vLzEyLjIuNS40LjEgVGhlIFwiaW5pdGlhbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gZG9jdHlwZUluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcbiAgICBwLl9zZXREb2N1bWVudFR5cGUodG9rZW4pO1xuXG4gICAgaWYgKHRva2VuLmZvcmNlUXVpcmtzIHx8IERvY3R5cGUuaXNRdWlya3ModG9rZW4ubmFtZSwgdG9rZW4ucHVibGljSWQsIHRva2VuLnN5c3RlbUlkKSlcbiAgICAgICAgcC50cmVlQWRhcHRlci5zZXRRdWlya3NNb2RlKHAuZG9jdW1lbnQpO1xuXG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hUTUxfTU9ERTtcbn1cblxuZnVuY3Rpb24gdG9rZW5JbkluaXRpYWxNb2RlKHAsIHRva2VuKSB7XG4gICAgcC50cmVlQWRhcHRlci5zZXRRdWlya3NNb2RlKHAuZG9jdW1lbnQpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IVE1MX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjIgVGhlIFwiYmVmb3JlIGh0bWxcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEJFRk9SRV9IRUFEX01PREU7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkJlZm9yZUh0bWwocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdCZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MIHx8IHRuID09PSAkLkhFQUQgfHwgdG4gPT09ICQuQk9EWSB8fCB0biA9PT0gJC5CUilcbiAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RmFrZVJvb3RFbGVtZW50KCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gQkVGT1JFX0hFQURfTU9ERTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuMyBUaGUgXCJiZWZvcmUgaGVhZFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdCZWZvcmVIZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5IRUFEKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmhlYWRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fSEVBRF9NT0RFO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSEVBRCB8fCB0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkhUTUwgfHwgdG4gPT09ICQuQlIpXG4gICAgICAgIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5IRUFEKTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5cbi8vMTIuMi41LjQuNCBUaGUgXCJpbiBoZWFkXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luSGVhZChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQkFTRSB8fCB0biA9PT0gJC5CQVNFRk9OVCB8fCB0biA9PT0gJC5CR1NPVU5EIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuQ09NTUFORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVElUTEUpXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJDREFUQSk7XG5cbiAgICAvL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiBpbnRlcmFjdGl2ZSB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBzY3JpcHRpbmcsIHNvIHdlIHBhcnNlXG4gICAgLy88bm9zY3JpcHQ+IGFzIGEgcmF3dGV4dC5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVCB8fCB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TVFlMRSlcbiAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlNDUklQVF9EQVRBKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgIHAuX2luc2VydFRlbXBsYXRlKHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9URU1QTEFURV9NT0RFO1xuICAgICAgICBwLl9wdXNoVG1wbEluc2VydGlvbk1vZGUoSU5fVEVNUExBVEVfTU9ERSk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcbiAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJbkhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhFQUQpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0hFQURfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkJSIHx8IHRuID09PSAkLkhUTUwpXG4gICAgICAgIHRva2VuSW5IZWFkKHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRlbXBsYXRlUG9wcGVkKCk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgIHAuX3BvcFRtcGxJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JbkhlYWQocCwgdG9rZW4pIHtcbiAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkhFQUQpO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC42IFRoZSBcImFmdGVyIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5CT0RZKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9GUkFNRVNFVF9NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuQkdTT1VORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5OT0ZSQU1FUyB8fCB0biA9PT0gJC5TQ1JJUFQgfHwgdG4gPT09ICQuU1RZTEUgfHwgdG4gPT09ICQuVEVNUExBVEUgfHwgdG4gPT09ICQuVElUTEUpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucHVzaChwLmhlYWRFbGVtZW50KTtcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUocC5oZWFkRWxlbWVudCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuSEVBRClcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckhlYWQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5CUilcbiAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJPRFkpO1xuICAgIHAuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjcgVGhlIFwiaW4gYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGh0bWxTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPT09IDApXG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYWRvcHRBdHRyaWJ1dGVzKHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdLCB0b2tlbi5hdHRycyk7XG59XG5cbmZ1bmN0aW9uIGJvZHlTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG5cbiAgICBpZiAoYm9keUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmFkb3B0QXR0cmlidXRlcyhib2R5RWxlbWVudCwgdG9rZW4uYXR0cnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZnJhbWVzZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG5cbiAgICBpZiAocC5mcmFtZXNldE9rICYmIGJvZHlFbGVtZW50KSB7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShib2R5RWxlbWVudCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcEFsbFVwVG9IdG1sRWxlbWVudCgpO1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fRlJBTUVTRVRfTU9ERTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgdmFyIHRuID0gcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSDEgfHwgdG4gPT09ICQuSDIgfHwgdG4gPT09ICQuSDMgfHwgdG4gPT09ICQuSDQgfHwgdG4gPT09ICQuSDUgfHwgdG4gPT09ICQuSDYpXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgLy9OT1RFOiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXIgdG9rZW4sIHRoZW4gaWdub3JlIHRoYXQgdG9rZW4gYW5kIG1vdmVcbiAgICAvL29uIHRvIHRoZSBuZXh0IG9uZS4gKE5ld2xpbmVzIGF0IHRoZSBzdGFydCBvZiBwcmUgYmxvY2tzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgaW5UZW1wbGF0ZSA9IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDA7XG5cbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgICAgIGlmICghaW5UZW1wbGF0ZSlcbiAgICAgICAgICAgIHAuZm9ybUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuXG4gICAgZm9yICh2YXIgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldLFxuICAgICAgICAgICAgdG4gPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG5cbiAgICAgICAgaWYgKCh0b2tlbi50YWdOYW1lID09PSAkLkxJICYmIHRuID09PSAkLkxJKSB8fFxuICAgICAgICAgICAgKCh0b2tlbi50YWdOYW1lID09PSAkLkREIHx8IHRva2VuLnRhZ05hbWUgPT09ICQuRFQpICYmICh0biA9PT0gJC5ERCB8fCB0biA9PSAkLkRUKSkpIHtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKHRuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRuICE9PSAkLkFERFJFU1MgJiYgdG4gIT09ICQuRElWICYmIHRuICE9PSAkLlAgJiYgcC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpXG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUExBSU5URVhUO1xufVxuXG5mdW5jdGlvbiBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQlVUVE9OKSkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkJVVFRPTik7XG4gICAgICAgIGJ1dHRvblN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIGFjdGl2ZUVsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSgkLkEpO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnRFbnRyeSkge1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkEpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoYWN0aXZlRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShhY3RpdmVFbGVtZW50RW50cnkpO1xuICAgIH1cblxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaEVsZW1lbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuTk9CUikpIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5OT0JSKTtcbiAgICAgICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICB9XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGFwcGxldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmICghcC50cmVlQWRhcHRlci5pc1F1aXJrc01vZGUocC5kb2N1bWVudCkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xufVxuXG5mdW5jdGlvbiBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcblxuICAgIHZhciBpbnB1dFR5cGUgPSBUb2tlbml6ZXIuZ2V0VG9rZW5BdHRyKHRva2VuLCBBVFRSUy5UWVBFKTtcblxuICAgIGlmICghaW5wdXRUeXBlIHx8IGlucHV0VHlwZS50b0xvd2VyQ2FzZSgpICE9PSBISURERU5fSU5QVVRfVFlQRSlcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG5cbn1cblxuZnVuY3Rpb24gcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBoclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSlcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuXG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGltYWdlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB0b2tlbi50YWdOYW1lID0gJC5JTUc7XG4gICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gaXNpbmRleFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLmZvcm1FbGVtZW50IHx8IHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZ1dpdGhBdHRycygkLkZPUk0sIGdldFNlYXJjaGFibGVJbmRleEZvcm1BdHRycyh0b2tlbikpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuSFIpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZVN0YXJ0VGFnKCQuTEFCRUwpO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmluc2VydFRleHQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgZ2V0U2VhcmNoYWJsZUluZGV4TGFiZWxUZXh0KHRva2VuKSk7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWdXaXRoQXR0cnMoJC5JTlBVVCwgZ2V0U2VhcmNoYWJsZUluZGV4SW5wdXRBdHRycyh0b2tlbikpO1xuICAgICAgICBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkxBQkVMKTtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkhSKTtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5GT1JNKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRleHRhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAvL05PVEU6IElmIHRoZSBuZXh0IHRva2VuIGlzIGEgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlciB0b2tlbiwgdGhlbiBpZ25vcmUgdGhhdCB0b2tlbiBhbmQgbW92ZVxuICAgIC8vb24gdG8gdGhlIG5leHQgb25lLiAoTmV3bGluZXMgYXQgdGhlIHN0YXJ0IG9mIHRleHRhcmVhIGVsZW1lbnRzIGFyZSBpZ25vcmVkIGFzIGFuIGF1dGhvcmluZyBjb252ZW5pZW5jZS4pXG4gICAgcC5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyLk1PREUuUkNEQVRBO1xuICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IFRFWFRfTU9ERTtcbn1cblxuZnVuY3Rpb24geG1wU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKVxuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG5cbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xufVxuXG5mdW5jdGlvbiBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplci5NT0RFLlJBV1RFWFQpO1xufVxuXG4vL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBwbHVnaW5zLCBzbyB3ZSBwYXJzZVxuLy88bm9lbWJlZD4gYXMgYSByYXd0ZXh0LlxuZnVuY3Rpb24gbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyLk1PREUuUkFXVEVYVCk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcblxuICAgIGlmIChwLmluc2VydGlvbk1vZGUgPT09IElOX1RBQkxFX01PREUgfHwgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9DQVBUSU9OX01PREUgfHxcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9UQUJMRV9CT0RZX01PREUgfHwgcC5pbnNlcnRpb25Nb2RlID09PSBJTl9ST1dfTU9ERSB8fFxuICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IElOX0NFTExfTU9ERSkge1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9TRUxFQ1RfSU5fVEFCTEVfTU9ERTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1NFTEVDVF9NT0RFO1xufVxuXG5mdW5jdGlvbiBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuZnVuY3Rpb24gcnBTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuUlVCWSkpXG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcblxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuXG5mdW5jdGlvbiBtZW51aXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5cbmZ1bmN0aW9uIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG5cbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlbk1hdGhNTEF0dHJzKHRva2VuKTtcbiAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcblxuICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZylcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuTUFUSE1MKTtcbiAgICBlbHNlXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLk1BVEhNTCk7XG59XG5cbmZ1bmN0aW9uIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcblxuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHQXR0cnModG9rZW4pO1xuICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xuXG4gICAgaWYgKHRva2VuLnNlbGZDbG9zaW5nKVxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5TVkcpO1xuICAgIGVsc2VcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuU1ZHKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBzdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBzd2l0Y2ggKHRuLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSSB8fCB0biA9PT0gJC5TIHx8IHRuID09PSAkLkIgfHwgdG4gPT09ICQuVSlcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkEpXG4gICAgICAgICAgICAgICAgYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5ETCB8fCB0biA9PT0gJC5PTCB8fCB0biA9PT0gJC5VTClcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTEkgfHwgdG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXG4gICAgICAgICAgICAgICAgbGlzdEl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNIHx8IHRuID09PSAkLlRUKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkhSKVxuICAgICAgICAgICAgICAgIGhyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5SUCB8fCB0biA9PT0gJC5SVClcbiAgICAgICAgICAgICAgICBycFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVFIpXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkRJViB8fCB0biA9PT0gJC5ESVIgfHwgdG4gPT09ICQuTkFWKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlBSRSlcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJJRylcbiAgICAgICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTUcgfHwgdG4gPT09ICQuV0JSKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlhNUClcbiAgICAgICAgICAgICAgICB4bXBTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNWRylcbiAgICAgICAgICAgICAgICBzdmdTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkNPTClcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgICAgICAgICBodG1sU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5CQVNFIHx8IHRuID09PSAkLkxJTksgfHwgdG4gPT09ICQuTUVUQSlcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJPRFkpXG4gICAgICAgICAgICAgICAgYm9keVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTUFJTiB8fCB0biA9PT0gJC5NRU5VKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZPUk0pXG4gICAgICAgICAgICAgICAgZm9ybVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQ09ERSB8fCB0biA9PT0gJC5GT05UKVxuICAgICAgICAgICAgICAgIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PQlIpXG4gICAgICAgICAgICAgICAgbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVJFQSlcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQVRIKVxuICAgICAgICAgICAgICAgIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkhFQUQpXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRJVExFKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVNJREUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuU01BTEwpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpXG4gICAgICAgICAgICAgICAgdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkVNQkVEKVxuICAgICAgICAgICAgICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklOUFVUKVxuICAgICAgICAgICAgICAgIGlucHV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5QQVJBTSB8fCB0biA9PT0gJC5UUkFDSylcbiAgICAgICAgICAgICAgICBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuSU1BR0UpXG4gICAgICAgICAgICAgICAgaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuICE9PSAkLkZSQU1FICYmIHRuICE9PSAkLlRCT0RZICYmIHRuICE9PSAkLlRGT09UICYmIHRuICE9PSAkLlRIRUFEKVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5TQ1JJUFQpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJVVFRPTilcbiAgICAgICAgICAgICAgICBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNUUklLRSB8fCB0biA9PT0gJC5TVFJPTkcpXG4gICAgICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuQVBQTEVUIHx8IHRuID09PSAkLk9CSkVDVClcbiAgICAgICAgICAgICAgICBhcHBsZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLktFWUdFTilcbiAgICAgICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TT1VSQ0UpXG4gICAgICAgICAgICAgICAgcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLklGUkFNRSlcbiAgICAgICAgICAgICAgICBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVClcbiAgICAgICAgICAgICAgICBzZWxlY3RTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTilcbiAgICAgICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CR1NPVU5EIHx8IHRuID09PSAkLkNPTU1BTkQpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5ERVRBSUxTIHx8IHRuID09PSAkLkFERFJFU1MgfHwgdG4gPT09ICQuQVJUSUNMRSB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXG4gICAgICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuTElTVElORylcbiAgICAgICAgICAgICAgICBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXG4gICAgICAgICAgICAgICAgYXBwbGV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JU0lOREVYKVxuICAgICAgICAgICAgICAgIGlzaW5kZXhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRU1CRUQpXG4gICAgICAgICAgICAgICAgbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ0FQVElPTilcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuTUVOVUlURU0pXG4gICAgICAgICAgICAgICAgbWVudWl0ZW1TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkZSQU1FU0VUKVxuICAgICAgICAgICAgICAgIGZyYW1lc2V0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GSUVMRFNFVClcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5URVhUQVJFQSlcbiAgICAgICAgICAgICAgICB0ZXh0YXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5OT1NDUklQVClcbiAgICAgICAgICAgICAgICBub2VtYmVkU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gIT09ICQuQ09MR1JPVVApXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLlBMQUlOVEVYVClcbiAgICAgICAgICAgICAgICBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkJMT0NLUVVPVEUgfHwgdG4gPT09ICQuRklHQ0FQVElPTilcbiAgICAgICAgICAgICAgICBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBib2R5RW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5CT0RZKSlcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfQk9EWV9NT0RFO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaHRtbEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkJPRFkpO1xuXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZm9ybUVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCxcbiAgICAgICAgZm9ybUVsZW1lbnQgPSBwLmZvcm1FbGVtZW50O1xuXG4gICAgaWYgKCFpblRlbXBsYXRlKVxuICAgICAgICBwLmZvcm1FbGVtZW50ID0gbnVsbDtcblxuICAgIGlmICgoZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkgJiYgcC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkZPUk0pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcblxuICAgICAgICBpZiAoaW5UZW1wbGF0ZSlcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkZPUk0pO1xuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtRWxlbWVudCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5QKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLlApO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbGlFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5MaXN0SXRlbVNjb3BlKCQuTEkpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuTEkpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5MSSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZEVuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbnVtYmVyZWRIZWFkZXJFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhcHBsZXRFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG4pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkJSKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBmb3IgKHZhciBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcblxuICAgICAgICBpZiAocC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSB0bikge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxFbGVtZW50UG9wcGVkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocC5faXNTcGVjaWFsRWxlbWVudChlbGVtZW50KSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbn1cblxuLy9PUFRJTUlaQVRJT046IEludGVnZXIgY29tcGFyaXNvbnMgYXJlIGxvdy1jb3N0LCBzbyB3ZSBjYW4gdXNlIHZlcnkgZmFzdCB0YWcgbmFtZSBsZW5ndGggZmlsdGVycyBoZXJlLlxuLy9JdCdzIGZhc3RlciB0aGFuIHVzaW5nIGRpY3Rpb25hcnkuXG5mdW5jdGlvbiBlbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgc3dpdGNoICh0bi5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkEgfHwgdG4gPT09ICQuQiB8fCB0biA9PT0gJC5JIHx8IHRuID09PSAkLlMgfHwgdG4gPT0gJC5VKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlApXG4gICAgICAgICAgICAgICAgcEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgaWYgKHRuID09ICQuREwgfHwgdG4gPT09ICQuVUwgfHwgdG4gPT09ICQuT0wpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkxJKVxuICAgICAgICAgICAgICAgIGxpRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpXG4gICAgICAgICAgICAgICAgZGRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IMSB8fCB0biA9PT0gJC5IMiB8fCB0biA9PT0gJC5IMyB8fCB0biA9PT0gJC5INCB8fCB0biA9PT0gJC5INSB8fCB0biA9PT0gJC5INilcbiAgICAgICAgICAgICAgICBudW1iZXJlZEhlYWRlckVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkJSKVxuICAgICAgICAgICAgICAgIGJyRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuRU0gfHwgdG4gPT09ICQuVFQpXG4gICAgICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQklHKVxuICAgICAgICAgICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLkRJUiB8fCB0biA9PT0gJC5ESVYgfHwgdG4gPT09ICQuTkFWKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CT0RZKVxuICAgICAgICAgICAgICAgIGJvZHlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICAgICAgICAgIGh0bWxFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5GT1JNKVxuICAgICAgICAgICAgICAgIGZvcm1FbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5DT0RFIHx8IHRuID09PSAkLkZPTlQgfHwgdG4gPT09ICQuTk9CUilcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5NQUlOIHx8IHRuID09PSAkLk1FTlUpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkFTSURFKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5TTUFMTClcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DRU5URVIgfHwgdG4gPT09ICQuRklHVVJFIHx8IHRuID09PSAkLkZPT1RFUiB8fCB0biA9PT0gJC5IRUFERVIgfHwgdG4gPT09ICQuSEdST1VQKVxuICAgICAgICAgICAgICAgIGFkZHJlc3NFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5BUFBMRVQgfHwgdG4gPT09ICQuT0JKRUNUKVxuICAgICAgICAgICAgICAgIGFwcGxldEVuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09ICQuU1RSSUtFIHx8IHRuID09PSAkLlNUUk9ORylcbiAgICAgICAgICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5BRERSRVNTIHx8IHRuID09PSAkLkFSVElDTEUgfHwgdG4gPT09ICQuREVUQUlMUyB8fCB0biA9PT0gJC5TRUNUSU9OIHx8IHRuID09PSAkLlNVTU1BUlkpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLk1BUlFVRUUpXG4gICAgICAgICAgICAgICAgYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRklFTERTRVQpXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICAgICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5CTE9DS1FVT1RFIHx8IHRuID09PSAkLkZJR0NBUFRJT04pXG4gICAgICAgICAgICAgICAgYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdCA6XG4gICAgICAgICAgICBnZW5lcmljRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVvZkluQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tUb3AgPiAtMSlcbiAgICAgICAgZW9mSW5UZW1wbGF0ZShwLCB0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XG59XG5cbi8vMTIuMi41LjQuOCBUaGUgXCJ0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBlbmRUYWdJblRleHQocCwgdG9rZW4pIHtcbiAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAuc2NyaXB0SGFuZGxlciAmJiB0b2tlbi50YWdOYW1lID09PSAkLlNDUklQVClcbiAgICAgICAgcC5zY3JpcHRIYW5kbGVyKHAuZG9jdW1lbnQsIHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpO1xuXG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG59XG5cblxuZnVuY3Rpb24gZW9mSW5UZXh0KHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuXG4vLzEyLjIuNS40LjkgVGhlIFwiaW4gdGFibGVcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNoYXJhY3RlckluVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgY3VyVG4gPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZTtcblxuICAgIGlmIChjdXJUbiA9PT0gJC5UQUJMRSB8fCBjdXJUbiA9PT0gJC5UQk9EWSB8fCBjdXJUbiA9PT0gJC5URk9PVCB8fCBjdXJUbiA9PT0gJC5USEVBRCB8fCBjdXJUbiA9PT0gJC5UUikge1xuICAgICAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICAgICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gZmFsc2U7XG4gICAgICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9URVhUX01PREU7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBjYXB0aW9uU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DQVBUSU9OX01PREU7XG59XG5cbmZ1bmN0aW9uIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DT0xVTU5fR1JPVVBfTU9ERTtcbn1cblxuZnVuY3Rpb24gY29sU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5fcHJvY2Vzc0Zha2VTdGFydFRhZygkLkNPTEdST1VQKTtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuXG5mdW5jdGlvbiB0Ym9keVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfQk9EWV9NT0RFO1xufVxuXG5mdW5jdGlvbiB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UQk9EWSk7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gdGFibGVTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UQUJMRSk7XG5cbiAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGlucHV0U3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIGlucHV0VHlwZSA9IFRva2VuaXplci5nZXRUb2tlbkF0dHIodG9rZW4sIEFUVFJTLlRZUEUpO1xuXG4gICAgaWYgKGlucHV0VHlwZSAmJiBpbnB1dFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gSElEREVOX0lOUFVUX1RZUEUpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgaWYgKCFwLmZvcm1FbGVtZW50ICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA9PT0gMCkge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5mb3JtRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIHN3aXRjaCAodG4ubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCB8fCB0biA9PT0gJC5UUilcbiAgICAgICAgICAgICAgICB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuQ09MKVxuICAgICAgICAgICAgICAgIGNvbFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuRk9STSlcbiAgICAgICAgICAgICAgICBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSlcbiAgICAgICAgICAgICAgICB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlNUWUxFKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQpXG4gICAgICAgICAgICAgICAgdGJvZHlTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlIGlmICh0biA9PT0gJC5JTlBVVClcbiAgICAgICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuU0NSSVBUKVxuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5DQVBUSU9OKVxuICAgICAgICAgICAgICAgIGNhcHRpb25TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgaWYgKHRuID09PSAkLkNPTEdST1VQKVxuICAgICAgICAgICAgICAgIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHRva2VuKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxuXG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UQUJMRSkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlRBQkxFKTtcbiAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdG9rZW4uaWdub3JlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwgJiZcbiAgICAgICAgICAgICB0biAhPT0gJC5UQk9EWSAmJiB0biAhPT0gJC5URCAmJiB0biAhPT0gJC5URk9PVCAmJiB0biAhPT0gJC5USCAmJiB0biAhPT0gJC5USEVBRCAmJiB0biAhPT0gJC5UUikge1xuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9rZW5JblRhYmxlKHAsIHRva2VuKSB7XG4gICAgdmFyIHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGUgPSBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQ7XG5cbiAgICBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSB0cnVlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbkluQm9keU1vZGUodG9rZW4pO1xuICAgIHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IHNhdmVkRm9zdGVyUGFyZW50aW5nU3RhdGU7XG59XG5cblxuLy8xMi4yLjUuNC4xMCBUaGUgXCJpbiB0YWJsZSB0ZXh0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMucHVzaCh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGNoYXJhY3RlckluVGFibGVUZXh0KHAsIHRva2VuKSB7XG4gICAgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLnB1c2godG9rZW4pO1xuICAgIHAuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbiA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBpZiAocC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHAucGVuZGluZ0NoYXJhY3RlclRva2Vuc1tpXSk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgcC5faW5zZXJ0Q2hhcmFjdGVycyhwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnNbaV0pO1xuICAgIH1cblxuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNC4xMSBUaGUgXCJpbiBjYXB0aW9uXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHwgdG4gPT09ICQuVEJPRFkgfHxcbiAgICAgICAgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEggfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuQ0FQVElPTik7XG5cbiAgICAgICAgLy9OT1RFOiBUaGUgZmFrZSBlbmQgdGFnIHRva2VuIGhlcmUgY2FuIG9ubHkgYmUgaWdub3JlZCBpbiB0aGUgZnJhZ21lbnQgY2FzZS5cbiAgICAgICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuQ0FQVElPTikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkNBUFRJT04pO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX01PREU7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0b2tlbi5pZ25vcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSkge1xuICAgICAgICB2YXIgZmFrZVRva2VuID0gcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5DQVBUSU9OKTtcblxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCAmJiB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlRCT0RZICYmXG4gICAgICAgICAgICAgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEZPT1QgJiYgdG4gIT09ICQuVEggJiYgdG4gIT09ICQuVEhFQUQgJiYgdG4gIT09ICQuVFIpIHtcbiAgICAgICAgZW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5cblxuLy8xMi4yLjUuNC4xMiBUaGUgXCJpbiBjb2x1bW4gZ3JvdXBcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ09MKVxuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlXG4gICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ29sdW1uR3JvdXAocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNPTEdST1VQKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSAhPT0gJC5DT0xHUk9VUClcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xuXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9UQUJMRV9NT0RFO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuVEVNUExBVEUpXG4gICAgICAgIGVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5DT0wpXG4gICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLkNPTEdST1VQKTtcblxuICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgaWYgKCFmYWtlVG9rZW4uaWdub3JlZClcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4xMyBUaGUgXCJpbiB0YWJsZSBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5UUikge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1JPV19NT0RFO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XG4gICAgICAgIHAuX3Byb2Nlc3NGYWtlU3RhcnRUYWcoJC5UUik7XG4gICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5DT0wgfHwgdG4gPT09ICQuQ09MR1JPVVAgfHxcbiAgICAgICAgICAgICB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRCT0RZIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIRUFEKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fVEFCTEVfTU9ERTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuICE9PSAkLkJPRFkgJiYgdG4gIT09ICQuQ0FQVElPTiAmJiB0biAhPT0gJC5DT0wgJiYgdG4gIT09ICQuQ09MR1JPVVAgfHxcbiAgICAgICAgICAgICB0biAhPT0gJC5IVE1MICYmIHRuICE9PSAkLlREICYmIHRuICE9PSAkLlRIICYmIHRuICE9PSAkLlRSKSB7XG4gICAgICAgIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cblxuLy8xMi4yLjUuNC4xNCBUaGUgXCJpbiByb3dcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRIIHx8IHRuID09PSAkLlREKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9DRUxMX01PREU7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgICAgICAgdG4gPT09ICQuVEZPT1QgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIpIHtcbiAgICAgICAgdmFyIGZha2VUb2tlbiA9IHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuVFIpO1xuXG4gICAgICAgIC8vTk9URTogVGhlIGZha2UgZW5kIHRhZyB0b2tlbiBoZXJlIGNhbiBvbmx5IGJlIGlnbm9yZWQgaW4gdGhlIGZyYWdtZW50IGNhc2UuXG4gICAgICAgIGlmICghZmFrZVRva2VuLmlnbm9yZWQpXG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLlRSKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UUikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IElOX1RBQkxFX0JPRFlfTU9ERTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRva2VuLmlnbm9yZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgIHZhciBmYWtlVG9rZW4gPSBwLl9wcm9jZXNzRmFrZUVuZFRhZygkLlRSKTtcblxuICAgICAgICAvL05PVEU6IFRoZSBmYWtlIGVuZCB0YWcgdG9rZW4gaGVyZSBjYW4gb25seSBiZSBpZ25vcmVkIGluIHRoZSBmcmFnbWVudCBjYXNlLlxuICAgICAgICBpZiAoIWZha2VUb2tlbi5pZ25vcmVkKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5UUik7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gIT09ICQuQk9EWSAmJiB0biAhPT0gJC5DQVBUSU9OICYmIHRuICE9PSAkLkNPTCAmJiB0biAhPT0gJC5DT0xHUk9VUCB8fFxuICAgICAgICAgICAgIHRuICE9PSAkLkhUTUwgJiYgdG4gIT09ICQuVEQgJiYgdG4gIT09ICQuVEgpIHtcbiAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxufVxuXG5cbi8vMTIuMi41LjQuMTUgVGhlIFwiaW4gY2VsbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkNlbGwocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuQ09MIHx8IHRuID09PSAkLkNPTEdST1VQIHx8IHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgIHRuID09PSAkLlREIHx8IHRuID09PSAkLlRGT09UIHx8IHRuID09PSAkLlRIIHx8IHRuID09PSAkLlRIRUFEIHx8IHRuID09PSAkLlRSKSB7XG5cbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlREKSB8fCBwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5USCkpIHtcbiAgICAgICAgICAgIHAuX2Nsb3NlVGFibGVDZWxsKCk7XG4gICAgICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luQ2VsbChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSh0bikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fUk9XX01PREU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fCB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fY2xvc2VUYWJsZUNlbGwoKTtcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biAhPT0gJC5CT0RZICYmIHRuICE9PSAkLkNBUFRJT04gJiYgdG4gIT09ICQuQ09MICYmIHRuICE9PSAkLkNPTEdST1VQICYmIHRuICE9PSAkLkhUTUwpXG4gICAgICAgIGVuZFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMTYgVGhlIFwiaW4gc2VsZWN0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luU2VsZWN0KHAsIHRva2VuKSB7XG4gICAgdmFyIHRuID0gdG9rZW4udGFnTmFtZTtcblxuICAgIGlmICh0biA9PT0gJC5IVE1MKVxuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRJT04pIHtcbiAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lID09PSAkLk9QVElPTilcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUSU9OKTtcblxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICB9XG5cbiAgICBlbHNlIGlmICh0biA9PT0gJC5PUFRHUk9VUCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgIHAuX3Byb2Nlc3NGYWtlRW5kVGFnKCQuT1BUR1JPVVApO1xuXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNFTEVDVClcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuSU5QVVQgfHwgdG4gPT09ICQuS0VZR0VOIHx8IHRuID09PSAkLlRFWFRBUkVBKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNlbGVjdFNjb3BlKCQuU0VMRUNUKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlNDUklQVCB8fCB0biA9PT0gJC5URU1QTEFURSlcbiAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdJblNlbGVjdChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuT1BUR1JPVVApIHtcbiAgICAgICAgdmFyIHByZXZPcGVuRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW3Aub3BlbkVsZW1lbnRzLnN0YWNrVG9wIC0gMV0sXG4gICAgICAgICAgICBwcmV2T3BlbkVsZW1lbnRUbiA9IHByZXZPcGVuRWxlbWVudCAmJiBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUocHJldk9wZW5FbGVtZW50KTtcblxuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OICYmIHByZXZPcGVuRWxlbWVudFRuID09PSAkLk9QVEdST1VQKVxuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5PUFRJT04pO1xuXG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnTmFtZSA9PT0gJC5PUFRHUk9VUClcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk9QVElPTikge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ05hbWUgPT09ICQuT1BUSU9OKVxuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuU0VMRUNUICYmIHAub3BlbkVsZW1lbnRzLmhhc0luU2VsZWN0U2NvcGUoJC5TRUxFQ1QpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlNFTEVDVCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIH1cblxuICAgIGVsc2UgaWYgKHRuID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjE3IFRoZSBcImluIHNlbGVjdCBpbiB0YWJsZVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblNlbGVjdEluVGFibGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHwgdG4gPT09ICQuVEFCTEUgfHwgdG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEZPT1QgfHxcbiAgICAgICAgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVFIgfHwgdG4gPT09ICQuVEQgfHwgdG4gPT09ICQuVEgpIHtcbiAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgc3RhcnRUYWdJblNlbGVjdChwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGVuZFRhZ0luU2VsZWN0SW5UYWJsZShwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fCB0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5UQk9EWSB8fCB0biA9PT0gJC5URk9PVCB8fFxuICAgICAgICB0biA9PT0gJC5USEVBRCB8fCB0biA9PT0gJC5UUiB8fCB0biA9PT0gJC5URCB8fCB0biA9PT0gJC5USCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc0Zha2VFbmRUYWcoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVsc2VcbiAgICAgICAgZW5kVGFnSW5TZWxlY3QocCwgdG9rZW4pO1xufVxuXG4vLzEyLjIuNS40LjE4IFRoZSBcImluIHRlbXBsYXRlXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGVtcGxhdGUocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkJBU0UgfHwgdG4gPT09ICQuQkFTRUZPTlQgfHwgdG4gPT09ICQuQkdTT1VORCB8fCB0biA9PT0gJC5MSU5LIHx8IHRuID09PSAkLk1FVEEgfHxcbiAgICAgICAgdG4gPT09ICQuTk9GUkFNRVMgfHwgdG4gPT09ICQuU0NSSVBUIHx8IHRuID09PSAkLlNUWUxFIHx8IHRuID09PSAkLlRFTVBMQVRFIHx8IHRuID09PSAkLlRJVExFKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIG5ld0luc2VydGlvbk1vZGUgPSBURU1QTEFURV9JTlNFUlRJT05fTU9ERV9TV0lUQ0hfTUFQW3RuXSB8fCBJTl9CT0RZX01PREU7XG5cbiAgICAgICAgcC5fcG9wVG1wbEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHVzaFRtcGxJbnNlcnRpb25Nb2RlKG5ld0luc2VydGlvbk1vZGUpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBuZXdJbnNlcnRpb25Nb2RlO1xuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5UZW1wbGF0ZShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLlRFTVBMQVRFKVxuICAgICAgICBlbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlb2ZJblRlbXBsYXRlKHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA+IDApIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUZW1wbGF0ZVBvcHBlZCgpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICBwLl9wb3BUbXBsSW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBlbHNlXG4gICAgICAgIHAuc3RvcHBlZCA9IHRydWU7XG59XG5cblxuLy8xMi4yLjUuNC4xOSBUaGUgXCJhZnRlciBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5BZnRlckJvZHkocCwgdG9rZW4pO1xufVxuXG5mdW5jdGlvbiBlbmRUYWdBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnTmFtZSA9PT0gJC5IVE1MKSB7XG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQpXG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBBRlRFUl9BRlRFUl9CT0RZX01PREU7XG4gICAgfVxuXG4gICAgZWxzZVxuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSU5fQk9EWV9NT0RFO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG5cbi8vMTIuMi41LjQuMjAgVGhlIFwiaW4gZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5GcmFtZXNldChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUVTRVQpXG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuRlJBTUUpXG4gICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5GcmFtZXNldChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkZSQU1FU0VUICYmICFwLm9wZW5FbGVtZW50cy5pc1Jvb3RIdG1sRWxlbWVudEN1cnJlbnQoKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcblxuICAgICAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdOYW1lICE9PSAkLkZSQU1FU0VUKVxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gQUZURVJfRlJBTUVTRVRfTU9ERTtcbiAgICB9XG59XG5cbi8vMTIuMi41LjQuMjEgVGhlIFwiYWZ0ZXIgZnJhbWVzZXRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIHZhciB0biA9IHRva2VuLnRhZ05hbWU7XG5cbiAgICBpZiAodG4gPT09ICQuSFRNTClcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuXG4gICAgZWxzZSBpZiAodG4gPT09ICQuTk9GUkFNRVMpXG4gICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbn1cblxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEFGVEVSX0FGVEVSX0ZSQU1FU0VUX01PREU7XG59XG5cbi8vMTIuMi41LjQuMjIgVGhlIFwiYWZ0ZXIgYWZ0ZXIgYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdOYW1lID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2VcbiAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbik7XG59XG5cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJTl9CT0RZX01PREU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cblxuLy8xMi4yLjUuNC4yMyBUaGUgXCJhZnRlciBhZnRlciBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICB2YXIgdG4gPSB0b2tlbi50YWdOYW1lO1xuXG4gICAgaWYgKHRuID09PSAkLkhUTUwpXG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcblxuICAgIGVsc2UgaWYgKHRuID09PSAkLk5PRlJBTUVTKVxuICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG59XG5cblxuLy8xMi4yLjUuNSBUaGUgcnVsZXMgZm9yIHBhcnNpbmcgdG9rZW5zIGluIGZvcmVpZ24gY29udGVudFxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIG51bGxDaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XG4gICAgdG9rZW4uY2hhcnMgPSBVTklDT0RFLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cblxuZnVuY3Rpb24gY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzdGFydFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICBpZiAoRm9yZWlnbkNvbnRlbnQuY2F1c2VzRXhpdCh0b2tlbikgJiYgIXAuZnJhZ21lbnRDb250ZXh0KSB7XG4gICAgICAgIHdoaWxlIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShwLm9wZW5FbGVtZW50cy5jdXJyZW50KSAhPT0gTlMuSFRNTCAmJlxuICAgICAgICAgICAgICAgKCFwLl9pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSAmJlxuICAgICAgICAgICAgICAgKCFwLl9pc0h0bWxJbnRlZ3JhdGlvblBvaW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgY3VycmVudCA9IHAuX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKSxcbiAgICAgICAgICAgIGN1cnJlbnROcyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpO1xuXG4gICAgICAgIGlmIChjdXJyZW50TnMgPT09IE5TLk1BVEhNTClcbiAgICAgICAgICAgIEZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuTWF0aE1MQXR0cnModG9rZW4pO1xuXG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnROcyA9PT0gTlMuU1ZHKSB7XG4gICAgICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR1RhZ05hbWUodG9rZW4pO1xuICAgICAgICAgICAgRm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbik7XG4gICAgICAgIH1cblxuICAgICAgICBGb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcblxuICAgICAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpXG4gICAgICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZW5kVGFnSW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIGZvciAodmFyIGkgPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+IDA7IGktLSkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldO1xuXG4gICAgICAgIGlmIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KS50b0xvd2VyQ2FzZSgpID09PSB0b2tlbi50YWdOYW1lKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbEVsZW1lbnRQb3BwZWQoZWxlbWVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIihmdW5jdGlvbiAocHJvY2VzcyxnbG9iYWwpe1xuLyohXG4gKiBAb3ZlcnZpZXcgZXM2LXByb21pc2UgLSBhIHRpbnkgaW1wbGVtZW50YXRpb24gb2YgUHJvbWlzZXMvQSsuXG4gKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAxNCBZZWh1ZGEgS2F0eiwgVG9tIERhbGUsIFN0ZWZhbiBQZW5uZXIgYW5kIGNvbnRyaWJ1dG9ycyAoQ29udmVyc2lvbiB0byBFUzYgQVBJIGJ5IEpha2UgQXJjaGliYWxkKVxuICogQGxpY2Vuc2UgICBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZVxuICogICAgICAgICAgICBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2pha2VhcmNoaWJhbGQvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgMi4zLjBcbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRvYmplY3RPckZ1bmN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc01heWJlVGhlbmFibGUoeCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsO1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkdXRpbHMkJF9pc0FycmF5O1xuICAgIGlmICghQXJyYXkuaXNBcnJheSkge1xuICAgICAgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkdXRpbHMkJF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHV0aWxzJCRpc0FycmF5ID0gbGliJGVzNiRwcm9taXNlJHV0aWxzJCRfaXNBcnJheTtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGxlbiA9IDA7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkdmVydHhOZXh0O1xuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkY3VzdG9tU2NoZWR1bGVyRm47XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGFzYXAgPSBmdW5jdGlvbiBhc2FwKGNhbGxiYWNrLCBhcmcpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuXSA9IGNhbGxiYWNrO1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2xpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW4gKyAxXSA9IGFyZztcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW4gKz0gMjtcbiAgICAgIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuID09PSAyKSB7XG4gICAgICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAgICAgLy8gSWYgYWRkaXRpb25hbCBjYWxsYmFja3MgYXJlIHF1ZXVlZCBiZWZvcmUgdGhlIHF1ZXVlIGlzIGZsdXNoZWQsIHRoZXlcbiAgICAgICAgLy8gd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBmbHVzaCB0aGF0IHdlIGFyZSBzY2hlZHVsaW5nLlxuICAgICAgICBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuKGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHNjaGVkdWxlRmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzZXRTY2hlZHVsZXIoc2NoZWR1bGVGbikge1xuICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGN1c3RvbVNjaGVkdWxlckZuID0gc2NoZWR1bGVGbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2V0QXNhcChhc2FwRm4pIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwID0gYXNhcEZuO1xuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3NlcldpbmRvdyA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyR2xvYmFsID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJXaW5kb3cgfHwge307XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlciA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRicm93c2VyR2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgbGliJGVzNiRwcm9taXNlJGFzYXAkJGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJGFzYXAkJGlzTm9kZSA9IHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB7fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbiAgICAvLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAvLyBub2RlXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU5leHRUaWNrKCkge1xuICAgICAgdmFyIG5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAgICAgLy8gc2V0SW1tZWRpYXRlIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgaW5zdGVhZFxuICAgICAgdmFyIHZlcnNpb24gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUubWF0Y2goL14oPzooXFxkKylcXC4pPyg/OihcXGQrKVxcLik/KFxcKnxcXGQrKSQvKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZlcnNpb24pICYmIHZlcnNpb25bMV0gPT09ICcwJyAmJiB2ZXJzaW9uWzJdID09PSAnMTAnKSB7XG4gICAgICAgIG5leHRUaWNrID0gc2V0SW1tZWRpYXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBuZXh0VGljayhsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB2ZXJ0eFxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VWZXJ0eFRpbWVyKCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkdmVydHhOZXh0KGxpYiRlczYkcHJvbWlzZSRhc2FwJCRmbHVzaCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCkge1xuICAgICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgICAgdmFyIG9ic2VydmVyID0gbmV3IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRCcm93c2VyTXV0YXRpb25PYnNlcnZlcihsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2gpO1xuICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBub2RlLmRhdGEgPSAoaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB3ZWIgd29ya2VyXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgwKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVNldFRpbWVvdXQoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHNldFRpbWVvdXQobGliJGVzNiRwcm9taXNlJGFzYXAkJGZsdXNoLCAxKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkZmx1c2goKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRsZW47IGkrPTIpIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2ldO1xuICAgICAgICB2YXIgYXJnID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHF1ZXVlW2krMV07XG5cbiAgICAgICAgY2FsbGJhY2soYXJnKTtcblxuICAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkcXVldWVbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRxdWV1ZVtpKzFdID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkbGVuID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXR0ZW1wdFZlcnRleCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByID0gcmVxdWlyZTtcbiAgICAgICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJHZlcnR4TmV4dCA9IHZlcnR4LnJ1bk9uTG9vcCB8fCB2ZXJ0eC5ydW5PbkNvbnRleHQ7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlVmVydHhUaW1lcigpO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkYXNhcCQkdXNlU2V0VGltZW91dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaDtcbiAgICAvLyBEZWNpZGUgd2hhdCBhc3luYyBtZXRob2QgdG8gdXNlIHRvIHRyaWdnZXJpbmcgcHJvY2Vzc2luZyBvZiBxdWV1ZWQgY2FsbGJhY2tzOlxuICAgIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNOb2RlKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VOZXh0VGljaygpO1xuICAgIH0gZWxzZSBpZiAobGliJGVzNiRwcm9taXNlJGFzYXAkJEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCR1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG4gICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkaXNXb3JrZXIpIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZU1lc3NhZ2VDaGFubmVsKCk7XG4gICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkYXNhcCQkYnJvd3NlcldpbmRvdyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2NoZWR1bGVGbHVzaCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhdHRlbXB0VmVydGV4KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzY2hlZHVsZUZsdXNoID0gbGliJGVzNiRwcm9taXNlJGFzYXAkJHVzZVNldFRpbWVvdXQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKCkge31cblxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HICAgPSB2b2lkIDA7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCA9IDE7XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEICA9IDI7XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkR0VUX1RIRU5fRVJST1IgPSBuZXcgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKTtcblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHNlbGZGdWxsZmlsbG1lbnQoKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkY2Fubm90UmV0dXJuT3duKCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRnZXRUaGVuKHByb21pc2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlLnRoZW47XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRHRVRfVEhFTl9FUlJPUjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHtcbiAgICAgICBsaWIkZXM2JHByb21pc2UkYXNhcCQkYXNhcChmdW5jdGlvbihwcm9taXNlKSB7XG4gICAgICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5VGhlbih0aGVuLCB0aGVuYWJsZSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBpZiAoc2VhbGVkKSB7IHJldHVybjsgfVxuICAgICAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgaWYgKHNlYWxlZCkgeyByZXR1cm47IH1cbiAgICAgICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0sICdTZXR0bGU6ICcgKyAocHJvbWlzZS5fbGFiZWwgfHwgJyB1bmtub3duIHByb21pc2UnKSk7XG5cbiAgICAgICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0sIHByb21pc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIHRoZW5hYmxlKSB7XG4gICAgICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgICAgIH0gZWxzZSBpZiAodGhlbmFibGUuX3N0YXRlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdGhlbmFibGUuX3Jlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSkge1xuICAgICAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGhlbiA9IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGdldFRoZW4obWF5YmVUaGVuYWJsZSk7XG5cbiAgICAgICAgaWYgKHRoZW4gPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEdFVF9USEVOX0VSUk9SLmVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGVuID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbih0aGVuKSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRzZWxmRnVsbGZpbGxtZW50KCkpO1xuICAgICAgfSBlbHNlIGlmIChsaWIkZXM2JHByb21pc2UkdXRpbHMkJG9iamVjdE9yRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gICAgICBpZiAocHJvbWlzZS5fb25lcnJvcikge1xuICAgICAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gocHJvbWlzZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7IHJldHVybjsgfVxuXG4gICAgICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3N0YXRlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEO1xuXG4gICAgICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2gsIHByb21pc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykgeyByZXR1cm47IH1cbiAgICAgIHByb21pc2UuX3N0YXRlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQ7XG4gICAgICBwcm9taXNlLl9yZXN1bHQgPSByZWFzb247XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICAgICAgdmFyIHN1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgICAgIHZhciBsZW5ndGggPSBzdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgICAgIHBhcmVudC5fb25lcnJvciA9IG51bGw7XG5cbiAgICAgIHN1YnNjcmliZXJzW2xlbmd0aF0gPSBjaGlsZDtcbiAgICAgIHN1YnNjcmliZXJzW2xlbmd0aCArIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50O1xuICAgICAgc3Vic2NyaWJlcnNbbGVuZ3RoICsgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURURdICA9IG9uUmVqZWN0aW9uO1xuXG4gICAgICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJGFzYXAkJGFzYXAobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcHVibGlzaCwgcGFyZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRwdWJsaXNoKHByb21pc2UpIHtcbiAgICAgIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICAgICAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTtcblxuICAgICAgaWYgKHN1YnNjcmliZXJzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cblxuICAgICAgdmFyIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsID0gcHJvbWlzZS5fcmVzdWx0O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07XG4gICAgICAgIGNhbGxiYWNrID0gc3Vic2NyaWJlcnNbaSArIHNldHRsZWRdO1xuXG4gICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRXJyb3JPYmplY3QoKSB7XG4gICAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SID0gbmV3IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEVycm9yT2JqZWN0KCk7XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCR0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZGV0YWlsKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgICAgICByZXR1cm4gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkVFJZX0NBVENIX0VSUk9SO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgICAgIHZhciBoYXNDYWxsYmFjayA9IGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICAgICAgdmFsdWUsIGVycm9yLCBzdWNjZWVkZWQsIGZhaWxlZDtcblxuICAgICAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgICAgIHZhbHVlID0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCk7XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRUUllfQ0FUQ0hfRVJST1IpIHtcbiAgICAgICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7XG4gICAgICAgIC8vIG5vb3BcbiAgICAgIH0gZWxzZSBpZiAoaGFzQ2FsbGJhY2sgJiYgc3VjY2VlZGVkKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChmYWlsZWQpIHtcbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkRlVMRklMTEVEKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRSRUpFQ1RFRCkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGluaXRpYWxpemVQcm9taXNlKHByb21pc2UsIHJlc29sdmVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSl7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvcihDb25zdHJ1Y3RvciwgaW5wdXQpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcblxuICAgICAgZW51bWVyYXRvci5faW5zdGFuY2VDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgICAgZW51bWVyYXRvci5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuXG4gICAgICBpZiAoZW51bWVyYXRvci5fdmFsaWRhdGVJbnB1dChpbnB1dCkpIHtcbiAgICAgICAgZW51bWVyYXRvci5faW5wdXQgICAgID0gaW5wdXQ7XG4gICAgICAgIGVudW1lcmF0b3IubGVuZ3RoICAgICA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgICAgIGVudW1lcmF0b3IuX2luaXQoKTtcblxuICAgICAgICBpZiAoZW51bWVyYXRvci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRmdWxmaWxsKGVudW1lcmF0b3IucHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtZXJhdG9yLmxlbmd0aCA9IGVudW1lcmF0b3IubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgZW51bWVyYXRvci5fZW51bWVyYXRlKCk7XG4gICAgICAgICAgaWYgKGVudW1lcmF0b3IuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkZnVsZmlsbChlbnVtZXJhdG9yLnByb21pc2UsIGVudW1lcmF0b3IuX3Jlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QoZW51bWVyYXRvci5wcm9taXNlLCBlbnVtZXJhdG9yLl92YWxpZGF0aW9uRXJyb3IoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0ZUlucHV0ID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgIHJldHVybiBsaWIkZXM2JHByb21pc2UkdXRpbHMkJGlzQXJyYXkoaW5wdXQpO1xuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3ZhbGlkYXRpb25FcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignQXJyYXkgTWV0aG9kcyBtdXN0IGJlIHByb3ZpZGVkIGFuIEFycmF5Jyk7XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcbiAgICB9O1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3I7XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gICAgICB2YXIgbGVuZ3RoICA9IGVudW1lcmF0b3IubGVuZ3RoO1xuICAgICAgdmFyIHByb21pc2UgPSBlbnVtZXJhdG9yLnByb21pc2U7XG4gICAgICB2YXIgaW5wdXQgICA9IGVudW1lcmF0b3IuX2lucHV0O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX2VhY2hFbnRyeShpbnB1dFtpXSwgaSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxpYiRlczYkcHJvbWlzZSRlbnVtZXJhdG9yJCRFbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24oZW50cnksIGkpIHtcbiAgICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcbiAgICAgIHZhciBjID0gZW51bWVyYXRvci5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcblxuICAgICAgaWYgKGxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNNYXliZVRoZW5hYmxlKGVudHJ5KSkge1xuICAgICAgICBpZiAoZW50cnkuY29uc3RydWN0b3IgPT09IGMgJiYgZW50cnkuX3N0YXRlICE9PSBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRQRU5ESU5HKSB7XG4gICAgICAgICAgZW50cnkuX29uZXJyb3IgPSBudWxsO1xuICAgICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdChlbnRyeS5fc3RhdGUsIGksIGVudHJ5Ll9yZXN1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudW1lcmF0b3IuX3dpbGxTZXR0bGVBdChjLnJlc29sdmUoZW50cnkpLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW51bWVyYXRvci5fcmVtYWluaW5nLS07XG4gICAgICAgIGVudW1lcmF0b3IuX3Jlc3VsdFtpXSA9IGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBsaWIkZXM2JHByb21pc2UkZW51bWVyYXRvciQkRW51bWVyYXRvci5wcm90b3R5cGUuX3NldHRsZWRBdCA9IGZ1bmN0aW9uKHN0YXRlLCBpLCB2YWx1ZSkge1xuICAgICAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuICAgICAgdmFyIHByb21pc2UgPSBlbnVtZXJhdG9yLnByb21pc2U7XG5cbiAgICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUEVORElORykge1xuICAgICAgICBlbnVtZXJhdG9yLl9yZW1haW5pbmctLTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFJFSkVDVEVEKSB7XG4gICAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtZXJhdG9yLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZW51bWVyYXRvci5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJGZ1bGZpbGwocHJvbWlzZSwgZW51bWVyYXRvci5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJEVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbihwcm9taXNlLCBpKSB7XG4gICAgICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIGVudW1lcmF0b3IuX3NldHRsZWRBdChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICBlbnVtZXJhdG9yLl9zZXR0bGVkQXQobGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQsIGksIHJlYXNvbik7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkYWxsKGVudHJpZXMpIHtcbiAgICAgIHJldHVybiBuZXcgbGliJGVzNiRwcm9taXNlJGVudW1lcmF0b3IkJGRlZmF1bHQodGhpcywgZW50cmllcykucHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkYWxsO1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJhY2UkJHJhY2UoZW50cmllcykge1xuICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuXG4gICAgICBpZiAoIWxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZWplY3QocHJvbWlzZSwgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgZnVuY3Rpb24gb25GdWxmaWxsbWVudCh2YWx1ZSkge1xuICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRyZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gb25SZWplY3Rpb24ocmVhc29uKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgcHJvbWlzZS5fc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJFBFTkRJTkcgJiYgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShDb25zdHJ1Y3Rvci5yZXNvbHZlKGVudHJpZXNbaV0pLCB1bmRlZmluZWQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyYWNlJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmFjZSQkcmFjZTtcbiAgICBmdW5jdGlvbiBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZXNvbHZlJCRyZXNvbHZlKG9iamVjdCkge1xuICAgICAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgICAgIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3Rvcikge1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcbiAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHJlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICB2YXIgbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVzb2x2ZSQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlc29sdmUkJHJlc29sdmU7XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVqZWN0JCRyZWplY3QocmVhc29uKSB7XG4gICAgICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJG5vb3ApO1xuICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkZGVmYXVsdCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJHJlamVjdCQkcmVqZWN0O1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRjb3VudGVyID0gMDtcblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc1Jlc29sdmVyKCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc05ldygpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0ID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2U7XG4gICAgLyoqXG4gICAgICBQcm9taXNlIG9iamVjdHMgcmVwcmVzZW50IHRoZSBldmVudHVhbCByZXN1bHQgb2YgYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbi4gVGhlXG4gICAgICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICAgICAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uXG4gICAgICB3aHkgdGhlIHByb21pc2UgY2Fubm90IGJlIGZ1bGZpbGxlZC5cblxuICAgICAgVGVybWlub2xvZ3lcbiAgICAgIC0tLS0tLS0tLS0tXG5cbiAgICAgIC0gYHByb21pc2VgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB3aXRoIGEgYHRoZW5gIG1ldGhvZCB3aG9zZSBiZWhhdmlvciBjb25mb3JtcyB0byB0aGlzIHNwZWNpZmljYXRpb24uXG4gICAgICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gICAgICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2FsIEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEgcHJvbWlzZSkuXG4gICAgICAtIGBleGNlcHRpb25gIGlzIGEgdmFsdWUgdGhhdCBpcyB0aHJvd24gdXNpbmcgdGhlIHRocm93IHN0YXRlbWVudC5cbiAgICAgIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgICAgIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEgcHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuXG4gICAgICBBIHByb21pc2UgY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXM6IHBlbmRpbmcsIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQuXG5cbiAgICAgIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gICAgICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlXG4gICAgICByZWplY3RlZCBzdGF0ZS4gIEEgZnVsZmlsbG1lbnQgdmFsdWUgaXMgbmV2ZXIgYSB0aGVuYWJsZS5cblxuICAgICAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gICAgICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBwcm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzXG4gICAgICBzZXR0bGVkIHN0YXRlLiAgU28gYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCByZWplY3RzIHdpbGxcbiAgICAgIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgICAgIGl0c2VsZiBmdWxmaWxsLlxuXG5cbiAgICAgIEJhc2ljIFVzYWdlOlxuICAgICAgLS0tLS0tLS0tLS0tXG5cbiAgICAgIGBgYGpzXG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAvLyBvbiBzdWNjZXNzXG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuXG4gICAgICAgIC8vIG9uIGZhaWx1cmVcbiAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICB9KTtcblxuICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAgICAgLy8gb24gcmVqZWN0aW9uXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBBZHZhbmNlZCBVc2FnZTpcbiAgICAgIC0tLS0tLS0tLS0tLS0tLVxuXG4gICAgICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzXG4gICAgICBgWE1MSHR0cFJlcXVlc3Rgcy5cblxuICAgICAgYGBganNcbiAgICAgIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBoYW5kbGVyO1xuICAgICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgICAgeGhyLnNlbmQoKTtcblxuICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ2dldEpTT046IGAnICsgdXJsICsgJ2AgZmFpbGVkIHdpdGggc3RhdHVzOiBbJyArIHRoaXMuc3RhdHVzICsgJ10nKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ2V0SlNPTignL3Bvc3RzLmpzb24nKS50aGVuKGZ1bmN0aW9uKGpzb24pIHtcbiAgICAgICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgICAgIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgICAgICAvLyBvbiByZWplY3Rpb25cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFVubGlrZSBjYWxsYmFja3MsIHByb21pc2VzIGFyZSBncmVhdCBjb21wb3NhYmxlIHByaW1pdGl2ZXMuXG5cbiAgICAgIGBgYGpzXG4gICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgIGdldEpTT04oJy9wb3N0cycpLFxuICAgICAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICAgICAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpe1xuICAgICAgICB2YWx1ZXNbMF0gLy8gPT4gcG9zdHNKU09OXG4gICAgICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQGNsYXNzIFByb21pc2VcbiAgICAgIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVyXG4gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgICBAY29uc3RydWN0b3JcbiAgICAqL1xuICAgIGZ1bmN0aW9uIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlKHJlc29sdmVyKSB7XG4gICAgICB0aGlzLl9pZCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRjb3VudGVyKys7XG4gICAgICB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgICAgIGlmIChsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wICE9PSByZXNvbHZlcikge1xuICAgICAgICBpZiAoIWxpYiRlczYkcHJvbWlzZSR1dGlscyQkaXNGdW5jdGlvbihyZXNvbHZlcikpIHtcbiAgICAgICAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkbmVlZHNSZXNvbHZlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlKSkge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRuZWVkc05ldygpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLmFsbCA9IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJGFsbCQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yYWNlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmFjZSQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yZXNvbHZlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkcmVzb2x2ZSQkZGVmYXVsdDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5yZWplY3QgPSBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSRyZWplY3QkJGRlZmF1bHQ7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UuX3NldFNjaGVkdWxlciA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRzZXRTY2hlZHVsZXI7XG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UuX3NldEFzYXAgPSBsaWIkZXM2JHByb21pc2UkYXNhcCQkc2V0QXNhcDtcbiAgICBsaWIkZXM2JHByb21pc2UkcHJvbWlzZSQkUHJvbWlzZS5fYXNhcCA9IGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwO1xuXG4gICAgbGliJGVzNiRwcm9taXNlJHByb21pc2UkJFByb21pc2UucHJvdG90eXBlID0ge1xuICAgICAgY29uc3RydWN0b3I6IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRQcm9taXNlLFxuXG4gICAgLyoqXG4gICAgICBUaGUgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCxcbiAgICAgIHdoaWNoIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlXG4gICAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24odXNlcil7XG4gICAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gICAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyB1c2VyIGlzIHVuYXZhaWxhYmxlLCBhbmQgeW91IGFyZSBnaXZlbiB0aGUgcmVhc29uIHdoeVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQ2hhaW5pbmdcbiAgICAgIC0tLS0tLS0tXG5cbiAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgYHRoZW5gIGlzIGl0c2VsZiBhIHByb21pc2UuICBUaGlzIHNlY29uZCwgJ2Rvd25zdHJlYW0nXG4gICAgICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3QgcHJvbWlzZSdzIGZ1bGZpbGxtZW50XG4gICAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICByZXR1cm4gdXNlci5uYW1lO1xuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICByZXR1cm4gJ2RlZmF1bHQgbmFtZSc7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAgIC8vIHdpbGwgYmUgYCdkZWZhdWx0IG5hbWUnYFxuICAgICAgfSk7XG5cbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgICAvLyBJZiBgZmluZFVzZXJgIHJlamVjdGVkLCBgcmVhc29uYCB3aWxsIGJlICdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jy5cbiAgICAgIH0pO1xuICAgICAgYGBgXG4gICAgICBJZiB0aGUgZG93bnN0cmVhbSBwcm9taXNlIGRvZXMgbm90IHNwZWNpZnkgYSByZWplY3Rpb24gaGFuZGxlciwgcmVqZWN0aW9uIHJlYXNvbnMgd2lsbCBiZSBwcm9wYWdhdGVkIGZ1cnRoZXIgZG93bnN0cmVhbS5cblxuICAgICAgYGBganNcbiAgICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBBc3NpbWlsYXRpb25cbiAgICAgIC0tLS0tLS0tLS0tLVxuXG4gICAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgICAgcmV0cmlldmVkIGFzeW5jaHJvbm91c2x5LiBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSByZXR1cm5pbmcgYSBwcm9taXNlIGluIHRoZVxuICAgICAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAgIC8vIFRoZSB1c2VyJ3MgY29tbWVudHMgYXJlIG5vdyBhdmFpbGFibGVcbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuXG4gICAgICBgYGBqc1xuICAgICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgZnVsZmlsbHMsIHdlJ2xsIGhhdmUgdGhlIHZhbHVlIGhlcmVcbiAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgU2ltcGxlIEV4YW1wbGVcbiAgICAgIC0tLS0tLS0tLS0tLS0tXG5cbiAgICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgpO1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9XG4gICAgICBgYGBcblxuICAgICAgRXJyYmFjayBFeGFtcGxlXG5cbiAgICAgIGBgYGpzXG4gICAgICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIGZhaWx1cmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzdWNjZXNzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFByb21pc2UgRXhhbXBsZTtcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgZmluZFJlc3VsdCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgICAgLS0tLS0tLS0tLS0tLS1cblxuICAgICAgU3luY2hyb25vdXMgRXhhbXBsZVxuXG4gICAgICBgYGBqYXZhc2NyaXB0XG4gICAgICB2YXIgYXV0aG9yLCBib29rcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgICBib29rcyAgPSBmaW5kQm9va3NCeUF1dGhvcihhdXRob3IpO1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9XG4gICAgICBgYGBcblxuICAgICAgRXJyYmFjayBFeGFtcGxlXG5cbiAgICAgIGBgYGpzXG5cbiAgICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcblxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuXG4gICAgICB9XG5cbiAgICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgIC8vIGZhaWx1cmVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tzKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgZmFpbHVyZShyZWFzb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzdWNjZXNzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYGBgXG5cbiAgICAgIFByb21pc2UgRXhhbXBsZTtcblxuICAgICAgYGBgamF2YXNjcmlwdFxuICAgICAgZmluZEF1dGhvcigpLlxuICAgICAgICB0aGVuKGZpbmRCb29rc0J5QXV0aG9yKS5cbiAgICAgICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICB9KTtcbiAgICAgIGBgYFxuXG4gICAgICBAbWV0aG9kIHRoZW5cbiAgICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkXG4gICAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAgICovXG4gICAgICB0aGVuOiBmdW5jdGlvbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUgPT09IGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJEZVTEZJTExFRCAmJiAhb25GdWxmaWxsbWVudCB8fCBzdGF0ZSA9PT0gbGliJGVzNiRwcm9taXNlJCRpbnRlcm5hbCQkUkVKRUNURUQgJiYgIW9uUmVqZWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRub29wKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHBhcmVudC5fcmVzdWx0O1xuXG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1tzdGF0ZSAtIDFdO1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSRhc2FwJCRhc2FwKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBsaWIkZXM2JHByb21pc2UkJGludGVybmFsJCRpbnZva2VDYWxsYmFjayhzdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCByZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpYiRlczYkcHJvbWlzZSQkaW50ZXJuYWwkJHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9LFxuXG4gICAgLyoqXG4gICAgICBgY2F0Y2hgIGlzIHNpbXBseSBzdWdhciBmb3IgYHRoZW4odW5kZWZpbmVkLCBvblJlamVjdGlvbilgIHdoaWNoIG1ha2VzIGl0IHRoZSBzYW1lXG4gICAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuXG4gICAgICBgYGBqc1xuICAgICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkbid0IGZpbmQgdGhhdCBhdXRob3InKTtcbiAgICAgIH1cblxuICAgICAgLy8gc3luY2hyb25vdXNcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbmRBdXRob3IoKTtcbiAgICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICB9XG5cbiAgICAgIC8vIGFzeW5jIHdpdGggcHJvbWlzZXNcbiAgICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgICAgfSk7XG4gICAgICBgYGBcblxuICAgICAgQG1ldGhvZCBjYXRjaFxuICAgICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICAgKi9cbiAgICAgICdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pO1xuICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRwb2x5ZmlsbCgpIHtcbiAgICAgIHZhciBsb2NhbDtcblxuICAgICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWwgPSBnbG9iYWw7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGxvY2FsID0gc2VsZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbG9jYWwgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgICAgaWYgKFAgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKSA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsb2NhbC5Qcm9taXNlID0gbGliJGVzNiRwcm9taXNlJHByb21pc2UkJGRlZmF1bHQ7XG4gICAgfVxuICAgIHZhciBsaWIkZXM2JHByb21pc2UkcG9seWZpbGwkJGRlZmF1bHQgPSBsaWIkZXM2JHByb21pc2UkcG9seWZpbGwkJHBvbHlmaWxsO1xuXG4gICAgdmFyIGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2UgPSB7XG4gICAgICAnUHJvbWlzZSc6IGxpYiRlczYkcHJvbWlzZSRwcm9taXNlJCRkZWZhdWx0LFxuICAgICAgJ3BvbHlmaWxsJzogbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0XG4gICAgfTtcblxuICAgIC8qIGdsb2JhbCBkZWZpbmU6dHJ1ZSBtb2R1bGU6dHJ1ZSB3aW5kb3c6IHRydWUgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKSB7XG4gICAgICBkZWZpbmUoZnVuY3Rpb24oKSB7IHJldHVybiBsaWIkZXM2JHByb21pc2UkdW1kJCRFUzZQcm9taXNlOyB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZVsnZXhwb3J0cyddKSB7XG4gICAgICBtb2R1bGVbJ2V4cG9ydHMnXSA9IGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNbJ0VTNlByb21pc2UnXSA9IGxpYiRlczYkcHJvbWlzZSR1bWQkJEVTNlByb21pc2U7XG4gICAgfVxuXG4gICAgbGliJGVzNiRwcm9taXNlJHBvbHlmaWxsJCRkZWZhdWx0KCk7XG59KS5jYWxsKHRoaXMpO1xuXG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5bGN6WXRjSEp2YldselpTOWthWE4wTDJWek5pMXdjbTl0YVhObExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdRVUZCUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9oWEc0Z0tpQkFiM1psY25acFpYY2daWE0yTFhCeWIyMXBjMlVnTFNCaElIUnBibmtnYVcxd2JHVnRaVzUwWVhScGIyNGdiMllnVUhKdmJXbHpaWE12UVNzdVhHNGdLaUJBWTI5d2VYSnBaMmgwSUVOdmNIbHlhV2RvZENBb1l5a2dNakF4TkNCWlpXaDFaR0VnUzJGMGVpd2dWRzl0SUVSaGJHVXNJRk4wWldaaGJpQlFaVzV1WlhJZ1lXNWtJR052Ym5SeWFXSjFkRzl5Y3lBb1EyOXVkbVZ5YzJsdmJpQjBieUJGVXpZZ1FWQkpJR0o1SUVwaGEyVWdRWEpqYUdsaVlXeGtLVnh1SUNvZ1FHeHBZMlZ1YzJVZ0lDQk1hV05sYm5ObFpDQjFibVJsY2lCTlNWUWdiR2xqWlc1elpWeHVJQ29nSUNBZ0lDQWdJQ0FnSUNCVFpXVWdhSFIwY0hNNkx5OXlZWGN1WjJsMGFIVmlkWE5sY21OdmJuUmxiblF1WTI5dEwycGhhMlZoY21Ob2FXSmhiR1F2WlhNMkxYQnliMjFwYzJVdmJXRnpkR1Z5TDB4SlEwVk9VMFZjYmlBcUlFQjJaWEp6YVc5dUlDQWdNaTR6TGpCY2JpQXFMMXh1WEc0b1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ1hDSjFjMlVnYzNSeWFXTjBYQ0k3WEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpIVjBhV3h6SkNSdlltcGxZM1JQY2taMWJtTjBhVzl1S0hncElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGVYQmxiMllnZUNBOVBUMGdKMloxYm1OMGFXOXVKeUI4ZkNBb2RIbHdaVzltSUhnZ1BUMDlJQ2R2WW1wbFkzUW5JQ1ltSUhnZ0lUMDlJRzUxYkd3cE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1IxZEdsc2N5UWthWE5HZFc1amRHbHZiaWg0S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEhsd1pXOW1JSGdnUFQwOUlDZG1kVzVqZEdsdmJpYzdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhWMGFXeHpKQ1JwYzAxaGVXSmxWR2hsYm1GaWJHVW9lQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFI1Y0dWdlppQjRJRDA5UFNBbmIySnFaV04wSnlBbUppQjRJQ0U5UFNCdWRXeHNPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIWmhjaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtkWFJwYkhNa0pGOXBjMEZ5Y21GNU8xeHVJQ0FnSUdsbUlDZ2hRWEp5WVhrdWFYTkJjbkpoZVNrZ2UxeHVJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhWMGFXeHpKQ1JmYVhOQmNuSmhlU0E5SUdaMWJtTjBhVzl1SUNoNEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQlBZbXBsWTNRdWNISnZkRzkwZVhCbExuUnZVM1J5YVc1bkxtTmhiR3dvZUNrZ1BUMDlJQ2RiYjJKcVpXTjBJRUZ5Y21GNVhTYzdYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrZFhScGJITWtKRjlwYzBGeWNtRjVJRDBnUVhKeVlYa3VhWE5CY25KaGVUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMllYSWdiR2xpSkdWek5pUndjbTl0YVhObEpIVjBhV3h6SkNScGMwRnljbUY1SUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhWMGFXeHpKQ1JmYVhOQmNuSmhlVHRjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHeGxiaUE5SURBN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1IwYjFOMGNtbHVaeUE5SUh0OUxuUnZVM1J5YVc1bk8xeHVJQ0FnSUhaaGNpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrZG1WeWRIaE9aWGgwTzF4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZM1Z6ZEc5dFUyTm9aV1IxYkdWeVJtNDdYRzVjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHRnpZWEFnUFNCbWRXNWpkR2x2YmlCaGMyRndLR05oYkd4aVlXTnJMQ0JoY21jcElIdGNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1J4ZFdWMVpWdHNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYkdWdVhTQTlJR05oYkd4aVlXTnJPMXh1SUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhGMVpYVmxXMnhwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSc1pXNGdLeUF4WFNBOUlHRnlaenRjYmlBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSc1pXNGdLejBnTWp0Y2JpQWdJQ0FnSUdsbUlDaHNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYkdWdUlEMDlQU0F5S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRWxtSUd4bGJpQnBjeUF5TENCMGFHRjBJRzFsWVc1eklIUm9ZWFFnZDJVZ2JtVmxaQ0IwYnlCelkyaGxaSFZzWlNCaGJpQmhjM2x1WXlCbWJIVnphQzVjYmlBZ0lDQWdJQ0FnTHk4Z1NXWWdZV1JrYVhScGIyNWhiQ0JqWVd4c1ltRmphM01nWVhKbElIRjFaWFZsWkNCaVpXWnZjbVVnZEdobElIRjFaWFZsSUdseklHWnNkWE5vWldRc0lIUm9aWGxjYmlBZ0lDQWdJQ0FnTHk4Z2QybHNiQ0JpWlNCd2NtOWpaWE56WldRZ1lua2dkR2hwY3lCbWJIVnphQ0IwYUdGMElIZGxJR0Z5WlNCelkyaGxaSFZzYVc1bkxseHVJQ0FnSUNBZ0lDQnBaaUFvYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHTjFjM1J2YlZOamFHVmtkV3hsY2tadUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHTjFjM1J2YlZOamFHVmtkV3hsY2tadUtHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JtYkhWemFDazdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pITmphR1ZrZFd4bFJteDFjMmdvS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpaWFJUWTJobFpIVnNaWElvYzJOb1pXUjFiR1ZHYmlrZ2UxeHVJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKR04xYzNSdmJWTmphR1ZrZFd4bGNrWnVJRDBnYzJOb1pXUjFiR1ZHYmp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa2MyVjBRWE5oY0NoaGMyRndSbTRwSUh0Y2JpQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUmhjMkZ3SUQwZ1lYTmhjRVp1TzF4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZbkp2ZDNObGNsZHBibVJ2ZHlBOUlDaDBlWEJsYjJZZ2QybHVaRzkzSUNFOVBTQW5kVzVrWldacGJtVmtKeWtnUHlCM2FXNWtiM2NnT2lCMWJtUmxabWx1WldRN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JpY205M2MyVnlSMnh2WW1Gc0lEMGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkdKeWIzZHpaWEpYYVc1a2IzY2dmSHdnZTMwN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JDY205M2MyVnlUWFYwWVhScGIyNVBZbk5sY25abGNpQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSaWNtOTNjMlZ5UjJ4dlltRnNMazExZEdGMGFXOXVUMkp6WlhKMlpYSWdmSHdnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHSnliM2R6WlhKSGJHOWlZV3d1VjJWaVMybDBUWFYwWVhScGIyNVBZbk5sY25abGNqdGNiaUFnSUNCMllYSWdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkdselRtOWtaU0E5SUhSNWNHVnZaaUJ3Y205alpYTnpJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5QW1KaUI3ZlM1MGIxTjBjbWx1Wnk1allXeHNLSEJ5YjJObGMzTXBJRDA5UFNBblcyOWlhbVZqZENCd2NtOWpaWE56WFNjN1hHNWNiaUFnSUNBdkx5QjBaWE4wSUdadmNpQjNaV0lnZDI5eWEyVnlJR0oxZENCdWIzUWdhVzRnU1VVeE1GeHVJQ0FnSUhaaGNpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYVhOWGIzSnJaWElnUFNCMGVYQmxiMllnVldsdWREaERiR0Z0Y0dWa1FYSnlZWGtnSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltWEc0Z0lDQWdJQ0IwZVhCbGIyWWdhVzF3YjNKMFUyTnlhWEIwY3lBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NnSmlaY2JpQWdJQ0FnSUhSNWNHVnZaaUJOWlhOellXZGxRMmhoYm01bGJDQWhQVDBnSjNWdVpHVm1hVzVsWkNjN1hHNWNiaUFnSUNBdkx5QnViMlJsWEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhWelpVNWxlSFJVYVdOcktDa2dlMXh1SUNBZ0lDQWdkbUZ5SUc1bGVIUlVhV05ySUQwZ2NISnZZMlZ6Y3k1dVpYaDBWR2xqYXp0Y2JpQWdJQ0FnSUM4dklHNXZaR1VnZG1WeWMybHZiaUF3TGpFd0xuZ2daR2x6Y0d4aGVYTWdZU0JrWlhCeVpXTmhkR2x2YmlCM1lYSnVhVzVuSUhkb1pXNGdibVY0ZEZScFkyc2dhWE1nZFhObFpDQnlaV04xY25OcGRtVnNlVnh1SUNBZ0lDQWdMeThnYzJWMFNXMXRaV1JwWVhSbElITm9iM1ZzWkNCaVpTQjFjMlZrSUdsdWMzUmxZV1FnYVc1emRHVmhaRnh1SUNBZ0lDQWdkbUZ5SUhabGNuTnBiMjRnUFNCd2NtOWpaWE56TG5abGNuTnBiMjV6TG01dlpHVXViV0YwWTJnb0wxNG9Qem9vWEZ4a0t5bGNYQzRwUHlnL09paGNYR1FyS1Z4Y0xpay9LRnhjS254Y1hHUXJLU1F2S1R0Y2JpQWdJQ0FnSUdsbUlDaEJjbkpoZVM1cGMwRnljbUY1S0habGNuTnBiMjRwSUNZbUlIWmxjbk5wYjI1Yk1WMGdQVDA5SUNjd0p5QW1KaUIyWlhKemFXOXVXekpkSUQwOVBTQW5NVEFuS1NCN1hHNGdJQ0FnSUNBZ0lHNWxlSFJVYVdOcklEMGdjMlYwU1cxdFpXUnBZWFJsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnY21WMGRYSnVJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCdVpYaDBWR2xqYXloc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtabXgxYzJncE8xeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QjJaWEowZUZ4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSMWMyVldaWEowZUZScGJXVnlLQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtkbVZ5ZEhoT1pYaDBLR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSbWJIVnphQ2s3WEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDFjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSMWMyVk5kWFJoZEdsdmJrOWljMlZ5ZG1WeUtDa2dlMXh1SUNBZ0lDQWdkbUZ5SUdsMFpYSmhkR2x2Ym5NZ1BTQXdPMXh1SUNBZ0lDQWdkbUZ5SUc5aWMyVnlkbVZ5SUQwZ2JtVjNJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSQ2NtOTNjMlZ5VFhWMFlYUnBiMjVQWW5ObGNuWmxjaWhzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa1pteDFjMmdwTzF4dUlDQWdJQ0FnZG1GeUlHNXZaR1VnUFNCa2IyTjFiV1Z1ZEM1amNtVmhkR1ZVWlhoMFRtOWtaU2duSnlrN1hHNGdJQ0FnSUNCdlluTmxjblpsY2k1dlluTmxjblpsS0c1dlpHVXNJSHNnWTJoaGNtRmpkR1Z5UkdGMFlUb2dkSEoxWlNCOUtUdGNibHh1SUNBZ0lDQWdjbVYwZFhKdUlHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lDQWdJQ0J1YjJSbExtUmhkR0VnUFNBb2FYUmxjbUYwYVc5dWN5QTlJQ3NyYVhSbGNtRjBhVzl1Y3lBbElESXBPMXh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQXZMeUIzWldJZ2QyOXlhMlZ5WEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhWelpVMWxjM05oWjJWRGFHRnVibVZzS0NrZ2UxeHVJQ0FnSUNBZ2RtRnlJR05vWVc1dVpXd2dQU0J1WlhjZ1RXVnpjMkZuWlVOb1lXNXVaV3dvS1R0Y2JpQWdJQ0FnSUdOb1lXNXVaV3d1Y0c5eWRERXViMjV0WlhOellXZGxJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHWnNkWE5vTzF4dUlDQWdJQ0FnY21WMGRYSnVJR1oxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdJQ0FnSUNBZ1kyaGhibTVsYkM1d2IzSjBNaTV3YjNOMFRXVnpjMkZuWlNnd0tUdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSFZ6WlZObGRGUnBiV1Z2ZFhRb0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQWdJSE5sZEZScGJXVnZkWFFvYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHWnNkWE5vTENBeEtUdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSeGRXVjFaU0E5SUc1bGR5QkJjbkpoZVNneE1EQXdLVHRjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrWm14MWMyZ29LU0I3WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnNaVzQ3SUdrclBUSXBJSHRjYmlBZ0lDQWdJQ0FnZG1GeUlHTmhiR3hpWVdOcklEMGdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhGMVpYVmxXMmxkTzF4dUlDQWdJQ0FnSUNCMllYSWdZWEpuSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSEYxWlhWbFcya3JNVjA3WEc1Y2JpQWdJQ0FnSUNBZ1kyRnNiR0poWTJzb1lYSm5LVHRjYmx4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjWFZsZFdWYmFWMGdQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnhkV1YxWlZ0cEt6RmRJRDBnZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtiR1Z1SUQwZ01EdGNiaUFnSUNCOVhHNWNiaUFnSUNCbWRXNWpkR2x2YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZWFIwWlcxd2RGWmxjblJsZUNncElIdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUhaaGNpQnlJRDBnY21WeGRXbHlaVHRjYmlBZ0lDQWdJQ0FnZG1GeUlIWmxjblI0SUQwZ2NpZ25kbVZ5ZEhnbktUdGNiaUFnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpHRnpZWEFrSkhabGNuUjRUbVY0ZENBOUlIWmxjblI0TG5KMWJrOXVURzl2Y0NCOGZDQjJaWEowZUM1eWRXNVBia052Ym5SbGVIUTdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrZFhObFZtVnlkSGhVYVcxbGNpZ3BPMXh1SUNBZ0lDQWdmU0JqWVhSamFDaGxLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa2RYTmxVMlYwVkdsdFpXOTFkQ2dwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjMk5vWldSMWJHVkdiSFZ6YUR0Y2JpQWdJQ0F2THlCRVpXTnBaR1VnZDJoaGRDQmhjM2x1WXlCdFpYUm9iMlFnZEc4Z2RYTmxJSFJ2SUhSeWFXZG5aWEpwYm1jZ2NISnZZMlZ6YzJsdVp5QnZaaUJ4ZFdWMVpXUWdZMkZzYkdKaFkydHpPbHh1SUNBZ0lHbG1JQ2hzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa2FYTk9iMlJsS1NCN1hHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjMk5vWldSMWJHVkdiSFZ6YUNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1IxYzJWT1pYaDBWR2xqYXlncE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKRUp5YjNkelpYSk5kWFJoZEdsdmJrOWljMlZ5ZG1WeUtTQjdYRzRnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYzJOb1pXUjFiR1ZHYkhWemFDQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSMWMyVk5kWFJoZEdsdmJrOWljMlZ5ZG1WeUtDazdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaHNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYVhOWGIzSnJaWElwSUh0Y2JpQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpZMmhsWkhWc1pVWnNkWE5vSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSFZ6WlUxbGMzTmhaMlZEYUdGdWJtVnNLQ2s3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2hzYVdJa1pYTTJKSEJ5YjIxcGMyVWtZWE5oY0NRa1luSnZkM05sY2xkcGJtUnZkeUE5UFQwZ2RXNWtaV1pwYm1Wa0lDWW1JSFI1Y0dWdlppQnlaWEYxYVhKbElEMDlQU0FuWm5WdVkzUnBiMjRuS1NCN1hHNGdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtjMk5vWldSMWJHVkdiSFZ6YUNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JoZEhSbGJYQjBWbVZ5ZEdWNEtDazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpZMmhsWkhWc1pVWnNkWE5vSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdGellYQWtKSFZ6WlZObGRGUnBiV1Z2ZFhRb0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNCbWRXNWpkR2x2YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSdWIyOXdLQ2tnZTMxY2JseHVJQ0FnSUhaaGNpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlFSVTVFU1U1SElDQWdQU0IyYjJsa0lEQTdYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRVpWVEVaSlRFeEZSQ0E5SURFN1hHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pGSkZTa1ZEVkVWRUlDQTlJREk3WEc1Y2JpQWdJQ0IyWVhJZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1IwVlVYMVJJUlU1ZlJWSlNUMUlnUFNCdVpYY2diR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtSWEp5YjNKUFltcGxZM1FvS1R0Y2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhObGJHWkdkV3hzWm1sc2JHMWxiblFvS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGUjVjR1ZGY25KdmNpaGNJbGx2ZFNCallXNXViM1FnY21WemIyeDJaU0JoSUhCeWIyMXBjMlVnZDJsMGFDQnBkSE5sYkdaY0lpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1kyRnVibTkwVW1WMGRYSnVUM2R1S0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QlVlWEJsUlhKeWIzSW9KMEVnY0hKdmJXbHpaWE1nWTJGc2JHSmhZMnNnWTJGdWJtOTBJSEpsZEhWeWJpQjBhR0YwSUhOaGJXVWdjSEp2YldselpTNG5LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUm5aWFJVYUdWdUtIQnliMjFwYzJVcElIdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ3Y205dGFYTmxMblJvWlc0N1hHNGdJQ0FnSUNCOUlHTmhkR05vS0dWeWNtOXlLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkVkRlZGOVVTRVZPWDBWU1VrOVNMbVZ5Y205eUlEMGdaWEp5YjNJN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSSFJWUmZWRWhGVGw5RlVsSlBVanRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUjBjbmxVYUdWdUtIUm9aVzRzSUhaaGJIVmxMQ0JtZFd4bWFXeHNiV1Z1ZEVoaGJtUnNaWElzSUhKbGFtVmpkR2x2YmtoaGJtUnNaWElwSUh0Y2JpQWdJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQWdJSFJvWlc0dVkyRnNiQ2gyWVd4MVpTd2dablZzWm1sc2JHMWxiblJJWVc1a2JHVnlMQ0J5WldwbFkzUnBiMjVJWVc1a2JHVnlLVHRjYmlBZ0lDQWdJSDBnWTJGMFkyZ29aU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JvWVc1a2JHVkdiM0psYVdkdVZHaGxibUZpYkdVb2NISnZiV2x6WlN3Z2RHaGxibUZpYkdVc0lIUm9aVzRwSUh0Y2JpQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWVhOaGNDUWtZWE5oY0NobWRXNWpkR2x2Ymlod2NtOXRhWE5sS1NCN1hHNGdJQ0FnSUNBZ0lIWmhjaUJ6WldGc1pXUWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdkbUZ5SUdWeWNtOXlJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrZEhKNVZHaGxiaWgwYUdWdUxDQjBhR1Z1WVdKc1pTd2dablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2MyVmhiR1ZrS1NCN0lISmxkSFZ5YmpzZ2ZWeHVJQ0FnSUNBZ0lDQWdJSE5sWVd4bFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSb1pXNWhZbXhsSUNFOVBTQjJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WemIyeDJaU2h3Y205dGFYTmxMQ0IyWVd4MVpTazdYRzRnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHWjFiR1pwYkd3b2NISnZiV2x6WlN3Z2RtRnNkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmU3dnWm5WdVkzUnBiMjRvY21WaGMyOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSE5sWVd4bFpDa2dleUJ5WlhSMWNtNDdJSDFjYmlBZ0lDQWdJQ0FnSUNCelpXRnNaV1FnUFNCMGNuVmxPMXh1WEc0Z0lDQWdJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa2NtVnFaV04wS0hCeWIyMXBjMlVzSUhKbFlYTnZiaWs3WEc0Z0lDQWdJQ0FnSUgwc0lDZFRaWFIwYkdVNklDY2dLeUFvY0hKdmJXbHpaUzVmYkdGaVpXd2dmSHdnSnlCMWJtdHViM2R1SUhCeWIyMXBjMlVuS1NrN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0NGelpXRnNaV1FnSmlZZ1pYSnliM0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnpaV0ZzWldRZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pISmxhbVZqZENod2NtOXRhWE5sTENCbGNuSnZjaWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwc0lIQnliMjFwYzJVcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdoaGJtUnNaVTkzYmxSb1pXNWhZbXhsS0hCeWIyMXBjMlVzSUhSb1pXNWhZbXhsS1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hsYm1GaWJHVXVYM04wWVhSbElEMDlQU0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JHVlV4R1NVeE1SVVFwSUh0Y2JpQWdJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1puVnNabWxzYkNod2NtOXRhWE5sTENCMGFHVnVZV0pzWlM1ZmNtVnpkV3gwS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RHaGxibUZpYkdVdVgzTjBZWFJsSUQwOVBTQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlNSVXBGUTFSRlJDa2dlMXh1SUNBZ0lDQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J5WldwbFkzUW9jSEp2YldselpTd2dkR2hsYm1GaWJHVXVYM0psYzNWc2RDazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUnpkV0p6WTNKcFltVW9kR2hsYm1GaWJHVXNJSFZ1WkdWbWFXNWxaQ3dnWm5WdVkzUnBiMjRvZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpYTnZiSFpsS0hCeWIyMXBjMlVzSUhaaGJIVmxLVHRjYmlBZ0lDQWdJQ0FnZlN3Z1puVnVZM1JwYjI0b2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZxWldOMEtIQnliMjFwYzJVc0lISmxZWE52YmlrN1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHaGhibVJzWlUxaGVXSmxWR2hsYm1GaWJHVW9jSEp2YldselpTd2diV0Y1WW1WVWFHVnVZV0pzWlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLRzFoZVdKbFZHaGxibUZpYkdVdVkyOXVjM1J5ZFdOMGIzSWdQVDA5SUhCeWIyMXBjMlV1WTI5dWMzUnlkV04wYjNJcElIdGNiaUFnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWthR0Z1Wkd4bFQzZHVWR2hsYm1GaWJHVW9jSEp2YldselpTd2diV0Y1WW1WVWFHVnVZV0pzWlNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCMllYSWdkR2hsYmlBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHZGxkRlJvWlc0b2JXRjVZbVZVYUdWdVlXSnNaU2s3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvWlc0Z1BUMDlJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRWRGVkY5VVNFVk9YMFZTVWs5U0tTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WcVpXTjBLSEJ5YjIxcGMyVXNJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRWRGVkY5VVNFVk9YMFZTVWs5U0xtVnljbTl5S1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaDBhR1Z1SUQwOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSbWRXeG1hV3hzS0hCeWIyMXBjMlVzSUcxaGVXSmxWR2hsYm1GaWJHVXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0d4cFlpUmxjellrY0hKdmJXbHpaU1IxZEdsc2N5UWthWE5HZFc1amRHbHZiaWgwYUdWdUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdoaGJtUnNaVVp2Y21WcFoyNVVhR1Z1WVdKc1pTaHdjbTl0YVhObExDQnRZWGxpWlZSb1pXNWhZbXhsTENCMGFHVnVLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSbWRXeG1hV3hzS0hCeWIyMXBjMlVzSUcxaGVXSmxWR2hsYm1GaWJHVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdablZ1WTNScGIyNGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZ6YjJ4MlpTaHdjbTl0YVhObExDQjJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLSEJ5YjIxcGMyVWdQVDA5SUhaaGJIVmxLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhKbGFtVmpkQ2h3Y205dGFYTmxMQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J6Wld4bVJuVnNiR1pwYkd4dFpXNTBLQ2twTzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoc2FXSWtaWE0ySkhCeWIyMXBjMlVrZFhScGJITWtKRzlpYW1WamRFOXlSblZ1WTNScGIyNG9kbUZzZFdVcEtTQjdYRzRnSUNBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKR2hoYm1Sc1pVMWhlV0psVkdobGJtRmliR1VvY0hKdmJXbHpaU3dnZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtablZzWm1sc2JDaHdjbTl0YVhObExDQjJZV3gxWlNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnWm5WdVkzUnBiMjRnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY0hWaWJHbHphRkpsYW1WamRHbHZiaWh3Y205dGFYTmxLU0I3WEc0Z0lDQWdJQ0JwWmlBb2NISnZiV2x6WlM1ZmIyNWxjbkp2Y2lrZ2UxeHVJQ0FnSUNBZ0lDQndjbTl0YVhObExsOXZibVZ5Y205eUtIQnliMjFwYzJVdVgzSmxjM1ZzZENrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pIQjFZbXhwYzJnb2NISnZiV2x6WlNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWm5WdVkzUnBiMjRnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrWm5Wc1ptbHNiQ2h3Y205dGFYTmxMQ0IyWVd4MVpTa2dlMXh1SUNBZ0lDQWdhV1lnS0hCeWIyMXBjMlV1WDNOMFlYUmxJQ0U5UFNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSUVJVNUVTVTVIS1NCN0lISmxkSFZ5YmpzZ2ZWeHVYRzRnSUNBZ0lDQndjbTl0YVhObExsOXlaWE4xYkhRZ1BTQjJZV3gxWlR0Y2JpQWdJQ0FnSUhCeWIyMXBjMlV1WDNOMFlYUmxJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrUmxWTVJrbE1URVZFTzF4dVhHNGdJQ0FnSUNCcFppQW9jSEp2YldselpTNWZjM1ZpYzJOeWFXSmxjbk11YkdWdVozUm9JQ0U5UFNBd0tTQjdYRzRnSUNBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUmhjMkZ3SkNSaGMyRndLR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKSEIxWW14cGMyZ3NJSEJ5YjIxcGMyVXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pISmxhbVZqZENod2NtOXRhWE5sTENCeVpXRnpiMjRwSUh0Y2JpQWdJQ0FnSUdsbUlDaHdjbTl0YVhObExsOXpkR0YwWlNBaFBUMGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtVRVZPUkVsT1J5a2dleUJ5WlhSMWNtNDdJSDFjYmlBZ0lDQWdJSEJ5YjIxcGMyVXVYM04wWVhSbElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtVa1ZLUlVOVVJVUTdYRzRnSUNBZ0lDQndjbTl0YVhObExsOXlaWE4xYkhRZ1BTQnlaV0Z6YjI0N1hHNWNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSaGMyRndKQ1JoYzJGd0tHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pIQjFZbXhwYzJoU1pXcGxZM1JwYjI0c0lIQnliMjFwYzJVcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhOMVluTmpjbWxpWlNod1lYSmxiblFzSUdOb2FXeGtMQ0J2YmtaMWJHWnBiR3h0Wlc1MExDQnZibEpsYW1WamRHbHZiaWtnZTF4dUlDQWdJQ0FnZG1GeUlITjFZbk5qY21saVpYSnpJRDBnY0dGeVpXNTBMbDl6ZFdKelkzSnBZbVZ5Y3p0Y2JpQWdJQ0FnSUhaaGNpQnNaVzVuZEdnZ1BTQnpkV0p6WTNKcFltVnljeTVzWlc1bmRHZzdYRzVjYmlBZ0lDQWdJSEJoY21WdWRDNWZiMjVsY25KdmNpQTlJRzUxYkd3N1hHNWNiaUFnSUNBZ0lITjFZbk5qY21saVpYSnpXMnhsYm1kMGFGMGdQU0JqYUdsc1pEdGNiaUFnSUNBZ0lITjFZbk5qY21saVpYSnpXMnhsYm1kMGFDQXJJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRVpWVEVaSlRFeEZSRjBnUFNCdmJrWjFiR1pwYkd4dFpXNTBPMXh1SUNBZ0lDQWdjM1ZpYzJOeWFXSmxjbk5iYkdWdVozUm9JQ3NnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrVWtWS1JVTlVSVVJkSUNBOUlHOXVVbVZxWldOMGFXOXVPMXh1WEc0Z0lDQWdJQ0JwWmlBb2JHVnVaM1JvSUQwOVBTQXdJQ1ltSUhCaGNtVnVkQzVmYzNSaGRHVXBJSHRjYmlBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR0Z6WVhBa0pHRnpZWEFvYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY0hWaWJHbHphQ3dnY0dGeVpXNTBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUndkV0pzYVhOb0tIQnliMjFwYzJVcElIdGNiaUFnSUNBZ0lIWmhjaUJ6ZFdKelkzSnBZbVZ5Y3lBOUlIQnliMjFwYzJVdVgzTjFZbk5qY21saVpYSnpPMXh1SUNBZ0lDQWdkbUZ5SUhObGRIUnNaV1FnUFNCd2NtOXRhWE5sTGw5emRHRjBaVHRjYmx4dUlDQWdJQ0FnYVdZZ0tITjFZbk5qY21saVpYSnpMbXhsYm1kMGFDQTlQVDBnTUNrZ2V5QnlaWFIxY200N0lIMWNibHh1SUNBZ0lDQWdkbUZ5SUdOb2FXeGtMQ0JqWVd4c1ltRmpheXdnWkdWMFlXbHNJRDBnY0hKdmJXbHpaUzVmY21WemRXeDBPMXh1WEc0Z0lDQWdJQ0JtYjNJZ0tIWmhjaUJwSUQwZ01Ec2dhU0E4SUhOMVluTmpjbWxpWlhKekxteGxibWQwYURzZ2FTQXJQU0F6S1NCN1hHNGdJQ0FnSUNBZ0lHTm9hV3hrSUQwZ2MzVmljMk55YVdKbGNuTmJhVjA3WEc0Z0lDQWdJQ0FnSUdOaGJHeGlZV05ySUQwZ2MzVmljMk55YVdKbGNuTmJhU0FySUhObGRIUnNaV1JkTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2hqYUdsc1pDa2dlMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdsdWRtOXJaVU5oYkd4aVlXTnJLSE5sZEhSc1pXUXNJR05vYVd4a0xDQmpZV3hzWW1GamF5d2daR1YwWVdsc0tUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0JqWVd4c1ltRmpheWhrWlhSaGFXd3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUhCeWIyMXBjMlV1WDNOMVluTmpjbWxpWlhKekxteGxibWQwYUNBOUlEQTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1JYSnliM0pQWW1wbFkzUW9LU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnljbTl5SUQwZ2JuVnNiRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrVkZKWlgwTkJWRU5JWDBWU1VrOVNJRDBnYm1WM0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pFVnljbTl5VDJKcVpXTjBLQ2s3WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1IwY25sRFlYUmphQ2hqWVd4c1ltRmpheXdnWkdWMFlXbHNLU0I3WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyRnNiR0poWTJzb1pHVjBZV2xzS1R0Y2JpQWdJQ0FnSUgwZ1kyRjBZMmdvWlNrZ2UxeHVJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlVVbGxmUTBGVVEwaGZSVkpTVDFJdVpYSnliM0lnUFNCbE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1ZGSlpYME5CVkVOSVgwVlNVazlTTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKR2x1ZG05clpVTmhiR3hpWVdOcktITmxkSFJzWldRc0lIQnliMjFwYzJVc0lHTmhiR3hpWVdOckxDQmtaWFJoYVd3cElIdGNiaUFnSUNBZ0lIWmhjaUJvWVhORFlXeHNZbUZqYXlBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWRHbHNjeVFrYVhOR2RXNWpkR2x2YmloallXeHNZbUZqYXlrc1hHNGdJQ0FnSUNBZ0lDQWdkbUZzZFdVc0lHVnljbTl5TENCemRXTmpaV1ZrWldRc0lHWmhhV3hsWkR0Y2JseHVJQ0FnSUNBZ2FXWWdLR2hoYzBOaGJHeGlZV05yS1NCN1hHNGdJQ0FnSUNBZ0lIWmhiSFZsSUQwZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa2RISjVRMkYwWTJnb1kyRnNiR0poWTJzc0lHUmxkR0ZwYkNrN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0haaGJIVmxJRDA5UFNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSVVVsbGZRMEZVUTBoZlJWSlNUMUlwSUh0Y2JpQWdJQ0FnSUNBZ0lDQm1ZV2xzWldRZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lHVnljbTl5SUQwZ2RtRnNkV1V1WlhKeWIzSTdYRzRnSUNBZ0lDQWdJQ0FnZG1Gc2RXVWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJSE4xWTJObFpXUmxaQ0E5SUhSeWRXVTdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCcFppQW9jSEp2YldselpTQTlQVDBnZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpXcGxZM1FvY0hKdmJXbHpaU3dnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrWTJGdWJtOTBVbVYwZFhKdVQzZHVLQ2twTzF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjJZV3gxWlNBOUlHUmxkR0ZwYkR0Y2JpQWdJQ0FnSUNBZ2MzVmpZMlZsWkdWa0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2FXWWdLSEJ5YjIxcGMyVXVYM04wWVhSbElDRTlQU0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JRUlU1RVNVNUhLU0I3WEc0Z0lDQWdJQ0FnSUM4dklHNXZiM0JjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvYUdGelEyRnNiR0poWTJzZ0ppWWdjM1ZqWTJWbFpHVmtLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhKbGMyOXNkbVVvY0hKdmJXbHpaU3dnZG1Gc2RXVXBPMXh1SUNBZ0lDQWdmU0JsYkhObElHbG1JQ2htWVdsc1pXUXBJSHRjYmlBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WcVpXTjBLSEJ5YjIxcGMyVXNJR1Z5Y205eUtUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9jMlYwZEd4bFpDQTlQVDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrUmxWTVJrbE1URVZFS1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHWjFiR1pwYkd3b2NISnZiV2x6WlN3Z2RtRnNkV1VwTzF4dUlDQWdJQ0FnZlNCbGJITmxJR2xtSUNoelpYUjBiR1ZrSUQwOVBTQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlNSVXBGUTFSRlJDa2dlMXh1SUNBZ0lDQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J5WldwbFkzUW9jSEp2YldselpTd2dkbUZzZFdVcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkdsdWFYUnBZV3hwZW1WUWNtOXRhWE5sS0hCeWIyMXBjMlVzSUhKbGMyOXNkbVZ5S1NCN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0J5WlhOdmJIWmxjaWhtZFc1amRHbHZiaUJ5WlhOdmJIWmxVSEp2YldselpTaDJZV3gxWlNsN1hHNGdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZ6YjJ4MlpTaHdjbTl0YVhObExDQjJZV3gxWlNrN1hHNGdJQ0FnSUNBZ0lIMHNJR1oxYm1OMGFXOXVJSEpsYW1WamRGQnliMjFwYzJVb2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtjbVZxWldOMEtIQnliMjFwYzJVc0lISmxZWE52YmlrN1hHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdmU0JqWVhSamFDaGxLU0I3WEc0Z0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhKbGFtVmpkQ2h3Y205dGFYTmxMQ0JsS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JtZFc1amRHbHZiaUJzYVdJa1pYTTJKSEJ5YjIxcGMyVWtaVzUxYldWeVlYUnZjaVFrUlc1MWJXVnlZWFJ2Y2loRGIyNXpkSEoxWTNSdmNpd2dhVzV3ZFhRcElIdGNiaUFnSUNBZ0lIWmhjaUJsYm5WdFpYSmhkRzl5SUQwZ2RHaHBjenRjYmx4dUlDQWdJQ0FnWlc1MWJXVnlZWFJ2Y2k1ZmFXNXpkR0Z1WTJWRGIyNXpkSEoxWTNSdmNpQTlJRU52Ym5OMGNuVmpkRzl5TzF4dUlDQWdJQ0FnWlc1MWJXVnlZWFJ2Y2k1d2NtOXRhWE5sSUQwZ2JtVjNJRU52Ym5OMGNuVmpkRzl5S0d4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkc1dmIzQXBPMXh1WEc0Z0lDQWdJQ0JwWmlBb1pXNTFiV1Z5WVhSdmNpNWZkbUZzYVdSaGRHVkpibkIxZENocGJuQjFkQ2twSUh0Y2JpQWdJQ0FnSUNBZ1pXNTFiV1Z5WVhSdmNpNWZhVzV3ZFhRZ0lDQWdJRDBnYVc1d2RYUTdYRzRnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1YkdWdVozUm9JQ0FnSUNBOUlHbHVjSFYwTG14bGJtZDBhRHRjYmlBZ0lDQWdJQ0FnWlc1MWJXVnlZWFJ2Y2k1ZmNtVnRZV2x1YVc1bklEMGdhVzV3ZFhRdWJHVnVaM1JvTzF4dVhHNGdJQ0FnSUNBZ0lHVnVkVzFsY21GMGIzSXVYMmx1YVhRb0tUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb1pXNTFiV1Z5WVhSdmNpNXNaVzVuZEdnZ1BUMDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUm1kV3htYVd4c0tHVnVkVzFsY21GMGIzSXVjSEp2YldselpTd2daVzUxYldWeVlYUnZjaTVmY21WemRXeDBLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCbGJuVnRaWEpoZEc5eUxteGxibWQwYUNBOUlHVnVkVzFsY21GMGIzSXViR1Z1WjNSb0lIeDhJREE3WEc0Z0lDQWdJQ0FnSUNBZ1pXNTFiV1Z5WVhSdmNpNWZaVzUxYldWeVlYUmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLR1Z1ZFcxbGNtRjBiM0l1WDNKbGJXRnBibWx1WnlBOVBUMGdNQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtablZzWm1sc2JDaGxiblZ0WlhKaGRHOXlMbkJ5YjIxcGMyVXNJR1Z1ZFcxbGNtRjBiM0l1WDNKbGMzVnNkQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUnlaV3BsWTNRb1pXNTFiV1Z5WVhSdmNpNXdjbTl0YVhObExDQmxiblZ0WlhKaGRHOXlMbDkyWVd4cFpHRjBhVzl1UlhKeWIzSW9LU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpHVnVkVzFsY21GMGIzSWtKRVZ1ZFcxbGNtRjBiM0l1Y0hKdmRHOTBlWEJsTGw5MllXeHBaR0YwWlVsdWNIVjBJRDBnWm5WdVkzUnBiMjRvYVc1d2RYUXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa2RYUnBiSE1rSkdselFYSnlZWGtvYVc1d2RYUXBPMXh1SUNBZ0lIMDdYRzVjYmlBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa1pXNTFiV1Z5WVhSdmNpUWtSVzUxYldWeVlYUnZjaTV3Y205MGIzUjVjR1V1WDNaaGJHbGtZWFJwYjI1RmNuSnZjaUE5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc1bGR5QkZjbkp2Y2lnblFYSnlZWGtnVFdWMGFHOWtjeUJ0ZFhOMElHSmxJSEJ5YjNacFpHVmtJR0Z1SUVGeWNtRjVKeWs3WEc0Z0lDQWdmVHRjYmx4dUlDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUmxiblZ0WlhKaGRHOXlKQ1JGYm5WdFpYSmhkRzl5TG5CeWIzUnZkSGx3WlM1ZmFXNXBkQ0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVmY21WemRXeDBJRDBnYm1WM0lFRnljbUY1S0hSb2FYTXViR1Z1WjNSb0tUdGNiaUFnSUNCOU8xeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUmxiblZ0WlhKaGRHOXlKQ1JrWldaaGRXeDBJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKR1Z1ZFcxbGNtRjBiM0lrSkVWdWRXMWxjbUYwYjNJN1hHNWNiaUFnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWlc1MWJXVnlZWFJ2Y2lRa1JXNTFiV1Z5WVhSdmNpNXdjbTkwYjNSNWNHVXVYMlZ1ZFcxbGNtRjBaU0E5SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ2RtRnlJR1Z1ZFcxbGNtRjBiM0lnUFNCMGFHbHpPMXh1WEc0Z0lDQWdJQ0IyWVhJZ2JHVnVaM1JvSUNBOUlHVnVkVzFsY21GMGIzSXViR1Z1WjNSb08xeHVJQ0FnSUNBZ2RtRnlJSEJ5YjIxcGMyVWdQU0JsYm5WdFpYSmhkRzl5TG5CeWIyMXBjMlU3WEc0Z0lDQWdJQ0IyWVhJZ2FXNXdkWFFnSUNBOUlHVnVkVzFsY21GMGIzSXVYMmx1Y0hWME8xeHVYRzRnSUNBZ0lDQm1iM0lnS0haaGNpQnBJRDBnTURzZ2NISnZiV2x6WlM1ZmMzUmhkR1VnUFQwOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pGQkZUa1JKVGtjZ0ppWWdhU0E4SUd4bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1WDJWaFkyaEZiblJ5ZVNocGJuQjFkRnRwWFN3Z2FTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSbGJuVnRaWEpoZEc5eUpDUkZiblZ0WlhKaGRHOXlMbkJ5YjNSdmRIbHdaUzVmWldGamFFVnVkSEo1SUQwZ1puVnVZM1JwYjI0b1pXNTBjbmtzSUdrcElIdGNiaUFnSUNBZ0lIWmhjaUJsYm5WdFpYSmhkRzl5SUQwZ2RHaHBjenRjYmlBZ0lDQWdJSFpoY2lCaklEMGdaVzUxYldWeVlYUnZjaTVmYVc1emRHRnVZMlZEYjI1emRISjFZM1J2Y2p0Y2JseHVJQ0FnSUNBZ2FXWWdLR3hwWWlSbGN6WWtjSEp2YldselpTUjFkR2xzY3lRa2FYTk5ZWGxpWlZSb1pXNWhZbXhsS0dWdWRISjVLU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9aVzUwY25rdVkyOXVjM1J5ZFdOMGIzSWdQVDA5SUdNZ0ppWWdaVzUwY25rdVgzTjBZWFJsSUNFOVBTQnNhV0lrWlhNMkpIQnliMjFwYzJVa0pHbHVkR1Z5Ym1Gc0pDUlFSVTVFU1U1SEtTQjdYRzRnSUNBZ0lDQWdJQ0FnWlc1MGNua3VYMjl1WlhKeWIzSWdQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1WDNObGRIUnNaV1JCZENobGJuUnllUzVmYzNSaGRHVXNJR2tzSUdWdWRISjVMbDl5WlhOMWJIUXBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUdWdWRXMWxjbUYwYjNJdVgzZHBiR3hUWlhSMGJHVkJkQ2hqTG5KbGMyOXNkbVVvWlc1MGNua3BMQ0JwS1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1pXNTFiV1Z5WVhSdmNpNWZjbVZ0WVdsdWFXNW5MUzA3WEc0Z0lDQWdJQ0FnSUdWdWRXMWxjbUYwYjNJdVgzSmxjM1ZzZEZ0cFhTQTlJR1Z1ZEhKNU8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwN1hHNWNiaUFnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrWlc1MWJXVnlZWFJ2Y2lRa1JXNTFiV1Z5WVhSdmNpNXdjbTkwYjNSNWNHVXVYM05sZEhSc1pXUkJkQ0E5SUdaMWJtTjBhVzl1S0hOMFlYUmxMQ0JwTENCMllXeDFaU2tnZTF4dUlDQWdJQ0FnZG1GeUlHVnVkVzFsY21GMGIzSWdQU0IwYUdsek8xeHVJQ0FnSUNBZ2RtRnlJSEJ5YjIxcGMyVWdQU0JsYm5WdFpYSmhkRzl5TG5CeWIyMXBjMlU3WEc1Y2JpQWdJQ0FnSUdsbUlDaHdjbTl0YVhObExsOXpkR0YwWlNBOVBUMGdiR2xpSkdWek5pUndjbTl0YVhObEpDUnBiblJsY201aGJDUWtVRVZPUkVsT1J5a2dlMXh1SUNBZ0lDQWdJQ0JsYm5WdFpYSmhkRzl5TGw5eVpXMWhhVzVwYm1jdExUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb2MzUmhkR1VnUFQwOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pGSkZTa1ZEVkVWRUtTQjdYRzRnSUNBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrY21WcVpXTjBLSEJ5YjIxcGMyVXNJSFpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0JsYm5WdFpYSmhkRzl5TGw5eVpYTjFiSFJiYVYwZ1BTQjJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnBaaUFvWlc1MWJXVnlZWFJ2Y2k1ZmNtVnRZV2x1YVc1bklEMDlQU0F3S1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pHWjFiR1pwYkd3b2NISnZiV2x6WlN3Z1pXNTFiV1Z5WVhSdmNpNWZjbVZ6ZFd4MEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOU8xeHVYRzRnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdWdWRXMWxjbUYwYjNJa0pFVnVkVzFsY21GMGIzSXVjSEp2ZEc5MGVYQmxMbDkzYVd4c1UyVjBkR3hsUVhRZ1BTQm1kVzVqZEdsdmJpaHdjbTl0YVhObExDQnBLU0I3WEc0Z0lDQWdJQ0IyWVhJZ1pXNTFiV1Z5WVhSdmNpQTlJSFJvYVhNN1hHNWNiaUFnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pITjFZbk5qY21saVpTaHdjbTl0YVhObExDQjFibVJsWm1sdVpXUXNJR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJR1Z1ZFcxbGNtRjBiM0l1WDNObGRIUnNaV1JCZENoc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSR1ZVeEdTVXhNUlVRc0lHa3NJSFpoYkhWbEtUdGNiaUFnSUNBZ0lIMHNJR1oxYm1OMGFXOXVLSEpsWVhOdmJpa2dlMXh1SUNBZ0lDQWdJQ0JsYm5WdFpYSmhkRzl5TGw5elpYUjBiR1ZrUVhRb2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa1VrVktSVU5VUlVRc0lHa3NJSEpsWVhOdmJpazdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlPMXh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkdGc2JDUWtZV3hzS0dWdWRISnBaWE1wSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkdWdWRXMWxjbUYwYjNJa0pHUmxabUYxYkhRb2RHaHBjeXdnWlc1MGNtbGxjeWt1Y0hKdmJXbHpaVHRjYmlBZ0lDQjlYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpHRnNiQ1FrWkdWbVlYVnNkQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKR0ZzYkNRa1lXeHNPMXh1SUNBZ0lHWjFibU4wYVc5dUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkhKaFkyVWtKSEpoWTJVb1pXNTBjbWxsY3lrZ2UxeHVJQ0FnSUNBZ0x5cHFjMmhwYm5RZ2RtRnNhV1IwYUdsek9uUnlkV1VnS2k5Y2JpQWdJQ0FnSUhaaGNpQkRiMjV6ZEhKMVkzUnZjaUE5SUhSb2FYTTdYRzVjYmlBZ0lDQWdJSFpoY2lCd2NtOXRhWE5sSUQwZ2JtVjNJRU52Ym5OMGNuVmpkRzl5S0d4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkc1dmIzQXBPMXh1WEc0Z0lDQWdJQ0JwWmlBb0lXeHBZaVJsY3pZa2NISnZiV2x6WlNSMWRHbHNjeVFrYVhOQmNuSmhlU2hsYm5SeWFXVnpLU2tnZTF4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpXcGxZM1FvY0hKdmJXbHpaU3dnYm1WM0lGUjVjR1ZGY25KdmNpZ25XVzkxSUcxMWMzUWdjR0Z6Y3lCaGJpQmhjbkpoZVNCMGJ5QnlZV05sTGljcEtUdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIQnliMjFwYzJVN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lIWmhjaUJzWlc1bmRHZ2dQU0JsYm5SeWFXVnpMbXhsYm1kMGFEdGNibHh1SUNBZ0lDQWdablZ1WTNScGIyNGdiMjVHZFd4bWFXeHNiV1Z1ZENoMllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSeVpYTnZiSFpsS0hCeWIyMXBjMlVzSUhaaGJIVmxLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWm5WdVkzUnBiMjRnYjI1U1pXcGxZM1JwYjI0b2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pISmxhbVZqZENod2NtOXRhWE5sTENCeVpXRnpiMjRwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCbWIzSWdLSFpoY2lCcElEMGdNRHNnY0hKdmJXbHpaUzVmYzNSaGRHVWdQVDA5SUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkZCRlRrUkpUa2NnSmlZZ2FTQThJR3hsYm1kMGFEc2dhU3NyS1NCN1hHNGdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pITjFZbk5qY21saVpTaERiMjV6ZEhKMVkzUnZjaTV5WlhOdmJIWmxLR1Z1ZEhKcFpYTmJhVjBwTENCMWJtUmxabWx1WldRc0lHOXVSblZzWm1sc2JHMWxiblFzSUc5dVVtVnFaV04wYVc5dUtUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdjbVYwZFhKdUlIQnliMjFwYzJVN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0hKdmJXbHpaU1J5WVdObEpDUmtaV1poZFd4MElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa2NtRmpaU1FrY21GalpUdGNiaUFnSUNCbWRXNWpkR2x2YmlCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0hKdmJXbHpaU1J5WlhOdmJIWmxKQ1J5WlhOdmJIWmxLRzlpYW1WamRDa2dlMXh1SUNBZ0lDQWdMeXBxYzJocGJuUWdkbUZzYVdSMGFHbHpPblJ5ZFdVZ0tpOWNiaUFnSUNBZ0lIWmhjaUJEYjI1emRISjFZM1J2Y2lBOUlIUm9hWE03WEc1Y2JpQWdJQ0FnSUdsbUlDaHZZbXBsWTNRZ0ppWWdkSGx3Wlc5bUlHOWlhbVZqZENBOVBUMGdKMjlpYW1WamRDY2dKaVlnYjJKcVpXTjBMbU52Ym5OMGNuVmpkRzl5SUQwOVBTQkRiMjV6ZEhKMVkzUnZjaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnYjJKcVpXTjBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0IyWVhJZ2NISnZiV2x6WlNBOUlHNWxkeUJEYjI1emRISjFZM1J2Y2loc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSdWIyOXdLVHRjYmlBZ0lDQWdJR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKSEpsYzI5c2RtVW9jSEp2YldselpTd2diMkpxWldOMEtUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCd2NtOXRhWE5sTzF4dUlDQWdJSDFjYmlBZ0lDQjJZWElnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtjbVZ6YjJ4MlpTUWtaR1ZtWVhWc2RDQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpISmxjMjlzZG1Va0pISmxjMjlzZG1VN1hHNGdJQ0FnWm5WdVkzUnBiMjRnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtjbVZxWldOMEpDUnlaV3BsWTNRb2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBdkttcHphR2x1ZENCMllXeHBaSFJvYVhNNmRISjFaU0FxTDF4dUlDQWdJQ0FnZG1GeUlFTnZibk4wY25WamRHOXlJRDBnZEdocGN6dGNiaUFnSUNBZ0lIWmhjaUJ3Y205dGFYTmxJRDBnYm1WM0lFTnZibk4wY25WamRHOXlLR3hwWWlSbGN6WWtjSEp2YldselpTUWthVzUwWlhKdVlXd2tKRzV2YjNBcE8xeHVJQ0FnSUNBZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkNScGJuUmxjbTVoYkNRa2NtVnFaV04wS0hCeWIyMXBjMlVzSUhKbFlYTnZiaWs3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdjSEp2YldselpUdGNiaUFnSUNCOVhHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkhKbGFtVmpkQ1FrWkdWbVlYVnNkQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKSEpsYW1WamRDUWtjbVZxWldOME8xeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUmpiM1Z1ZEdWeUlEMGdNRHRjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUnVaV1ZrYzFKbGMyOXNkbVZ5S0NrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lGUjVjR1ZGY25KdmNpZ25XVzkxSUcxMWMzUWdjR0Z6Y3lCaElISmxjMjlzZG1WeUlHWjFibU4wYVc5dUlHRnpJSFJvWlNCbWFYSnpkQ0JoY21kMWJXVnVkQ0IwYnlCMGFHVWdjSEp2YldselpTQmpiMjV6ZEhKMVkzUnZjaWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1oxYm1OMGFXOXVJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUnVaV1ZrYzA1bGR5Z3BJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJVZVhCbFJYSnliM0lvWENKR1lXbHNaV1FnZEc4Z1kyOXVjM1J5ZFdOMElDZFFjbTl0YVhObEp6b2dVR3hsWVhObElIVnpaU0IwYUdVZ0oyNWxkeWNnYjNCbGNtRjBiM0lzSUhSb2FYTWdiMkpxWldOMElHTnZibk4wY25WamRHOXlJR05oYm01dmRDQmlaU0JqWVd4c1pXUWdZWE1nWVNCbWRXNWpkR2x2Ymk1Y0lpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RtRnlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpDUmtaV1poZFd4MElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pGQnliMjFwYzJVN1hHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNCUWNtOXRhWE5sSUc5aWFtVmpkSE1nY21Wd2NtVnpaVzUwSUhSb1pTQmxkbVZ1ZEhWaGJDQnlaWE4xYkhRZ2IyWWdZVzRnWVhONWJtTm9jbTl1YjNWeklHOXdaWEpoZEdsdmJpNGdWR2hsWEc0Z0lDQWdJQ0J3Y21sdFlYSjVJSGRoZVNCdlppQnBiblJsY21GamRHbHVaeUIzYVhSb0lHRWdjSEp2YldselpTQnBjeUIwYUhKdmRXZG9JR2wwY3lCZ2RHaGxibUFnYldWMGFHOWtMQ0IzYUdsamFGeHVJQ0FnSUNBZ2NtVm5hWE4wWlhKeklHTmhiR3hpWVdOcmN5QjBieUJ5WldObGFYWmxJR1ZwZEdobGNpQmhJSEJ5YjIxcGMyVW5jeUJsZG1WdWRIVmhiQ0IyWVd4MVpTQnZjaUIwYUdVZ2NtVmhjMjl1WEc0Z0lDQWdJQ0IzYUhrZ2RHaGxJSEJ5YjIxcGMyVWdZMkZ1Ym05MElHSmxJR1oxYkdacGJHeGxaQzVjYmx4dUlDQWdJQ0FnVkdWeWJXbHViMnh2WjNsY2JpQWdJQ0FnSUMwdExTMHRMUzB0TFMwdFhHNWNiaUFnSUNBZ0lDMGdZSEJ5YjIxcGMyVmdJR2x6SUdGdUlHOWlhbVZqZENCdmNpQm1kVzVqZEdsdmJpQjNhWFJvSUdFZ1lIUm9aVzVnSUcxbGRHaHZaQ0IzYUc5elpTQmlaV2hoZG1sdmNpQmpiMjVtYjNKdGN5QjBieUIwYUdseklITndaV05wWm1sallYUnBiMjR1WEc0Z0lDQWdJQ0F0SUdCMGFHVnVZV0pzWldBZ2FYTWdZVzRnYjJKcVpXTjBJRzl5SUdaMWJtTjBhVzl1SUhSb1lYUWdaR1ZtYVc1bGN5QmhJR0IwYUdWdVlDQnRaWFJvYjJRdVhHNGdJQ0FnSUNBdElHQjJZV3gxWldBZ2FYTWdZVzU1SUd4bFoyRnNJRXBoZG1GVFkzSnBjSFFnZG1Gc2RXVWdLR2x1WTJ4MVpHbHVaeUIxYm1SbFptbHVaV1FzSUdFZ2RHaGxibUZpYkdVc0lHOXlJR0VnY0hKdmJXbHpaU2t1WEc0Z0lDQWdJQ0F0SUdCbGVHTmxjSFJwYjI1Z0lHbHpJR0VnZG1Gc2RXVWdkR2hoZENCcGN5QjBhSEp2ZDI0Z2RYTnBibWNnZEdobElIUm9jbTkzSUhOMFlYUmxiV1Z1ZEM1Y2JpQWdJQ0FnSUMwZ1lISmxZWE52Ym1BZ2FYTWdZU0IyWVd4MVpTQjBhR0YwSUdsdVpHbGpZWFJsY3lCM2FIa2dZU0J3Y205dGFYTmxJSGRoY3lCeVpXcGxZM1JsWkM1Y2JpQWdJQ0FnSUMwZ1lITmxkSFJzWldSZ0lIUm9aU0JtYVc1aGJDQnlaWE4wYVc1bklITjBZWFJsSUc5bUlHRWdjSEp2YldselpTd2dablZzWm1sc2JHVmtJRzl5SUhKbGFtVmpkR1ZrTGx4dVhHNGdJQ0FnSUNCQklIQnliMjFwYzJVZ1kyRnVJR0psSUdsdUlHOXVaU0J2WmlCMGFISmxaU0J6ZEdGMFpYTTZJSEJsYm1ScGJtY3NJR1oxYkdacGJHeGxaQ3dnYjNJZ2NtVnFaV04wWldRdVhHNWNiaUFnSUNBZ0lGQnliMjFwYzJWeklIUm9ZWFFnWVhKbElHWjFiR1pwYkd4bFpDQm9ZWFpsSUdFZ1puVnNabWxzYkcxbGJuUWdkbUZzZFdVZ1lXNWtJR0Z5WlNCcGJpQjBhR1VnWm5Wc1ptbHNiR1ZrWEc0Z0lDQWdJQ0J6ZEdGMFpTNGdJRkJ5YjIxcGMyVnpJSFJvWVhRZ1lYSmxJSEpsYW1WamRHVmtJR2hoZG1VZ1lTQnlaV3BsWTNScGIyNGdjbVZoYzI5dUlHRnVaQ0JoY21VZ2FXNGdkR2hsWEc0Z0lDQWdJQ0J5WldwbFkzUmxaQ0J6ZEdGMFpTNGdJRUVnWm5Wc1ptbHNiRzFsYm5RZ2RtRnNkV1VnYVhNZ2JtVjJaWElnWVNCMGFHVnVZV0pzWlM1Y2JseHVJQ0FnSUNBZ1VISnZiV2x6WlhNZ1kyRnVJR0ZzYzI4Z1ltVWdjMkZwWkNCMGJ5QXFjbVZ6YjJ4MlpTb2dZU0IyWVd4MVpTNGdJRWxtSUhSb2FYTWdkbUZzZFdVZ2FYTWdZV3h6YnlCaFhHNGdJQ0FnSUNCd2NtOXRhWE5sTENCMGFHVnVJSFJvWlNCdmNtbG5hVzVoYkNCd2NtOXRhWE5sSjNNZ2MyVjBkR3hsWkNCemRHRjBaU0IzYVd4c0lHMWhkR05vSUhSb1pTQjJZV3gxWlNkelhHNGdJQ0FnSUNCelpYUjBiR1ZrSUhOMFlYUmxMaUFnVTI4Z1lTQndjbTl0YVhObElIUm9ZWFFnS25KbGMyOXNkbVZ6S2lCaElIQnliMjFwYzJVZ2RHaGhkQ0J5WldwbFkzUnpJSGRwYkd4Y2JpQWdJQ0FnSUdsMGMyVnNaaUJ5WldwbFkzUXNJR0Z1WkNCaElIQnliMjFwYzJVZ2RHaGhkQ0FxY21WemIyeDJaWE1xSUdFZ2NISnZiV2x6WlNCMGFHRjBJR1oxYkdacGJHeHpJSGRwYkd4Y2JpQWdJQ0FnSUdsMGMyVnNaaUJtZFd4bWFXeHNMbHh1WEc1Y2JpQWdJQ0FnSUVKaGMybGpJRlZ6WVdkbE9seHVJQ0FnSUNBZ0xTMHRMUzB0TFMwdExTMHRYRzVjYmlBZ0lDQWdJR0JnWUdwelhHNGdJQ0FnSUNCMllYSWdjSEp2YldselpTQTlJRzVsZHlCUWNtOXRhWE5sS0daMWJtTjBhVzl1S0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnZTF4dUlDQWdJQ0FnSUNBdkx5QnZiaUJ6ZFdOalpYTnpYRzRnSUNBZ0lDQWdJSEpsYzI5c2RtVW9kbUZzZFdVcE8xeHVYRzRnSUNBZ0lDQWdJQzh2SUc5dUlHWmhhV3gxY21WY2JpQWdJQ0FnSUNBZ2NtVnFaV04wS0hKbFlYTnZiaWs3WEc0Z0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ2NISnZiV2x6WlM1MGFHVnVLR1oxYm1OMGFXOXVLSFpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJQzh2SUc5dUlHWjFiR1pwYkd4dFpXNTBYRzRnSUNBZ0lDQjlMQ0JtZFc1amRHbHZiaWh5WldGemIyNHBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2IyNGdjbVZxWldOMGFXOXVYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJR0JnWUZ4dVhHNGdJQ0FnSUNCQlpIWmhibU5sWkNCVmMyRm5aVHBjYmlBZ0lDQWdJQzB0TFMwdExTMHRMUzB0TFMwdExWeHVYRzRnSUNBZ0lDQlFjbTl0YVhObGN5QnphR2x1WlNCM2FHVnVJR0ZpYzNSeVlXTjBhVzVuSUdGM1lYa2dZWE41Ym1Ob2NtOXViM1Z6SUdsdWRHVnlZV04wYVc5dWN5QnpkV05vSUdGelhHNGdJQ0FnSUNCZ1dFMU1TSFIwY0ZKbGNYVmxjM1JnY3k1Y2JseHVJQ0FnSUNBZ1lHQmdhbk5jYmlBZ0lDQWdJR1oxYm1OMGFXOXVJR2RsZEVwVFQwNG9kWEpzS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCdVpYY2dVSEp2YldselpTaG1kVzVqZEdsdmJpaHlaWE52YkhabExDQnlaV3BsWTNRcGUxeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCNGFISWdQU0J1WlhjZ1dFMU1TSFIwY0ZKbGNYVmxjM1FvS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJSGhvY2k1dmNHVnVLQ2RIUlZRbkxDQjFjbXdwTzF4dUlDQWdJQ0FnSUNBZ0lIaG9jaTV2Ym5KbFlXUjVjM1JoZEdWamFHRnVaMlVnUFNCb1lXNWtiR1Z5TzF4dUlDQWdJQ0FnSUNBZ0lIaG9jaTV5WlhOd2IyNXpaVlI1Y0dVZ1BTQW5hbk52YmljN1hHNGdJQ0FnSUNBZ0lDQWdlR2h5TG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSjBGalkyVndkQ2NzSUNkaGNIQnNhV05oZEdsdmJpOXFjMjl1SnlrN1hHNGdJQ0FnSUNBZ0lDQWdlR2h5TG5ObGJtUW9LVHRjYmx4dUlDQWdJQ0FnSUNBZ0lHWjFibU4wYVc5dUlHaGhibVJzWlhJb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kR2hwY3k1eVpXRmtlVk4wWVhSbElEMDlQU0IwYUdsekxrUlBUa1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YzNSaGRIVnpJRDA5UFNBeU1EQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxLSFJvYVhNdWNtVnpjRzl1YzJVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGFtVmpkQ2h1WlhjZ1JYSnliM0lvSjJkbGRFcFRUMDQ2SUdBbklDc2dkWEpzSUNzZ0oyQWdabUZwYkdWa0lIZHBkR2dnYzNSaGRIVnpPaUJiSnlBcklIUm9hWE11YzNSaGRIVnpJQ3NnSjEwbktTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1oyVjBTbE5QVGlnbkwzQnZjM1J6TG1wemIyNG5LUzUwYUdWdUtHWjFibU4wYVc5dUtHcHpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdiMjRnWm5Wc1ptbHNiRzFsYm5SY2JpQWdJQ0FnSUgwc0lHWjFibU4wYVc5dUtISmxZWE52YmlrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJ2YmlCeVpXcGxZM1JwYjI1Y2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ1lHQmdYRzVjYmlBZ0lDQWdJRlZ1YkdsclpTQmpZV3hzWW1GamEzTXNJSEJ5YjIxcGMyVnpJR0Z5WlNCbmNtVmhkQ0JqYjIxd2IzTmhZbXhsSUhCeWFXMXBkR2wyWlhNdVhHNWNiaUFnSUNBZ0lHQmdZR3B6WEc0Z0lDQWdJQ0JRY205dGFYTmxMbUZzYkNoYlhHNGdJQ0FnSUNBZ0lHZGxkRXBUVDA0b0p5OXdiM04wY3ljcExGeHVJQ0FnSUNBZ0lDQm5aWFJLVTA5T0tDY3ZZMjl0YldWdWRITW5LVnh1SUNBZ0lDQWdYU2t1ZEdobGJpaG1kVzVqZEdsdmJpaDJZV3gxWlhNcGUxeHVJQ0FnSUNBZ0lDQjJZV3gxWlhOYk1GMGdMeThnUFQ0Z2NHOXpkSE5LVTA5T1hHNGdJQ0FnSUNBZ0lIWmhiSFZsYzFzeFhTQXZMeUE5UGlCamIyMXRaVzUwYzBwVFQwNWNibHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkbUZzZFdWek8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnUUdOc1lYTnpJRkJ5YjIxcGMyVmNiaUFnSUNBZ0lFQndZWEpoYlNCN1puVnVZM1JwYjI1OUlISmxjMjlzZG1WeVhHNGdJQ0FnSUNCVmMyVm1kV3dnWm05eUlIUnZiMnhwYm1jdVhHNGdJQ0FnSUNCQVkyOXVjM1J5ZFdOMGIzSmNiaUFnSUNBcUwxeHVJQ0FnSUdaMWJtTjBhVzl1SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKQ1JRY205dGFYTmxLSEpsYzI5c2RtVnlLU0I3WEc0Z0lDQWdJQ0IwYUdsekxsOXBaQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKQ1JqYjNWdWRHVnlLeXM3WEc0Z0lDQWdJQ0IwYUdsekxsOXpkR0YwWlNBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnSUNBZ0lIUm9hWE11WDNKbGMzVnNkQ0E5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0FnSUhSb2FYTXVYM04xWW5OamNtbGlaWEp6SUQwZ1cxMDdYRzVjYmlBZ0lDQWdJR2xtSUNoc2FXSWtaWE0ySkhCeWIyMXBjMlVrSkdsdWRHVnlibUZzSkNSdWIyOXdJQ0U5UFNCeVpYTnZiSFpsY2lrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvSVd4cFlpUmxjellrY0hKdmJXbHpaU1IxZEdsc2N5UWthWE5HZFc1amRHbHZiaWh5WlhOdmJIWmxjaWtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNRa2JtVmxaSE5TWlhOdmJIWmxjaWdwTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdhV1lnS0NFb2RHaHBjeUJwYm5OMFlXNWpaVzltSUd4cFlpUmxjellrY0hKdmJXbHpaU1J3Y205dGFYTmxKQ1JRY205dGFYTmxLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSdVpXVmtjMDVsZHlncE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrYVc1cGRHbGhiR2w2WlZCeWIyMXBjMlVvZEdocGN5d2djbVZ6YjJ4MlpYSXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSUWNtOXRhWE5sTG1Gc2JDQTlJR3hwWWlSbGN6WWtjSEp2YldselpTUndjbTl0YVhObEpHRnNiQ1FrWkdWbVlYVnNkRHRjYmlBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNRa1VISnZiV2x6WlM1eVlXTmxJRDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtjbUZqWlNRa1pHVm1ZWFZzZER0Y2JpQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtjSEp2YldselpTUWtVSEp2YldselpTNXlaWE52YkhabElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa2NtVnpiMngyWlNRa1pHVm1ZWFZzZER0Y2JpQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtjSEp2YldselpTUWtVSEp2YldselpTNXlaV3BsWTNRZ1BTQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNSeVpXcGxZM1FrSkdSbFptRjFiSFE3WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pGQnliMjFwYzJVdVgzTmxkRk5qYUdWa2RXeGxjaUE5SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUnpaWFJUWTJobFpIVnNaWEk3WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pGQnliMjFwYzJVdVgzTmxkRUZ6WVhBZ1BTQnNhV0lrWlhNMkpIQnliMjFwYzJVa1lYTmhjQ1FrYzJWMFFYTmhjRHRjYmlBZ0lDQnNhV0lrWlhNMkpIQnliMjFwYzJVa2NISnZiV2x6WlNRa1VISnZiV2x6WlM1ZllYTmhjQ0E5SUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUmhjMkZ3TzF4dVhHNGdJQ0FnYkdsaUpHVnpOaVJ3Y205dGFYTmxKSEJ5YjIxcGMyVWtKRkJ5YjIxcGMyVXVjSEp2ZEc5MGVYQmxJRDBnZTF4dUlDQWdJQ0FnWTI5dWMzUnlkV04wYjNJNklHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSUWNtOXRhWE5sTEZ4dVhHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNCVWFHVWdjSEpwYldGeWVTQjNZWGtnYjJZZ2FXNTBaWEpoWTNScGJtY2dkMmwwYUNCaElIQnliMjFwYzJVZ2FYTWdkR2h5YjNWbmFDQnBkSE1nWUhSb1pXNWdJRzFsZEdodlpDeGNiaUFnSUNBZ0lIZG9hV05vSUhKbFoybHpkR1Z5Y3lCallXeHNZbUZqYTNNZ2RHOGdjbVZqWldsMlpTQmxhWFJvWlhJZ1lTQndjbTl0YVhObEozTWdaWFpsYm5SMVlXd2dkbUZzZFdVZ2IzSWdkR2hsWEc0Z0lDQWdJQ0J5WldGemIyNGdkMmg1SUhSb1pTQndjbTl0YVhObElHTmhibTV2ZENCaVpTQm1kV3htYVd4c1pXUXVYRzVjYmlBZ0lDQWdJR0JnWUdwelhHNGdJQ0FnSUNCbWFXNWtWWE5sY2lncExuUm9aVzRvWm5WdVkzUnBiMjRvZFhObGNpbDdYRzRnSUNBZ0lDQWdJQzh2SUhWelpYSWdhWE1nWVhaaGFXeGhZbXhsWEc0Z0lDQWdJQ0I5TENCbWRXNWpkR2x2YmloeVpXRnpiMjRwZTF4dUlDQWdJQ0FnSUNBdkx5QjFjMlZ5SUdseklIVnVZWFpoYVd4aFlteGxMQ0JoYm1RZ2VXOTFJR0Z5WlNCbmFYWmxiaUIwYUdVZ2NtVmhjMjl1SUhkb2VWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnUTJoaGFXNXBibWRjYmlBZ0lDQWdJQzB0TFMwdExTMHRYRzVjYmlBZ0lDQWdJRlJvWlNCeVpYUjFjbTRnZG1Gc2RXVWdiMllnWUhSb1pXNWdJR2x6SUdsMGMyVnNaaUJoSUhCeWIyMXBjMlV1SUNCVWFHbHpJSE5sWTI5dVpDd2dKMlJ2ZDI1emRISmxZVzBuWEc0Z0lDQWdJQ0J3Y205dGFYTmxJR2x6SUhKbGMyOXNkbVZrSUhkcGRHZ2dkR2hsSUhKbGRIVnliaUIyWVd4MVpTQnZaaUIwYUdVZ1ptbHljM1FnY0hKdmJXbHpaU2R6SUdaMWJHWnBiR3h0Wlc1MFhHNGdJQ0FnSUNCdmNpQnlaV3BsWTNScGIyNGdhR0Z1Wkd4bGNpd2diM0lnY21WcVpXTjBaV1FnYVdZZ2RHaGxJR2hoYm1Sc1pYSWdkR2h5YjNkeklHRnVJR1Y0WTJWd2RHbHZiaTVjYmx4dUlDQWdJQ0FnWUdCZ2FuTmNiaUFnSUNBZ0lHWnBibVJWYzJWeUtDa3VkR2hsYmlobWRXNWpkR2x2YmlBb2RYTmxjaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnZFhObGNpNXVZVzFsTzF4dUlDQWdJQ0FnZlN3Z1puVnVZM1JwYjI0Z0tISmxZWE52YmlrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z0oyUmxabUYxYkhRZ2JtRnRaU2M3WEc0Z0lDQWdJQ0I5S1M1MGFHVnVLR1oxYm1OMGFXOXVJQ2gxYzJWeVRtRnRaU2tnZTF4dUlDQWdJQ0FnSUNBdkx5QkpaaUJnWm1sdVpGVnpaWEpnSUdaMWJHWnBiR3hsWkN3Z1lIVnpaWEpPWVcxbFlDQjNhV3hzSUdKbElIUm9aU0IxYzJWeUozTWdibUZ0WlN3Z2IzUm9aWEozYVhObElHbDBYRzRnSUNBZ0lDQWdJQzh2SUhkcGJHd2dZbVVnWUNka1pXWmhkV3gwSUc1aGJXVW5ZRnh1SUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0FnSUdacGJtUlZjMlZ5S0NrdWRHaGxiaWhtZFc1amRHbHZiaUFvZFhObGNpa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMFp2ZFc1a0lIVnpaWElzSUdKMWRDQnpkR2xzYkNCMWJtaGhjSEI1SnlrN1hHNGdJQ0FnSUNCOUxDQm1kVzVqZEdsdmJpQW9jbVZoYzI5dUtTQjdYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25ZR1pwYm1SVmMyVnlZQ0J5WldwbFkzUmxaQ0JoYm1RZ2QyVW5jbVVnZFc1b1lYQndlU2NwTzF4dUlDQWdJQ0FnZlNrdWRHaGxiaWhtZFc1amRHbHZiaUFvZG1Gc2RXVXBJSHRjYmlBZ0lDQWdJQ0FnTHk4Z2JtVjJaWElnY21WaFkyaGxaRnh1SUNBZ0lDQWdmU3dnWm5WdVkzUnBiMjRnS0hKbFlYTnZiaWtnZTF4dUlDQWdJQ0FnSUNBdkx5QnBaaUJnWm1sdVpGVnpaWEpnSUdaMWJHWnBiR3hsWkN3Z1lISmxZWE52Ym1BZ2QybHNiQ0JpWlNBblJtOTFibVFnZFhObGNpd2dZblYwSUhOMGFXeHNJSFZ1YUdGd2NIa25MbHh1SUNBZ0lDQWdJQ0F2THlCSlppQmdabWx1WkZWelpYSmdJSEpsYW1WamRHVmtMQ0JnY21WaGMyOXVZQ0IzYVd4c0lHSmxJQ2RnWm1sdVpGVnpaWEpnSUhKbGFtVmpkR1ZrSUdGdVpDQjNaU2R5WlNCMWJtaGhjSEI1Snk1Y2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ1lHQmdYRzRnSUNBZ0lDQkpaaUIwYUdVZ1pHOTNibk4wY21WaGJTQndjbTl0YVhObElHUnZaWE1nYm05MElITndaV05wWm5rZ1lTQnlaV3BsWTNScGIyNGdhR0Z1Wkd4bGNpd2djbVZxWldOMGFXOXVJSEpsWVhOdmJuTWdkMmxzYkNCaVpTQndjbTl3WVdkaGRHVmtJR1oxY25Sb1pYSWdaRzkzYm5OMGNtVmhiUzVjYmx4dUlDQWdJQ0FnWUdCZ2FuTmNiaUFnSUNBZ0lHWnBibVJWYzJWeUtDa3VkR2hsYmlobWRXNWpkR2x2YmlBb2RYTmxjaWtnZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1VHVmtZV2R2WjJsallXeEZlR05sY0hScGIyNG9KMVZ3YzNSeVpXRnRJR1Z5Y205eUp5azdYRzRnSUNBZ0lDQjlLUzUwYUdWdUtHWjFibU4wYVc5dUlDaDJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQXZMeUJ1WlhabGNpQnlaV0ZqYUdWa1hHNGdJQ0FnSUNCOUtTNTBhR1Z1S0daMWJtTjBhVzl1SUNoMllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNBdkx5QnVaWFpsY2lCeVpXRmphR1ZrWEc0Z0lDQWdJQ0I5TENCbWRXNWpkR2x2YmlBb2NtVmhjMjl1S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRlJvWlNCZ1VHVmtaMkZuYjJOcFlXeEZlR05sY0hScGIyNWdJR2x6SUhCeWIzQmhaMkYwWldRZ1lXeHNJSFJvWlNCM1lYa2daRzkzYmlCMGJ5Qm9aWEpsWEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUdCZ1lGeHVYRzRnSUNBZ0lDQkJjM05wYldsc1lYUnBiMjVjYmlBZ0lDQWdJQzB0TFMwdExTMHRMUzB0TFZ4dVhHNGdJQ0FnSUNCVGIyMWxkR2x0WlhNZ2RHaGxJSFpoYkhWbElIbHZkU0IzWVc1MElIUnZJSEJ5YjNCaFoyRjBaU0IwYnlCaElHUnZkMjV6ZEhKbFlXMGdjSEp2YldselpTQmpZVzRnYjI1c2VTQmlaVnh1SUNBZ0lDQWdjbVYwY21sbGRtVmtJR0Z6ZVc1amFISnZibTkxYzJ4NUxpQlVhR2x6SUdOaGJpQmlaU0JoWTJocFpYWmxaQ0JpZVNCeVpYUjFjbTVwYm1jZ1lTQndjbTl0YVhObElHbHVJSFJvWlZ4dUlDQWdJQ0FnWm5Wc1ptbHNiRzFsYm5RZ2IzSWdjbVZxWldOMGFXOXVJR2hoYm1Sc1pYSXVJRlJvWlNCa2IzZHVjM1J5WldGdElIQnliMjFwYzJVZ2QybHNiQ0IwYUdWdUlHSmxJSEJsYm1ScGJtZGNiaUFnSUNBZ0lIVnVkR2xzSUhSb1pTQnlaWFIxY201bFpDQndjbTl0YVhObElHbHpJSE5sZEhSc1pXUXVJRlJvYVhNZ2FYTWdZMkZzYkdWa0lDcGhjM05wYldsc1lYUnBiMjRxTGx4dVhHNGdJQ0FnSUNCZ1lHQnFjMXh1SUNBZ0lDQWdabWx1WkZWelpYSW9LUzUwYUdWdUtHWjFibU4wYVc5dUlDaDFjMlZ5S1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCbWFXNWtRMjl0YldWdWRITkNlVUYxZEdodmNpaDFjMlZ5S1R0Y2JpQWdJQ0FnSUgwcExuUm9aVzRvWm5WdVkzUnBiMjRnS0dOdmJXMWxiblJ6S1NCN1hHNGdJQ0FnSUNBZ0lDOHZJRlJvWlNCMWMyVnlKM01nWTI5dGJXVnVkSE1nWVhKbElHNXZkeUJoZG1GcGJHRmliR1ZjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnWUdCZ1hHNWNiaUFnSUNBZ0lFbG1JSFJvWlNCaGMzTnBiV3hwWVhSbFpDQndjbTl0YVhObElISmxhbVZqZEhNc0lIUm9aVzRnZEdobElHUnZkMjV6ZEhKbFlXMGdjSEp2YldselpTQjNhV3hzSUdGc2MyOGdjbVZxWldOMExseHVYRzRnSUNBZ0lDQmdZR0JxYzF4dUlDQWdJQ0FnWm1sdVpGVnpaWElvS1M1MGFHVnVLR1oxYm1OMGFXOXVJQ2gxYzJWeUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQm1hVzVrUTI5dGJXVnVkSE5DZVVGMWRHaHZjaWgxYzJWeUtUdGNiaUFnSUNBZ0lIMHBMblJvWlc0b1puVnVZM1JwYjI0Z0tHTnZiVzFsYm5SektTQjdYRzRnSUNBZ0lDQWdJQzh2SUVsbUlHQm1hVzVrUTI5dGJXVnVkSE5DZVVGMWRHaHZjbUFnWm5Wc1ptbHNiSE1zSUhkbEoyeHNJR2hoZG1VZ2RHaGxJSFpoYkhWbElHaGxjbVZjYmlBZ0lDQWdJSDBzSUdaMWJtTjBhVzl1SUNoeVpXRnpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ0x5OGdTV1lnWUdacGJtUkRiMjF0Wlc1MGMwSjVRWFYwYUc5eVlDQnlaV3BsWTNSekxDQjNaU2RzYkNCb1lYWmxJSFJvWlNCeVpXRnpiMjRnYUdWeVpWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnVTJsdGNHeGxJRVY0WVcxd2JHVmNiaUFnSUNBZ0lDMHRMUzB0TFMwdExTMHRMUzB0WEc1Y2JpQWdJQ0FnSUZONWJtTm9jbTl1YjNWeklFVjRZVzF3YkdWY2JseHVJQ0FnSUNBZ1lHQmdhbUYyWVhOamNtbHdkRnh1SUNBZ0lDQWdkbUZ5SUhKbGMzVnNkRHRjYmx4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdjbVZ6ZFd4MElEMGdabWx1WkZKbGMzVnNkQ2dwTzF4dUlDQWdJQ0FnSUNBdkx5QnpkV05qWlhOelhHNGdJQ0FnSUNCOUlHTmhkR05vS0hKbFlYTnZiaWtnZTF4dUlDQWdJQ0FnSUNBdkx5Qm1ZV2xzZFhKbFhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCZ1lHQmNibHh1SUNBZ0lDQWdSWEp5WW1GamF5QkZlR0Z0Y0d4bFhHNWNiaUFnSUNBZ0lHQmdZR3B6WEc0Z0lDQWdJQ0JtYVc1a1VtVnpkV3gwS0daMWJtTjBhVzl1S0hKbGMzVnNkQ3dnWlhKeUtYdGNiaUFnSUNBZ0lDQWdhV1lnS0dWeWNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUM4dklHWmhhV3gxY21WY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQXZMeUJ6ZFdOalpYTnpYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnWUdCZ1hHNWNiaUFnSUNBZ0lGQnliMjFwYzJVZ1JYaGhiWEJzWlR0Y2JseHVJQ0FnSUNBZ1lHQmdhbUYyWVhOamNtbHdkRnh1SUNBZ0lDQWdabWx1WkZKbGMzVnNkQ2dwTG5Sb1pXNG9ablZ1WTNScGIyNG9jbVZ6ZFd4MEtYdGNiaUFnSUNBZ0lDQWdMeThnYzNWalkyVnpjMXh1SUNBZ0lDQWdmU3dnWm5WdVkzUnBiMjRvY21WaGMyOXVLWHRjYmlBZ0lDQWdJQ0FnTHk4Z1ptRnBiSFZ5WlZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCZ1lHQmNibHh1SUNBZ0lDQWdRV1IyWVc1alpXUWdSWGhoYlhCc1pWeHVJQ0FnSUNBZ0xTMHRMUzB0TFMwdExTMHRMUzFjYmx4dUlDQWdJQ0FnVTNsdVkyaHliMjV2ZFhNZ1JYaGhiWEJzWlZ4dVhHNGdJQ0FnSUNCZ1lHQnFZWFpoYzJOeWFYQjBYRzRnSUNBZ0lDQjJZWElnWVhWMGFHOXlMQ0JpYjI5cmN6dGNibHh1SUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ1lYVjBhRzl5SUQwZ1ptbHVaRUYxZEdodmNpZ3BPMXh1SUNBZ0lDQWdJQ0JpYjI5cmN5QWdQU0JtYVc1a1FtOXZhM05DZVVGMWRHaHZjaWhoZFhSb2IzSXBPMXh1SUNBZ0lDQWdJQ0F2THlCemRXTmpaWE56WEc0Z0lDQWdJQ0I5SUdOaGRHTm9LSEpsWVhOdmJpa2dlMXh1SUNBZ0lDQWdJQ0F2THlCbVlXbHNkWEpsWEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JnWUdCY2JseHVJQ0FnSUNBZ1JYSnlZbUZqYXlCRmVHRnRjR3hsWEc1Y2JpQWdJQ0FnSUdCZ1lHcHpYRzVjYmlBZ0lDQWdJR1oxYm1OMGFXOXVJR1p2ZFc1a1FtOXZhM01vWW05dmEzTXBJSHRjYmx4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCbWRXNWpkR2x2YmlCbVlXbHNkWEpsS0hKbFlYTnZiaWtnZTF4dVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHWnBibVJCZFhSb2IzSW9ablZ1WTNScGIyNG9ZWFYwYUc5eUxDQmxjbklwZTF4dUlDQWdJQ0FnSUNCcFppQW9aWEp5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdabUZwYkhWeVpTaGxjbklwTzF4dUlDQWdJQ0FnSUNBZ0lDOHZJR1poYVd4MWNtVmNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWm1sdVpFSnZiMjlyYzBKNVFYVjBhRzl5S0dGMWRHaHZjaXdnWm5WdVkzUnBiMjRvWW05dmEzTXNJR1Z5Y2lrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9aWEp5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnBiSFZ5WlNobGNuSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbWIzVnVaRUp2YjJ0ektHSnZiMnR6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHTmhkR05vS0hKbFlYTnZiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnBiSFZ5WlNoeVpXRnpiMjRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZTQmpZWFJqYUNobGNuSnZjaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdabUZwYkhWeVpTaGxjbklwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0F2THlCemRXTmpaWE56WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ1lHQmdYRzVjYmlBZ0lDQWdJRkJ5YjIxcGMyVWdSWGhoYlhCc1pUdGNibHh1SUNBZ0lDQWdZR0JnYW1GMllYTmpjbWx3ZEZ4dUlDQWdJQ0FnWm1sdVpFRjFkR2h2Y2lncExseHVJQ0FnSUNBZ0lDQjBhR1Z1S0dacGJtUkNiMjlyYzBKNVFYVjBhRzl5S1M1Y2JpQWdJQ0FnSUNBZ2RHaGxiaWhtZFc1amRHbHZiaWhpYjI5cmN5bDdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1ptOTFibVFnWW05dmEzTmNiaUFnSUNBZ0lIMHBMbU5oZEdOb0tHWjFibU4wYVc5dUtISmxZWE52YmlsN1hHNGdJQ0FnSUNBZ0lDOHZJSE52YldWMGFHbHVaeUIzWlc1MElIZHliMjVuWEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUdCZ1lGeHVYRzRnSUNBZ0lDQkFiV1YwYUc5a0lIUm9aVzVjYmlBZ0lDQWdJRUJ3WVhKaGJTQjdSblZ1WTNScGIyNTlJRzl1Um5Wc1ptbHNiR1ZrWEc0Z0lDQWdJQ0JBY0dGeVlXMGdlMFoxYm1OMGFXOXVmU0J2YmxKbGFtVmpkR1ZrWEc0Z0lDQWdJQ0JWYzJWbWRXd2dabTl5SUhSdmIyeHBibWN1WEc0Z0lDQWdJQ0JBY21WMGRYSnVJSHRRY205dGFYTmxmVnh1SUNBZ0lDb3ZYRzRnSUNBZ0lDQjBhR1Z1T2lCbWRXNWpkR2x2YmlodmJrWjFiR1pwYkd4dFpXNTBMQ0J2YmxKbGFtVmpkR2x2YmlrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnY0dGeVpXNTBJRDBnZEdocGN6dGNiaUFnSUNBZ0lDQWdkbUZ5SUhOMFlYUmxJRDBnY0dGeVpXNTBMbDl6ZEdGMFpUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb2MzUmhkR1VnUFQwOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNRa2FXNTBaWEp1WVd3a0pFWlZURVpKVEV4RlJDQW1KaUFoYjI1R2RXeG1hV3hzYldWdWRDQjhmQ0J6ZEdGMFpTQTlQVDBnYkdsaUpHVnpOaVJ3Y205dGFYTmxKQ1JwYm5SbGNtNWhiQ1FrVWtWS1JVTlVSVVFnSmlZZ0lXOXVVbVZxWldOMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCMllYSWdZMmhwYkdRZ1BTQnVaWGNnZEdocGN5NWpiMjV6ZEhKMVkzUnZjaWhzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1J1YjI5d0tUdGNiaUFnSUNBZ0lDQWdkbUZ5SUhKbGMzVnNkQ0E5SUhCaGNtVnVkQzVmY21WemRXeDBPMXh1WEc0Z0lDQWdJQ0FnSUdsbUlDaHpkR0YwWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFpoY2lCallXeHNZbUZqYXlBOUlHRnlaM1Z0Wlc1MGMxdHpkR0YwWlNBdElERmRPMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1JoYzJGd0pDUmhjMkZ3S0daMWJtTjBhVzl1S0NsN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzYVdJa1pYTTJKSEJ5YjIxcGMyVWtKR2x1ZEdWeWJtRnNKQ1JwYm5admEyVkRZV3hzWW1GamF5aHpkR0YwWlN3Z1kyaHBiR1FzSUdOaGJHeGlZV05yTENCeVpYTjFiSFFwTzF4dUlDQWdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUd4cFlpUmxjellrY0hKdmJXbHpaU1FrYVc1MFpYSnVZV3drSkhOMVluTmpjbWxpWlNod1lYSmxiblFzSUdOb2FXeGtMQ0J2YmtaMWJHWnBiR3h0Wlc1MExDQnZibEpsYW1WamRHbHZiaWs3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1kyaHBiR1E3WEc0Z0lDQWdJQ0I5TEZ4dVhHNGdJQ0FnTHlvcVhHNGdJQ0FnSUNCZ1kyRjBZMmhnSUdseklITnBiWEJzZVNCemRXZGhjaUJtYjNJZ1lIUm9aVzRvZFc1a1pXWnBibVZrTENCdmJsSmxhbVZqZEdsdmJpbGdJSGRvYVdOb0lHMWhhMlZ6SUdsMElIUm9aU0J6WVcxbFhHNGdJQ0FnSUNCaGN5QjBhR1VnWTJGMFkyZ2dZbXh2WTJzZ2IyWWdZU0IwY25rdlkyRjBZMmdnYzNSaGRHVnRaVzUwTGx4dVhHNGdJQ0FnSUNCZ1lHQnFjMXh1SUNBZ0lDQWdablZ1WTNScGIyNGdabWx1WkVGMWRHaHZjaWdwZTF4dUlDQWdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvSjJOdmRXeGtiaWQwSUdacGJtUWdkR2hoZENCaGRYUm9iM0luS1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0x5OGdjM2x1WTJoeWIyNXZkWE5jYmlBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lHWnBibVJCZFhSb2IzSW9LVHRjYmlBZ0lDQWdJSDBnWTJGMFkyZ29jbVZoYzI5dUtTQjdYRzRnSUNBZ0lDQWdJQzh2SUhOdmJXVjBhR2x1WnlCM1pXNTBJSGR5YjI1blhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDOHZJR0Z6ZVc1aklIZHBkR2dnY0hKdmJXbHpaWE5jYmlBZ0lDQWdJR1pwYm1SQmRYUm9iM0lvS1M1allYUmphQ2htZFc1amRHbHZiaWh5WldGemIyNHBlMXh1SUNBZ0lDQWdJQ0F2THlCemIyMWxkR2hwYm1jZ2QyVnVkQ0IzY205dVoxeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQmdZR0JjYmx4dUlDQWdJQ0FnUUcxbGRHaHZaQ0JqWVhSamFGeHVJQ0FnSUNBZ1FIQmhjbUZ0SUh0R2RXNWpkR2x2Ym4wZ2IyNVNaV3BsWTNScGIyNWNiaUFnSUNBZ0lGVnpaV1oxYkNCbWIzSWdkRzl2YkdsdVp5NWNiaUFnSUNBZ0lFQnlaWFIxY200Z2UxQnliMjFwYzJWOVhHNGdJQ0FnS2k5Y2JpQWdJQ0FnSUNkallYUmphQ2M2SUdaMWJtTjBhVzl1S0c5dVVtVnFaV04wYVc5dUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG5Sb1pXNG9iblZzYkN3Z2IyNVNaV3BsWTNScGIyNHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMDdYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhCdmJIbG1hV3hzSkNSd2IyeDVabWxzYkNncElIdGNiaUFnSUNBZ0lIWmhjaUJzYjJOaGJEdGNibHh1SUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJuYkc5aVlXd2dJVDA5SUNkMWJtUmxabWx1WldRbktTQjdYRzRnSUNBZ0lDQWdJQ0FnYkc5allXd2dQU0JuYkc5aVlXdzdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLSFI1Y0dWdlppQnpaV3htSUNFOVBTQW5kVzVrWldacGJtVmtKeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHeHZZMkZzSUQwZ2MyVnNaanRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2JHOWpZV3dnUFNCR2RXNWpkR2x2YmlnbmNtVjBkWEp1SUhSb2FYTW5LU2dwTzF4dUlDQWdJQ0FnSUNBZ0lIMGdZMkYwWTJnZ0tHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZHdiMng1Wm1sc2JDQm1ZV2xzWldRZ1ltVmpZWFZ6WlNCbmJHOWlZV3dnYjJKcVpXTjBJR2x6SUhWdVlYWmhhV3hoWW14bElHbHVJSFJvYVhNZ1pXNTJhWEp2Ym0xbGJuUW5LVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lIWmhjaUJRSUQwZ2JHOWpZV3d1VUhKdmJXbHpaVHRjYmx4dUlDQWdJQ0FnYVdZZ0tGQWdKaVlnVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzUwYjFOMGNtbHVaeTVqWVd4c0tGQXVjbVZ6YjJ4MlpTZ3BLU0E5UFQwZ0oxdHZZbXBsWTNRZ1VISnZiV2x6WlYwbklDWW1JQ0ZRTG1OaGMzUXBJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JzYjJOaGJDNVFjbTl0YVhObElEMGdiR2xpSkdWek5pUndjbTl0YVhObEpIQnliMjFwYzJVa0pHUmxabUYxYkhRN1hHNGdJQ0FnZlZ4dUlDQWdJSFpoY2lCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0c5c2VXWnBiR3drSkdSbFptRjFiSFFnUFNCc2FXSWtaWE0ySkhCeWIyMXBjMlVrY0c5c2VXWnBiR3drSkhCdmJIbG1hV3hzTzF4dVhHNGdJQ0FnZG1GeUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWJXUWtKRVZUTmxCeWIyMXBjMlVnUFNCN1hHNGdJQ0FnSUNBblVISnZiV2x6WlNjNklHeHBZaVJsY3pZa2NISnZiV2x6WlNSd2NtOXRhWE5sSkNSa1pXWmhkV3gwTEZ4dUlDQWdJQ0FnSjNCdmJIbG1hV3hzSnpvZ2JHbGlKR1Z6TmlSd2NtOXRhWE5sSkhCdmJIbG1hV3hzSkNSa1pXWmhkV3gwWEc0Z0lDQWdmVHRjYmx4dUlDQWdJQzhxSUdkc2IySmhiQ0JrWldacGJtVTZkSEoxWlNCdGIyUjFiR1U2ZEhKMVpTQjNhVzVrYjNjNklIUnlkV1VnS2k5Y2JpQWdJQ0JwWmlBb2RIbHdaVzltSUdSbFptbHVaU0E5UFQwZ0oyWjFibU4wYVc5dUp5QW1KaUJrWldacGJtVmJKMkZ0WkNkZEtTQjdYRzRnSUNBZ0lDQmtaV1pwYm1Vb1puVnVZM1JwYjI0b0tTQjdJSEpsZEhWeWJpQnNhV0lrWlhNMkpIQnliMjFwYzJVa2RXMWtKQ1JGVXpaUWNtOXRhWE5sT3lCOUtUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIUjVjR1Z2WmlCdGIyUjFiR1VnSVQwOUlDZDFibVJsWm1sdVpXUW5JQ1ltSUcxdlpIVnNaVnNuWlhod2IzSjBjeWRkS1NCN1hHNGdJQ0FnSUNCdGIyUjFiR1ZiSjJWNGNHOXlkSE1uWFNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWJXUWtKRVZUTmxCeWIyMXBjMlU3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2gwZVhCbGIyWWdkR2hwY3lBaFBUMGdKM1Z1WkdWbWFXNWxaQ2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTmJKMFZUTmxCeWIyMXBjMlVuWFNBOUlHeHBZaVJsY3pZa2NISnZiV2x6WlNSMWJXUWtKRVZUTmxCeWIyMXBjMlU3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR2xpSkdWek5pUndjbTl0YVhObEpIQnZiSGxtYVd4c0pDUmtaV1poZFd4MEtDazdYRzU5S1M1allXeHNLSFJvYVhNcE8xeHVYRzRpWFgwPSIsIi8qXG5Db3B5cmlnaHQgKEMpIDIwMTUgRnJlZCBLLiBTY2hvdHQgPGZrc2Nob3R0QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50eWxAZ21haWwuY29tPlxuQ29weXJpZ2h0IChDKSAyMDEzIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+XG5Db3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMgPG1hdGhpYXNAcWl3aS5iZT5cbkNvcHlyaWdodCAoQykgMjAxMiBKb29zdC1XaW0gQm9la2VzdGVpam4gPGpvb3N0LXdpbUBib2VrZXN0ZWlqbi5ubD5cbkNvcHlyaWdodCAoQykgMjAxMiBLcmlzIEtvd2FsIDxrcmlzLmtvd2FsQGNpeGFyLmNvbT5cbkNvcHlyaWdodCAoQykgMjAxMiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTIgQXJwYWQgQm9yc29zIDxhcnBhZC5ib3Jzb3NAZ29vZ2xlbWFpbC5jb20+XG5Db3B5cmlnaHQgKEMpIDIwMTEgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxubW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cblRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG5BTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG5JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbkxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG4vKmVzbGludCBuby11bmRlZmluZWQ6MCwgbm8tdXNlLWJlZm9yZS1kZWZpbmU6IDAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIHN5bnRheCA9IHJlcXVpcmUoXCIuL2xpYi9zeW50YXhcIiksXG4gICAgdG9rZW5JbmZvID0gcmVxdWlyZShcIi4vbGliL3Rva2VuLWluZm9cIiksXG4gICAgYXN0Tm9kZVR5cGVzID0gcmVxdWlyZShcIi4vbGliL2FzdC1ub2RlLXR5cGVzXCIpLFxuICAgIGFzdE5vZGVGYWN0b3J5ID0gcmVxdWlyZShcIi4vbGliL2FzdC1ub2RlLWZhY3RvcnlcIiksXG4gICAgZGVmYXVsdEZlYXR1cmVzID0gcmVxdWlyZShcIi4vbGliL2ZlYXR1cmVzXCIpLFxuICAgIE1lc3NhZ2VzID0gcmVxdWlyZShcIi4vbGliL21lc3NhZ2VzXCIpLFxuICAgIFhIVE1MRW50aXRpZXMgPSByZXF1aXJlKFwiLi9saWIveGh0bWwtZW50aXRpZXNcIiksXG4gICAgU3RyaW5nTWFwID0gcmVxdWlyZShcIi4vbGliL3N0cmluZy1tYXBcIiksXG4gICAgY29tbWVudEF0dGFjaG1lbnQgPSByZXF1aXJlKFwiLi9saWIvY29tbWVudC1hdHRhY2htZW50XCIpO1xuXG52YXIgVG9rZW4gPSB0b2tlbkluZm8uVG9rZW4sXG4gICAgVG9rZW5OYW1lID0gdG9rZW5JbmZvLlRva2VuTmFtZSxcbiAgICBGbkV4cHJUb2tlbnMgPSB0b2tlbkluZm8uRm5FeHByVG9rZW5zLFxuICAgIFJlZ2V4ID0gc3ludGF4LlJlZ2V4LFxuICAgIFByb3BlcnR5S2luZCxcbiAgICBzb3VyY2UsXG4gICAgc3RyaWN0LFxuICAgIGluZGV4LFxuICAgIGxpbmVOdW1iZXIsXG4gICAgbGluZVN0YXJ0LFxuICAgIGxlbmd0aCxcbiAgICBsb29rYWhlYWQsXG4gICAgc3RhdGUsXG4gICAgZXh0cmE7XG5cblByb3BlcnR5S2luZCA9IHtcbiAgICBEYXRhOiAxLFxuICAgIEdldDogMixcbiAgICBTZXQ6IDRcbn07XG5cblxuLy8gRW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIHRocm93IGFuIGVycm9yLlxuLy8gVGhpcyBpcyBvbmx5IHRvIGhhdmUgYSBiZXR0ZXIgY29udHJhY3Qgc2VtYW50aWMsIGkuZS4gYW5vdGhlciBzYWZldHkgbmV0XG4vLyB0byBjYXRjaCBhIGxvZ2ljIGVycm9yLiBUaGUgY29uZGl0aW9uIHNoYWxsIGJlIGZ1bGZpbGxlZCBpbiBub3JtYWwgY2FzZS5cbi8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBjb25kaXRpb24gb24gYW55IHVzZXIgaW5wdXQuXG5cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBU1NFUlQ6IFwiICsgbWVzc2FnZSk7XG4gICAgfVxufVxuXG4vLyA3LjQgQ29tbWVudHNcblxuZnVuY3Rpb24gYWRkQ29tbWVudCh0eXBlLCB2YWx1ZSwgc3RhcnQsIGVuZCwgbG9jKSB7XG4gICAgdmFyIGNvbW1lbnQ7XG5cbiAgICBhc3NlcnQodHlwZW9mIHN0YXJ0ID09PSBcIm51bWJlclwiLCBcIkNvbW1lbnQgbXVzdCBoYXZlIHZhbGlkIHBvc2l0aW9uXCIpO1xuXG4gICAgLy8gQmVjYXVzZSB0aGUgd2F5IHRoZSBhY3R1YWwgdG9rZW4gaXMgc2Nhbm5lZCwgb2Z0ZW4gdGhlIGNvbW1lbnRzXG4gICAgLy8gKGlmIGFueSkgYXJlIHNraXBwZWQgdHdpY2UgZHVyaW5nIHRoZSBsZXhpY2FsIGFuYWx5c2lzLlxuICAgIC8vIFRodXMsIHdlIG5lZWQgdG8gc2tpcCBhZGRpbmcgYSBjb21tZW50IGlmIHRoZSBjb21tZW50IGFycmF5IGFscmVhZHlcbiAgICAvLyBoYW5kbGVkIGl0LlxuICAgIGlmIChzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID49IHN0YXJ0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUubGFzdENvbW1lbnRTdGFydCA9IHN0YXJ0O1xuXG4gICAgY29tbWVudCA9IHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfTtcbiAgICBpZiAoZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgY29tbWVudC5yYW5nZSA9IFtzdGFydCwgZW5kXTtcbiAgICB9XG4gICAgaWYgKGV4dHJhLmxvYykge1xuICAgICAgICBjb21tZW50LmxvYyA9IGxvYztcbiAgICB9XG4gICAgZXh0cmEuY29tbWVudHMucHVzaChjb21tZW50KTtcblxuICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7XG4gICAgICAgIGNvbW1lbnRBdHRhY2htZW50LmFkZENvbW1lbnQoY29tbWVudCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBza2lwU2luZ2xlTGluZUNvbW1lbnQob2Zmc2V0KSB7XG4gICAgdmFyIHN0YXJ0LCBsb2MsIGNoLCBjb21tZW50O1xuXG4gICAgc3RhcnQgPSBpbmRleCAtIG9mZnNldDtcbiAgICBsb2MgPSB7XG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIG9mZnNldFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIG9mZnNldCwgaW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICBsb2MuZW5kID0ge1xuICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYWRkQ29tbWVudChcIkxpbmVcIiwgY29tbWVudCwgc3RhcnQsIGluZGV4IC0gMSwgbG9jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaCA9PT0gMTMgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAxMCkge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHRyYS5jb21tZW50cykge1xuICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0LCBpbmRleCk7XG4gICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICB9O1xuICAgICAgICBhZGRDb21tZW50KFwiTGluZVwiLCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBza2lwTXVsdGlMaW5lQ29tbWVudCgpIHtcbiAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7XG5cbiAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgc3RhcnQgPSBpbmRleCAtIDI7XG4gICAgICAgIGxvYyA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMlxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoKSkge1xuICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MEEpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7XG4gICAgICAgICAgICAvLyBCbG9jayBjb21tZW50IGVuZHMgd2l0aCBcIiovXCIuXG4gICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIDIsIGluZGV4IC0gMik7XG4gICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBhZGRDb21tZW50KFwiQmxvY2tcIiwgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xufVxuXG5mdW5jdGlvbiBza2lwQ29tbWVudCgpIHtcbiAgICB2YXIgY2gsIHN0YXJ0O1xuXG4gICAgc3RhcnQgPSAoaW5kZXggPT09IDApO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAgICAgICBpZiAoc3ludGF4LmlzV2hpdGVTcGFjZShjaCkpIHtcbiAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2gpKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgwQSkge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIHN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyRikgeyAvLyBVKzAwMkYgaXMgXCIvXCJcbiAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMik7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkgeyAgLy8gVSswMDJBIGlzIFwiKlwiXG4gICAgICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgICAgIHNraXBNdWx0aUxpbmVDb21tZW50KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0ICYmIGNoID09PSAweDJEKSB7IC8vIFUrMDAyRCBpcyBcIi1cIlxuICAgICAgICAgICAgLy8gVSswMDNFIGlzIFwiPlwiXG4gICAgICAgICAgICBpZiAoKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MkQpICYmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDIpID09PSAweDNFKSkge1xuICAgICAgICAgICAgICAgIC8vIFwiLS0+XCIgaXMgYSBzaW5nbGUtbGluZSBjb21tZW50XG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoMyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNDKSB7IC8vIFUrMDAzQyBpcyBcIjxcIlxuICAgICAgICAgICAgaWYgKHNvdXJjZS5zbGljZShpbmRleCArIDEsIGluZGV4ICsgNCkgPT09IFwiIS0tXCIpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgPGBcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgIWBcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWBcbiAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWBcbiAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1lbnQoNCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7XG4gICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwO1xuXG4gICAgbGVuID0gKHByZWZpeCA9PT0gXCJ1XCIpID8gNCA6IDI7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBzeW50YXguaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgXCIwMTIzNDU2Nzg5YWJjZGVmXCIuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xufVxuXG4vKipcbiAqIFNjYW5zIGFuIGV4dGVuZGVkIHVuaWNvZGUgY29kZSBwb2ludCBlc2NhcGUgc2VxdWVuY2UgZnJvbSBzb3VyY2UuIFRocm93cyBhblxuICogZXJyb3IgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5IG9yIGlmIHRoZSBjb2RlIHBvaW50IHZhbHVlIGlzIHRvbyBsYXJnZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBzdHJpbmcgY3JlYXRlZCBieSB0aGUgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzY2FuVW5pY29kZUNvZGVQb2ludEVzY2FwZSgpIHtcbiAgICB2YXIgY2gsIGNvZGUsIGN1MSwgY3UyO1xuXG4gICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIGNvZGUgPSAwO1xuXG4gICAgLy8gQXQgbGVhc3Qgb25lIGhleCBkaWdpdCBpcyByZXF1aXJlZC5cbiAgICBpZiAoY2ggPT09IFwifVwiKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgaWYgKCFzeW50YXguaXNIZXhEaWdpdChjaCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyBcIjAxMjM0NTY3ODlhYmNkZWZcIi5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGlmIChjb2RlID4gMHgxMEZGRkYgfHwgY2ggIT09IFwifVwiKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIC8vIFVURi0xNiBFbmNvZGluZ1xuICAgIGlmIChjb2RlIDw9IDB4RkZGRikge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICB9XG4gICAgY3UxID0gKChjb2RlIC0gMHgxMDAwMCkgPj4gMTApICsgMHhEODAwO1xuICAgIGN1MiA9ICgoY29kZSAtIDB4MTAwMDApICYgMTAyMykgKyAweERDMDA7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY3UxLCBjdTIpO1xufVxuXG5mdW5jdGlvbiBnZXRFc2NhcGVkSWRlbnRpZmllcigpIHtcbiAgICB2YXIgY2gsIGlkO1xuXG4gICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCsrKTtcbiAgICBpZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuXG4gICAgLy8gXCJcXHVcIiAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgaWYgKGNoID09PSAweDVDKSB7XG4gICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIGNoID0gc2NhbkhleEVzY2FwZShcInVcIik7XG4gICAgICAgIGlmICghY2ggfHwgY2ggPT09IFwiXFxcXFwiIHx8ICFzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlkID0gY2g7XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICBpZiAoIXN5bnRheC5pc0lkZW50aWZpZXJQYXJ0KGNoKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgaWQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICAgICAgLy8gXCJcXHVcIiAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChjaCA9PT0gMHg1Qykge1xuICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHIoMCwgaWQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKFwidVwiKTtcbiAgICAgICAgICAgIGlmICghY2ggfHwgY2ggPT09IFwiXFxcXFwiIHx8ICFzeW50YXguaXNJZGVudGlmaWVyUGFydChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIGdldElkZW50aWZpZXIoKSB7XG4gICAgdmFyIHN0YXJ0LCBjaDtcblxuICAgIHN0YXJ0ID0gaW5kZXgrKztcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIGlmIChjaCA9PT0gMHg1Qykge1xuICAgICAgICAgICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgIGluZGV4ID0gc3RhcnQ7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RXNjYXBlZElkZW50aWZpZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCk7XG59XG5cbmZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyKCkge1xuICAgIHZhciBzdGFydCwgaWQsIHR5cGU7XG5cbiAgICBzdGFydCA9IGluZGV4O1xuXG4gICAgLy8gQmFja3NsYXNoIChVKzAwNUMpIHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICBpZCA9IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUMpID8gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSA6IGdldElkZW50aWZpZXIoKTtcblxuICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQgb3IgbGl0ZXJhbCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci5cbiAgICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlkZW50aWZpZXIuXG4gICAgaWYgKGlkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjtcbiAgICB9IGVsc2UgaWYgKHN5bnRheC5pc0tleXdvcmQoaWQsIHN0cmljdCwgZXh0cmEuZWNtYUZlYXR1cmVzKSkge1xuICAgICAgICB0eXBlID0gVG9rZW4uS2V5d29yZDtcbiAgICB9IGVsc2UgaWYgKGlkID09PSBcIm51bGxcIikge1xuICAgICAgICB0eXBlID0gVG9rZW4uTnVsbExpdGVyYWw7XG4gICAgfSBlbHNlIGlmIChpZCA9PT0gXCJ0cnVlXCIgfHwgaWQgPT09IFwiZmFsc2VcIikge1xuICAgICAgICB0eXBlID0gVG9rZW4uQm9vbGVhbkxpdGVyYWw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgdmFsdWU6IGlkLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuXG4vLyA3LjcgUHVuY3R1YXRvcnNcblxuZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7XG4gICAgdmFyIHN0YXJ0ID0gaW5kZXgsXG4gICAgICAgIGNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCksXG4gICAgICAgIGNvZGUyLFxuICAgICAgICBjaDEgPSBzb3VyY2VbaW5kZXhdLFxuICAgICAgICBjaDIsXG4gICAgICAgIGNoMyxcbiAgICAgICAgY2g0O1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICAgIC8vIENoZWNrIGZvciBtb3N0IGNvbW1vbiBzaW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLlxuICAgICAgICBjYXNlIDQwOiAgIC8vICggb3BlbiBicmFja2V0XG4gICAgICAgIGNhc2UgNDE6ICAgLy8gKSBjbG9zZSBicmFja2V0XG4gICAgICAgIGNhc2UgNTk6ICAgLy8gOyBzZW1pY29sb25cbiAgICAgICAgY2FzZSA0NDogICAvLyAsIGNvbW1hXG4gICAgICAgIGNhc2UgOTE6ICAgLy8gW1xuICAgICAgICBjYXNlIDkzOiAgIC8vIF1cbiAgICAgICAgY2FzZSA1ODogICAvLyA6XG4gICAgICAgIGNhc2UgNjM6ICAgLy8gP1xuICAgICAgICBjYXNlIDEyNjogIC8vIH5cbiAgICAgICAgICAgICsraW5kZXg7XG5cbiAgICAgICAgICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjb2RlID09PSA0MCkge1xuICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIGNhc2UgMTIzOiAgLy8geyBvcGVuIGN1cmx5IGJyYWNlXG4gICAgICAgIGNhc2UgMTI1OiAgLy8gfSBjbG9zZSBjdXJseSBicmFjZVxuICAgICAgICAgICAgKytpbmRleDtcblxuICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplICYmIGNvZGUgPT09IDEyMykge1xuICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9va2FoZWFkMiBmdW5jdGlvbiBjYW4gY2F1c2UgdG9rZW5zIHRvIGJlIHNjYW5uZWQgdHdpY2UgYW5kIGluIGRvaW5nIHNvXG4gICAgICAgICAgICAvLyB3b3VsZCB3cmVjayB0aGUgY3VybHkgc3RhY2sgYnkgcHVzaGluZyB0aGUgc2FtZSB0b2tlbiBvbnRvIHRoZSBzdGFjayB0d2ljZS5cbiAgICAgICAgICAgIC8vIGN1cmx5TGFzdEluZGV4IGVuc3VyZXMgZWFjaCB0b2tlbiBpcyBwdXNoZWQgb3IgcG9wcGVkIGV4YWN0bHkgb25jZVxuICAgICAgICAgICAgaWYgKGluZGV4ID4gc3RhdGUuY3VybHlMYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5jdXJseUxhc3RJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAxMjMpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wdXNoKFwie1wiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jdXJseVN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb2RlMiA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG5cbiAgICAgICAgICAgIC8vIFwiPVwiIChjaGFyICM2MSkgbWFya3MgYW4gYXNzaWdubWVudCBvciBjb21wYXJpc29uIG9wZXJhdG9yLlxuICAgICAgICAgICAgaWYgKGNvZGUyID09PSA2MSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OiAgLy8gJVxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM4OiAgLy8gJlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQyOiAgLy8gKjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MzogIC8vICtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0NTogIC8vIC1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0NzogIC8vIC9cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2MDogIC8vIDxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2MjogIC8vID5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA5NDogIC8vIF5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjQ6IC8vIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDMzOiAvLyAhXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjE6IC8vID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICE9PSBhbmQgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSA2MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS5zbGljZShzdGFydCwgaW5kZXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gUGVlayBtb3JlIGNoYXJhY3RlcnMuXG5cbiAgICBjaDIgPSBzb3VyY2VbaW5kZXggKyAxXTtcbiAgICBjaDMgPSBzb3VyY2VbaW5kZXggKyAyXTtcbiAgICBjaDQgPSBzb3VyY2VbaW5kZXggKyAzXTtcblxuICAgIC8vIDQtY2hhcmFjdGVyIHB1bmN0dWF0b3I6ID4+Pj1cblxuICAgIGlmIChjaDEgPT09IFwiPlwiICYmIGNoMiA9PT0gXCI+XCIgJiYgY2gzID09PSBcIj5cIikge1xuICAgICAgICBpZiAoY2g0ID09PSBcIj1cIikge1xuICAgICAgICAgICAgaW5kZXggKz0gNDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCI+Pj49XCIsXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLWNoYXJhY3RlciBwdW5jdHVhdG9yczogPT09ICE9PSA+Pj4gPDw9ID4+PVxuXG4gICAgaWYgKGNoMSA9PT0gXCI+XCIgJiYgY2gyID09PSBcIj5cIiAmJiBjaDMgPT09IFwiPlwiKSB7XG4gICAgICAgIGluZGV4ICs9IDM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IFwiPj4+XCIsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2gxID09PSBcIjxcIiAmJiBjaDIgPT09IFwiPFwiICYmIGNoMyA9PT0gXCI9XCIpIHtcbiAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogXCI8PD1cIixcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjaDEgPT09IFwiPlwiICYmIGNoMiA9PT0gXCI+XCIgJiYgY2gzID09PSBcIj1cIikge1xuICAgICAgICBpbmRleCArPSAzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBcIj4+PVwiLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVGhlIC4uLiBvcGVyYXRvciAoc3ByZWFkLCByZXN0UGFyYW1zLCBKU1gsIGV0Yy4pXG4gICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy5zcHJlYWQgfHxcbiAgICAgICAgZXh0cmEuZWNtYUZlYXR1cmVzLnJlc3RQYXJhbXMgfHxcbiAgICAgICAgZXh0cmEuZWNtYUZlYXR1cmVzLmV4cGVyaW1lbnRhbE9iamVjdFJlc3RTcHJlYWQgfHxcbiAgICAgICAgKGV4dHJhLmVjbWFGZWF0dXJlcy5qc3ggJiYgc3RhdGUuaW5KU1hTcHJlYWRBdHRyaWJ1dGUpXG4gICAgKSB7XG4gICAgICAgIGlmIChjaDEgPT09IFwiLlwiICYmIGNoMiA9PT0gXCIuXCIgJiYgY2gzID09PSBcIi5cIikge1xuICAgICAgICAgICAgaW5kZXggKz0gMztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCIuLi5cIixcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE90aGVyIDItY2hhcmFjdGVyIHB1bmN0dWF0b3JzOiArKyAtLSA8PCA+PiAmJiB8fFxuICAgIGlmIChjaDEgPT09IGNoMiAmJiAoXCIrLTw+JnxcIi5pbmRleE9mKGNoMSkgPj0gMCkpIHtcbiAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogY2gxICsgY2gyLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gdGhlID0+IGZvciBhcnJvdyBmdW5jdGlvbnNcbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLmFycm93RnVuY3Rpb25zKSB7XG4gICAgICAgIGlmIChjaDEgPT09IFwiPVwiICYmIGNoMiA9PT0gXCI+XCIpIHtcbiAgICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IFwiPT5cIixcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcIjw+PSErLSolJnxeL1wiLmluZGV4T2YoY2gxKSA+PSAwKSB7XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IGNoMSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjaDEgPT09IFwiLlwiKSB7XG4gICAgICAgICsraW5kZXg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IGNoMSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xufVxuXG4vLyA3LjguMyBOdW1lcmljIExpdGVyYWxzXG5cbmZ1bmN0aW9uIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KSB7XG4gICAgdmFyIG51bWJlciA9IFwiXCI7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKCFzeW50YXguaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICB9XG5cbiAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsXG4gICAgICAgIHZhbHVlOiBwYXJzZUludChcIjB4XCIgKyBudW1iZXIsIDE2KSxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5CaW5hcnlMaXRlcmFsKHN0YXJ0KSB7XG4gICAgdmFyIGNoLCBudW1iZXIgPSBcIlwiO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgaWYgKGNoICE9PSBcIjBcIiAmJiBjaCAhPT0gXCIxXCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuXG4gICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gb25seSAwYiBvciAwQlxuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cblxuICAgIGlmIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgc3ludGF4LmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCxcbiAgICAgICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgMiksXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzY2FuT2N0YWxMaXRlcmFsKHByZWZpeCwgc3RhcnQpIHtcbiAgICB2YXIgbnVtYmVyLCBvY3RhbDtcblxuICAgIGlmIChzeW50YXguaXNPY3RhbERpZ2l0KHByZWZpeCkpIHtcbiAgICAgICAgb2N0YWwgPSB0cnVlO1xuICAgICAgICBudW1iZXIgPSBcIjBcIiArIHNvdXJjZVtpbmRleCsrXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvY3RhbCA9IGZhbHNlO1xuICAgICAgICArK2luZGV4O1xuICAgICAgICBudW1iZXIgPSBcIlwiO1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAoIXN5bnRheC5pc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuXG4gICAgaWYgKCFvY3RhbCAmJiBudW1iZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIG9ubHkgMG8gb3IgME9cbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8IHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCA4KSxcbiAgICAgICAgb2N0YWw6IG9jdGFsLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2Nhbk51bWVyaWNMaXRlcmFsKCkge1xuICAgIHZhciBudW1iZXIsIHN0YXJ0LCBjaDtcblxuICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICBhc3NlcnQoc3ludGF4LmlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpIHx8IChjaCA9PT0gXCIuXCIpLFxuICAgICAgICBcIk51bWVyaWMgbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2ludFwiKTtcblxuICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgbnVtYmVyID0gXCJcIjtcbiAgICBpZiAoY2ggIT09IFwiLlwiKSB7XG4gICAgICAgIG51bWJlciA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuXG4gICAgICAgIC8vIEhleCBudW1iZXIgc3RhcnRzIHdpdGggXCIweFwiLlxuICAgICAgICAvLyBPY3RhbCBudW1iZXIgc3RhcnRzIHdpdGggXCIwXCIuXG4gICAgICAgIGlmIChudW1iZXIgPT09IFwiMFwiKSB7XG4gICAgICAgICAgICBpZiAoY2ggPT09IFwieFwiIHx8IGNoID09PSBcIlhcIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluYXJ5IG51bWJlciBpbiBFUzYgc3RhcnRzIHdpdGggJzBiJ1xuICAgICAgICAgICAgaWYgKGV4dHJhLmVjbWFGZWF0dXJlcy5iaW5hcnlMaXRlcmFscykge1xuICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gXCJiXCIgfHwgY2ggPT09IFwiQlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuQmluYXJ5TGl0ZXJhbChzdGFydCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKGV4dHJhLmVjbWFGZWF0dXJlcy5vY3RhbExpdGVyYWxzICYmIChjaCA9PT0gXCJvXCIgfHwgY2ggPT09IFwiT1wiKSkgfHwgc3ludGF4LmlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk9jdGFsTGl0ZXJhbChjaCwgc3RhcnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZWNpbWFsIG51bWJlciBzdGFydHMgd2l0aCBcIjBcIiBzdWNoIGFzIFwiMDlcIiBpcyBpbGxlZ2FsLlxuICAgICAgICAgICAgaWYgKGNoICYmIHN5bnRheC5pc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB9XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IFwiLlwiKSB7XG4gICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIHdoaWxlIChzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgfVxuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSBcImVcIiB8fCBjaCA9PT0gXCJFXCIpIHtcbiAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcblxuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIGlmIChjaCA9PT0gXCIrXCIgfHwgY2ggPT09IFwiLVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkge1xuICAgICAgICAgICAgd2hpbGUgKHN5bnRheC5pc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN5bnRheC5pc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLFxuICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdChudW1iZXIpLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuLyoqXG4gKiBTY2FuIGEgc3RyaW5nIGVzY2FwZSBzZXF1ZW5jZSBhbmQgcmV0dXJuIGl0cyBzcGVjaWFsIGNoYXJhY3Rlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjaCBUaGUgc3RhcnRpbmcgY2hhcmFjdGVyIG9mIHRoZSBnaXZlbiBzZXF1ZW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjaGFyYWN0ZXIgYW5kIGEgZmxhZ1xuICogaWYgdGhlIGVzY2FwZSBzZXF1ZW5jZSB3YXMgYW4gb2N0YWwuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzY2FuRXNjYXBlU2VxdWVuY2UoY2gpIHtcbiAgICB2YXIgY29kZSxcbiAgICAgICAgdW5lc2NhcGVkLFxuICAgICAgICByZXN0b3JlLFxuICAgICAgICBlc2NhcGVkQ2gsXG4gICAgICAgIG9jdGFsID0gZmFsc2U7XG5cbiAgICAvLyBBbiBlc2NhcGUgc2VxdWVuY2UgY2Fubm90IGJlIGVtcHR5XG4gICAgaWYgKCFjaCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICBpZiAoY2ggPT09IFwiXFxyXCIgJiYgc291cmNlW2luZGV4XSA9PT0gXCJcXG5cIikge1xuICAgICAgICAgICAgKytpbmRleDtcbiAgICAgICAgfVxuICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcInVcIiAmJiBzb3VyY2VbaW5kZXhdID09PSBcIntcIikge1xuICAgICAgICAvLyBIYW5kbGUgRVM2IGV4dGVuZGVkIHVuaWNvZGUgY29kZSBwb2ludCBlc2NhcGUgc2VxdWVuY2VzLlxuICAgICAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLnVuaWNvZGVDb2RlUG9pbnRFc2NhcGVzKSB7XG4gICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgZXNjYXBlZENoID0gc2NhblVuaWNvZGVDb2RlUG9pbnRFc2NhcGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJ1XCIgfHwgY2ggPT09IFwieFwiKSB7XG4gICAgICAgIC8vIEhhbmRsZSBvdGhlciB1bmljb2RlIGFuZCBoZXggY29kZXMgbm9ybWFsbHlcbiAgICAgICAgcmVzdG9yZSA9IGluZGV4O1xuICAgICAgICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTtcbiAgICAgICAgaWYgKHVuZXNjYXBlZCkge1xuICAgICAgICAgICAgZXNjYXBlZENoID0gdW5lc2NhcGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlO1xuICAgICAgICAgICAgZXNjYXBlZENoID0gY2g7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09PSBcIm5cIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcblwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiclwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFxyXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJ0XCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXHRcIjtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBcImJcIikge1xuICAgICAgICBlc2NhcGVkQ2ggPSBcIlxcYlwiO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiZlwiKSB7XG4gICAgICAgIGVzY2FwZWRDaCA9IFwiXFxmXCI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gXCJ2XCIpIHtcbiAgICAgICAgZXNjYXBlZENoID0gXCJcXHZcIjtcbiAgICB9IGVsc2UgaWYgKHN5bnRheC5pc09jdGFsRGlnaXQoY2gpKSB7XG4gICAgICAgIGNvZGUgPSBcIjAxMjM0NTY3XCIuaW5kZXhPZihjaCk7XG5cbiAgICAgICAgLy8gXFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2VcbiAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBzeW50YXguaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7XG4gICAgICAgICAgICBvY3RhbCA9IHRydWU7XG4gICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyBcIjAxMjM0NTY3XCIuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pO1xuXG4gICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cyB3aXRoIDAsIDEsIDIsIDNcbiAgICAgICAgICAgIGlmIChcIjAxMjNcIi5pbmRleE9mKGNoKSA+PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGluZGV4IDwgbGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgIHN5bnRheC5pc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyBcIjAxMjM0NTY3XCIuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVzY2FwZWRDaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBlZENoID0gY2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2g6IGVzY2FwZWRDaCxcbiAgICAgICAgb2N0YWw6IG9jdGFsXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblN0cmluZ0xpdGVyYWwoKSB7XG4gICAgdmFyIHN0ciA9IFwiXCIsXG4gICAgICAgIGNoLFxuICAgICAgICBlc2NhcGVkU2VxdWVuY2UsXG4gICAgICAgIG9jdGFsID0gZmFsc2UsXG4gICAgICAgIHN0YXJ0ID0gaW5kZXgsXG4gICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1iZXIsXG4gICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0LFxuICAgICAgICBxdW90ZSA9IHNvdXJjZVtpbmRleF07XG5cbiAgICBhc3NlcnQoKHF1b3RlID09PSBcIidcIiB8fCBxdW90ZSA9PT0gXCJcXFwiXCIpLFxuICAgICAgICBcIlN0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZVwiKTtcblxuICAgICsraW5kZXg7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG5cbiAgICAgICAgaWYgKHN5bnRheC5pc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gcXVvdGUpIHtcbiAgICAgICAgICAgIHF1b3RlID0gXCJcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGNoID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgICAgICBlc2NhcGVkU2VxdWVuY2UgPSBzY2FuRXNjYXBlU2VxdWVuY2UoY2gpO1xuICAgICAgICAgICAgc3RyICs9IGVzY2FwZWRTZXF1ZW5jZS5jaDtcbiAgICAgICAgICAgIG9jdGFsID0gZXNjYXBlZFNlcXVlbmNlLm9jdGFsIHx8IG9jdGFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyICs9IGNoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1b3RlICE9PSBcIlwiKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFRva2VuLlN0cmluZ0xpdGVyYWwsXG4gICAgICAgIHZhbHVlOiBzdHIsXG4gICAgICAgIG9jdGFsOiBvY3RhbCxcbiAgICAgICAgc3RhcnRMaW5lTnVtYmVyOiBzdGFydExpbmVOdW1iZXIsXG4gICAgICAgIHN0YXJ0TGluZVN0YXJ0OiBzdGFydExpbmVTdGFydCxcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbi8qKlxuICogU2NhbiBhIHRlbXBsYXRlIHN0cmluZyBhbmQgcmV0dXJuIGEgdG9rZW4uIFRoaXMgc2NhbnMgYm90aCB0aGUgZmlyc3QgYW5kXG4gKiBzdWJzZXF1ZW50IHBpZWNlcyBvZiBhIHRlbXBsYXRlIHN0cmluZyBhbmQgYXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBiYWNrdGlja1xuICogb3IgdGhlIGNsb3NpbmcgfSBoYXZlIGFscmVhZHkgYmVlbiBzY2FubmVkLlxuICogQHJldHVybnMge1Rva2VufSBUaGUgdGVtcGxhdGUgc3RyaW5nIHRva2VuLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2NhblRlbXBsYXRlKCkge1xuICAgIHZhciBjb29rZWQgPSBcIlwiLFxuICAgICAgICBjaCxcbiAgICAgICAgZXNjYXBlZFNlcXVlbmNlLFxuICAgICAgICBzdGFydCA9IGluZGV4LFxuICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2UsXG4gICAgICAgIHRhaWwgPSBmYWxzZSxcbiAgICAgICAgaGVhZCA9IChzb3VyY2VbaW5kZXhdID09PSBcImBcIik7XG5cbiAgICArK2luZGV4O1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuXG4gICAgICAgIGlmIChjaCA9PT0gXCJgXCIpIHtcbiAgICAgICAgICAgIHRhaWwgPSB0cnVlO1xuICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCIkXCIpIHtcbiAgICAgICAgICAgIGlmIChzb3VyY2VbaW5kZXhdID09PSBcIntcIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgdGVybWluYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb29rZWQgKz0gY2g7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTtcbiAgICAgICAgICAgIGVzY2FwZWRTZXF1ZW5jZSA9IHNjYW5Fc2NhcGVTZXF1ZW5jZShjaCk7XG5cbiAgICAgICAgICAgIGlmIChlc2NhcGVkU2VxdWVuY2Uub2N0YWwpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5UZW1wbGF0ZU9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvb2tlZCArPSBlc2NhcGVkU2VxdWVuY2UuY2g7XG5cbiAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgKytsaW5lTnVtYmVyO1xuICAgICAgICAgICAgaWYgKGNoID09PSBcIlxcclwiICYmIHNvdXJjZVtpbmRleF0gPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgICArK2luZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICBjb29rZWQgKz0gXCJcXG5cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvb2tlZCArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGVybWluYXRlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPiBzdGF0ZS5jdXJseUxhc3RJbmRleCkge1xuICAgICAgICBzdGF0ZS5jdXJseUxhc3RJbmRleCA9IGluZGV4O1xuXG4gICAgICAgIGlmICghdGFpbCkge1xuICAgICAgICAgICAgc3RhdGUuY3VybHlTdGFjay5wdXNoKFwidGVtcGxhdGVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhlYWQpIHtcbiAgICAgICAgICAgIHN0YXRlLmN1cmx5U3RhY2sucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBUb2tlbi5UZW1wbGF0ZSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGNvb2tlZDogY29va2VkLFxuICAgICAgICAgICAgcmF3OiBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyAxLCBpbmRleCAtICgodGFpbCkgPyAxIDogMikpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWQ6IGhlYWQsXG4gICAgICAgIHRhaWw6IHRhaWwsXG4gICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiB0ZXN0UmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7XG4gICAgdmFyIHRtcCA9IHBhdHRlcm4sXG4gICAgICAgIHZhbGlkRmxhZ3MgPSBcImdtc2lcIjtcblxuICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMucmVnZXhZRmxhZykge1xuICAgICAgICB2YWxpZEZsYWdzICs9IFwieVwiO1xuICAgIH1cblxuICAgIGlmIChleHRyYS5lY21hRmVhdHVyZXMucmVnZXhVRmxhZykge1xuICAgICAgICB2YWxpZEZsYWdzICs9IFwidVwiO1xuICAgIH1cblxuICAgIGlmICghUmVnRXhwKFwiXltcIiArIHZhbGlkRmxhZ3MgKyBcIl0qJFwiKS50ZXN0KGZsYWdzKSkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwRmxhZyk7XG4gICAgfVxuXG5cbiAgICBpZiAoZmxhZ3MuaW5kZXhPZihcInVcIikgPj0gMCkge1xuICAgICAgICAvLyBSZXBsYWNlIGVhY2ggYXN0cmFsIHN5bWJvbCBhbmQgZXZlcnkgVW5pY29kZSBjb2RlIHBvaW50XG4gICAgICAgIC8vIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIGEgc2luZ2xlIEFTQ0lJIHN5bWJvbCB0byBhdm9pZCB0aHJvd2luZyBvblxuICAgICAgICAvLyByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgYXJlIG9ubHkgdmFsaWQgaW4gY29tYmluYXRpb24gd2l0aCB0aGVcbiAgICAgICAgLy8gYC91YCBmbGFnLlxuICAgICAgICAvLyBOb3RlOiByZXBsYWNpbmcgd2l0aCB0aGUgQVNDSUkgc3ltYm9sIGB4YCBtaWdodCBjYXVzZSBmYWxzZVxuICAgICAgICAvLyBuZWdhdGl2ZXMgaW4gdW5saWtlbHkgc2NlbmFyaW9zLiBGb3IgZXhhbXBsZSwgYFtcXHV7NjF9LWJdYCBpcyBhXG4gICAgICAgIC8vIHBlcmZlY3RseSB2YWxpZCBwYXR0ZXJuIHRoYXQgaXMgZXF1aXZhbGVudCB0byBgW2EtYl1gLCBidXQgaXRcbiAgICAgICAgLy8gd291bGQgYmUgcmVwbGFjZWQgYnkgYFt4LWJdYCB3aGljaCB0aHJvd3MgYW4gZXJyb3IuXG4gICAgICAgIHRtcCA9IHRtcFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFx1XFx7KFswLTlhLWZBLUZdKylcXH0vZywgZnVuY3Rpb24gKCQwLCAkMSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZUludCgkMSwgMTYpIDw9IDB4MTBGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcInhcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZywgXCJ4XCIpO1xuICAgIH1cblxuICAgIC8vIEZpcnN0LCBkZXRlY3QgaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb25zLlxuICAgIHRyeSB7XG4gICAgICAgIFJlZ0V4cCh0bXApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgcmVndWxhciBleHByZXNzaW9uIG9iamVjdCBmb3IgdGhpcyBwYXR0ZXJuLWZsYWcgcGFpciwgb3JcbiAgICAvLyBgbnVsbGAgaW4gY2FzZSB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBkb2Vzbid0IHN1cHBvcnQgdGhlIGZsYWdzIGl0XG4gICAgLy8gdXNlcy5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cEJvZHkoKSB7XG4gICAgdmFyIGNoLCBzdHIsIGNsYXNzTWFya2VyLCB0ZXJtaW5hdGVkLCBib2R5O1xuXG4gICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgIGFzc2VydChjaCA9PT0gXCIvXCIsIFwiUmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2hcIik7XG4gICAgc3RyID0gc291cmNlW2luZGV4KytdO1xuXG4gICAgY2xhc3NNYXJrZXIgPSBmYWxzZTtcbiAgICB0ZXJtaW5hdGVkID0gZmFsc2U7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIGlmIChjaCA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdO1xuICAgICAgICAgICAgLy8gRUNNQS0yNjIgNy44LjVcbiAgICAgICAgICAgIGlmIChzeW50YXguaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2xhc3NNYXJrZXIpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gXCJdXCIpIHtcbiAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNoID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCJbXCIpIHtcbiAgICAgICAgICAgICAgICBjbGFzc01hcmtlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRlcm1pbmF0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTtcbiAgICB9XG5cbiAgICAvLyBFeGNsdWRlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLlxuICAgIGJvZHkgPSBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogYm9keSxcbiAgICAgICAgbGl0ZXJhbDogc3RyXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cEZsYWdzKCkge1xuICAgIHZhciBjaCwgc3RyLCBmbGFncywgcmVzdG9yZTtcblxuICAgIHN0ciA9IFwiXCI7XG4gICAgZmxhZ3MgPSBcIlwiO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgICAgIGlmICghc3ludGF4LmlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgKytpbmRleDtcbiAgICAgICAgaWYgKGNoID09PSBcIlxcXFxcIiAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGNoID09PSBcInVcIikge1xuICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4O1xuICAgICAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZShcInVcIik7XG4gICAgICAgICAgICAgICAgaWYgKGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ciArPSBcIlxcXFx1XCI7IHJlc3RvcmUgPCBpbmRleDsgKytyZXN0b3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gc291cmNlW3Jlc3RvcmVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncyArPSBcInVcIjtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiXFxcXHVcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIFwiSUxMRUdBTFwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IFwiXFxcXFwiO1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbGFncyArPSBjaDtcbiAgICAgICAgICAgIHN0ciArPSBjaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBmbGFncyxcbiAgICAgICAgbGl0ZXJhbDogc3RyXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhblJlZ0V4cCgpIHtcbiAgICB2YXIgc3RhcnQsIGJvZHksIGZsYWdzLCB2YWx1ZTtcblxuICAgIGxvb2thaGVhZCA9IG51bGw7XG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBzdGFydCA9IGluZGV4O1xuXG4gICAgYm9keSA9IHNjYW5SZWdFeHBCb2R5KCk7XG4gICAgZmxhZ3MgPSBzY2FuUmVnRXhwRmxhZ3MoKTtcbiAgICB2YWx1ZSA9IHRlc3RSZWdFeHAoYm9keS52YWx1ZSwgZmxhZ3MudmFsdWUpO1xuXG4gICAgaWYgKGV4dHJhLnRva2VuaXplKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHJlZ2V4OiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjogYm9keS52YWx1ZSxcbiAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MudmFsdWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgICAgICByYW5nZTogW3N0YXJ0LCBpbmRleF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBsaXRlcmFsOiBib2R5LmxpdGVyYWwgKyBmbGFncy5saXRlcmFsLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHJlZ2V4OiB7XG4gICAgICAgICAgICBwYXR0ZXJuOiBib2R5LnZhbHVlLFxuICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RSZWdleCgpIHtcbiAgICB2YXIgcG9zLCBsb2MsIHJlZ2V4LCB0b2tlbjtcblxuICAgIHNraXBDb21tZW50KCk7XG5cbiAgICBwb3MgPSBpbmRleDtcbiAgICBsb2MgPSB7XG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJlZ2V4ID0gc2NhblJlZ0V4cCgpO1xuICAgIGxvYy5lbmQgPSB7XG4gICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICB9O1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoIWV4dHJhLnRva2VuaXplKSB7XG4gICAgICAgIC8vIFBvcCB0aGUgcHJldmlvdXMgdG9rZW4sIHdoaWNoIGlzIGxpa2VseSBcIi9cIiBvciBcIi89XCJcbiAgICAgICAgaWYgKGV4dHJhLnRva2Vucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0b2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodG9rZW4ucmFuZ2VbMF0gPT09IHBvcyAmJiB0b2tlbi50eXBlID09PSBcIlB1bmN0dWF0b3JcIikge1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gXCIvXCIgfHwgdG9rZW4udmFsdWUgPT09IFwiLz1cIikge1xuICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnMucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogXCJSZWd1bGFyRXhwcmVzc2lvblwiLFxuICAgICAgICAgICAgdmFsdWU6IHJlZ2V4LmxpdGVyYWwsXG4gICAgICAgICAgICByZWdleDogcmVnZXgucmVnZXgsXG4gICAgICAgICAgICByYW5nZTogW3BvcywgaW5kZXhdLFxuICAgICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2V4O1xufVxuXG5mdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKHRva2VuKSB7XG4gICAgcmV0dXJuIHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgfHxcbiAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCB8fFxuICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCB8fFxuICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbDtcbn1cblxuZnVuY3Rpb24gYWR2YW5jZVNsYXNoKCkge1xuICAgIHZhciBwcmV2VG9rZW4sXG4gICAgICAgIGNoZWNrVG9rZW47XG4gICAgLy8gVXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc3dlZXQuanMvd2lraS9kZXNpZ25cbiAgICBwcmV2VG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGlmICghcHJldlRva2VuKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgYmVmb3JlIHRoYXQ6IGl0IGNhbm5vdCBiZSBhIGRpdmlzaW9uLlxuICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgfVxuICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0gXCJQdW5jdHVhdG9yXCIpIHtcbiAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gXCJdXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09IFwiKVwiKSB7XG4gICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5QYXJlblRva2VuIC0gMV07XG4gICAgICAgICAgICBpZiAoY2hlY2tUb2tlbiAmJlxuICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuLnR5cGUgPT09IFwiS2V5d29yZFwiICYmXG4gICAgICAgICAgICAgICAgICAgIChjaGVja1Rva2VuLnZhbHVlID09PSBcImlmXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09IFwid2hpbGVcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gXCJmb3JcIiB8fFxuICAgICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gXCJ3aXRoXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICAgIC8vIERpdmlkaW5nIGEgZnVuY3Rpb24gYnkgYW55dGhpbmcgbWFrZXMgbGl0dGxlIHNlbnNlLFxuICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgdG8gY2hlY2sgZm9yIHRoYXQuXG4gICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10gJiZcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10udHlwZSA9PT0gXCJLZXl3b3JkXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBBbm9ueW1vdXMgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdO1xuICAgICAgICAgICAgICAgIGlmICghY2hlY2tUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdLnR5cGUgPT09IFwiS2V5d29yZFwiKSB7XG4gICAgICAgICAgICAgICAgLy8gTmFtZWQgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDVdO1xuICAgICAgICAgICAgICAgIGlmICghY2hlY2tUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrVG9rZW4gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiBpc1xuICAgICAgICAgICAgLy8gYSBkZWNsYXJhdGlvbiBvciBhbiBleHByZXNzaW9uLlxuICAgICAgICAgICAgaWYgKEZuRXhwclRva2Vucy5pbmRleE9mKGNoZWNrVG9rZW4udmFsdWUpID49IDApIHtcbiAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBleHByZXNzaW9uLlxuICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSXQgaXMgYSBkZWNsYXJhdGlvbi5cbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7XG4gICAgfVxuICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0gXCJLZXl3b3JkXCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpO1xuICAgIH1cbiAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbn1cblxuZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgICB2YXIgY2gsXG4gICAgICAgIGFsbG93SlNYID0gZXh0cmEuZWNtYUZlYXR1cmVzLmpzeCxcbiAgICAgICAgYWxsb3dUZW1wbGF0ZVN0cmluZ3MgPSBleHRyYS5lY21hRmVhdHVyZXMudGVtcGxhdGVTdHJpbmdzO1xuXG4gICAgLypcbiAgICAgKiBJZiBKU1ggaXNuJ3QgYWxsb3dlZCBvciBKU1ggaXMgYWxsb3dlZCBhbmQgd2UncmUgbm90IGluc2lkZSBhbiBKU1ggY2hpbGQsXG4gICAgICogdGhlbiBza2lwIGFueSBjb21tZW50cy5cbiAgICAgKi9cbiAgICBpZiAoIWFsbG93SlNYIHx8ICFzdGF0ZS5pbkpTWENoaWxkKSB7XG4gICAgICAgIHNraXBDb21tZW50KCk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW4uRU9GLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LFxuICAgICAgICAgICAgcmFuZ2U6IFtpbmRleCwgaW5kZXhdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gaWYgaW5zaWRlIGFuIEpTWCBjaGlsZCwgdGhlbiBhYm9ydCByZWd1bGFyIHRva2VuaXphdGlvblxuICAgIGlmIChhbGxvd0pTWCAmJiBzdGF0ZS5pbkpTWENoaWxkKSB7XG4gICAgICAgIHJldHVybiBhZHZhbmNlSlNYQ2hpbGQoKTtcbiAgICB9XG5cbiAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAgIC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFuZCA7XG4gICAgaWYgKGNoID09PSAweDI4IHx8IGNoID09PSAweDI5IHx8IGNoID09PSAweDNCKSB7XG4gICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xuICAgIH1cblxuICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0cyB3aXRoIHNpbmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVvdGUgKFUrMDAyMikuXG4gICAgaWYgKGNoID09PSAweDI3IHx8IGNoID09PSAweDIyKSB7XG4gICAgICAgIGlmIChhbGxvd0pTWCAmJiBzdGF0ZS5pbkpTWFRhZykge1xuICAgICAgICAgICAgcmV0dXJuIHNjYW5KU1hTdHJpbmdMaXRlcmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2NhblN0cmluZ0xpdGVyYWwoKTtcbiAgICB9XG5cbiAgICBpZiAoYWxsb3dKU1ggJiYgc3RhdGUuaW5KU1hUYWcgJiYgc3ludGF4LmlzSlNYSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgICByZXR1cm4gc2NhbkpTWElkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICAvLyBUZW1wbGF0ZSBzdHJpbmdzIHN0YXJ0IHdpdGggYmFja3RpY2sgKFUrMDA5Nikgb3IgY2xvc2luZyBjdXJseSBicmFjZSAoMTI1KSBhbmQgYmFja3RpY2suXG4gICAgaWYgKGFsbG93VGVtcGxhdGVTdHJpbmdzKSB7XG5cbiAgICAgICAgLy8gdGVtcGxhdGUgc3RyaW5ncyBzdGFydCB3aXRoIGJhY2t0aWNrICg5Nikgb3Igb3BlbiBjdXJseSAoMTI1KSBidXQgb25seSBpZiB0aGUgb3BlblxuICAgICAgICAvLyBjdXJseSBjbG9zZXMgYSBwcmV2aW91c2x5IG9wZW5lZCBjdXJseSBmcm9tIGEgdGVtcGxhdGUuXG4gICAgICAgIGlmIChjaCA9PT0gOTYgfHwgKGNoID09PSAxMjUgJiYgc3RhdGUuY3VybHlTdGFja1tzdGF0ZS5jdXJseVN0YWNrLmxlbmd0aCAtIDFdID09PSBcInRlbXBsYXRlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhblRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuICAgICAgICByZXR1cm4gc2NhbklkZW50aWZpZXIoKTtcbiAgICB9XG5cbiAgICAvLyBEb3QgKC4pIFUrMDAyRSBjYW4gYWxzbyBzdGFydCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaGVuY2UgdGhlIG5lZWRcbiAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuXG4gICAgaWYgKGNoID09PSAweDJFKSB7XG4gICAgICAgIGlmIChzeW50YXguaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTtcbiAgICB9XG5cbiAgICBpZiAoc3ludGF4LmlzRGVjaW1hbERpZ2l0KGNoKSkge1xuICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7XG4gICAgfVxuXG4gICAgLy8gU2xhc2ggKC8pIFUrMDAyRiBjYW4gYWxzbyBzdGFydCBhIHJlZ2V4LlxuICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjaCA9PT0gMHgyRikge1xuICAgICAgICByZXR1cm4gYWR2YW5jZVNsYXNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RUb2tlbigpIHtcbiAgICB2YXIgbG9jLCB0b2tlbiwgcmFuZ2UsIHZhbHVlLCBlbnRyeSxcbiAgICAgICAgYWxsb3dKU1ggPSBleHRyYS5lY21hRmVhdHVyZXMuanN4O1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoIWFsbG93SlNYIHx8ICFzdGF0ZS5pbkpTWENoaWxkKSB7XG4gICAgICAgIHNraXBDb21tZW50KCk7XG4gICAgfVxuXG4gICAgbG9jID0ge1xuICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnRcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB0b2tlbiA9IGFkdmFuY2UoKTtcbiAgICBsb2MuZW5kID0ge1xuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgfTtcblxuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgcmFuZ2UgPSBbdG9rZW4ucmFuZ2VbMF0sIHRva2VuLnJhbmdlWzFdXTtcbiAgICAgICAgdmFsdWUgPSBzb3VyY2Uuc2xpY2UodG9rZW4ucmFuZ2VbMF0sIHRva2VuLnJhbmdlWzFdKTtcbiAgICAgICAgZW50cnkgPSB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlbk5hbWVbdG9rZW4udHlwZV0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICByYW5nZTogcmFuZ2UsXG4gICAgICAgICAgICBsb2M6IGxvY1xuICAgICAgICB9O1xuICAgICAgICBpZiAodG9rZW4ucmVnZXgpIHtcbiAgICAgICAgICAgIGVudHJ5LnJlZ2V4ID0ge1xuICAgICAgICAgICAgICAgIHBhdHRlcm46IHRva2VuLnJlZ2V4LnBhdHRlcm4sXG4gICAgICAgICAgICAgICAgZmxhZ3M6IHRva2VuLnJlZ2V4LmZsYWdzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKGVudHJ5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG59XG5cbmZ1bmN0aW9uIGxleCgpIHtcbiAgICB2YXIgdG9rZW47XG5cbiAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICBpbmRleCA9IHRva2VuLnJhbmdlWzFdO1xuICAgIGxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVyO1xuICAgIGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDtcblxuICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpO1xuXG4gICAgaW5kZXggPSB0b2tlbi5yYW5nZVsxXTtcbiAgICBsaW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICBsaW5lU3RhcnQgPSB0b2tlbi5saW5lU3RhcnQ7XG5cbiAgICByZXR1cm4gdG9rZW47XG59XG5cbmZ1bmN0aW9uIHBlZWsoKSB7XG4gICAgdmFyIHBvcyxcbiAgICAgICAgbGluZSxcbiAgICAgICAgc3RhcnQ7XG5cbiAgICBwb3MgPSBpbmRleDtcbiAgICBsaW5lID0gbGluZU51bWJlcjtcbiAgICBzdGFydCA9IGxpbmVTdGFydDtcblxuICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpO1xuXG4gICAgaW5kZXggPSBwb3M7XG4gICAgbGluZU51bWJlciA9IGxpbmU7XG4gICAgbGluZVN0YXJ0ID0gc3RhcnQ7XG59XG5cbmZ1bmN0aW9uIGxvb2thaGVhZDIoKSB7XG4gICAgdmFyIGFkdiwgcG9zLCBsaW5lLCBzdGFydCwgcmVzdWx0O1xuXG4gICAgLy8gSWYgd2UgYXJlIGNvbGxlY3RpbmcgdGhlIHRva2VucywgZG9uJ3QgZ3JhYiB0aGUgbmV4dCBvbmUgeWV0LlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgYWR2ID0gKHR5cGVvZiBleHRyYS5hZHZhbmNlID09PSBcImZ1bmN0aW9uXCIpID8gZXh0cmEuYWR2YW5jZSA6IGFkdmFuY2U7XG5cbiAgICBwb3MgPSBpbmRleDtcbiAgICBsaW5lID0gbGluZU51bWJlcjtcbiAgICBzdGFydCA9IGxpbmVTdGFydDtcblxuICAgIC8vIFNjYW4gZm9yIHRoZSBuZXh0IGltbWVkaWF0ZSB0b2tlbi5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAobG9va2FoZWFkID09PSBudWxsKSB7XG4gICAgICAgIGxvb2thaGVhZCA9IGFkdigpO1xuICAgIH1cbiAgICBpbmRleCA9IGxvb2thaGVhZC5yYW5nZVsxXTtcbiAgICBsaW5lTnVtYmVyID0gbG9va2FoZWFkLmxpbmVOdW1iZXI7XG4gICAgbGluZVN0YXJ0ID0gbG9va2FoZWFkLmxpbmVTdGFydDtcblxuICAgIC8vIEdyYWIgdGhlIHRva2VuIHJpZ2h0IGFmdGVyLlxuICAgIHJlc3VsdCA9IGFkdigpO1xuICAgIGluZGV4ID0gcG9zO1xuICAgIGxpbmVOdW1iZXIgPSBsaW5lO1xuICAgIGxpbmVTdGFydCA9IHN0YXJ0O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSlNYXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRRdWFsaWZpZWRKU1hOYW1lKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkpTWElkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdC5uYW1lO1xuICAgIH1cbiAgICBpZiAob2JqZWN0LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5KU1hOYW1lc3BhY2VkTmFtZSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0Lm5hbWVzcGFjZS5uYW1lICsgXCI6XCIgKyBvYmplY3QubmFtZS5uYW1lO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChvYmplY3QudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkpTWE1lbWJlckV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldFF1YWxpZmllZEpTWE5hbWUob2JqZWN0Lm9iamVjdCkgKyBcIi5cIiArXG4gICAgICAgICAgICBnZXRRdWFsaWZpZWRKU1hOYW1lKG9iamVjdC5wcm9wZXJ0eSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB0aHJvd1VuZXhwZWN0ZWQob2JqZWN0KTtcbn1cblxuZnVuY3Rpb24gc2NhbkpTWElkZW50aWZpZXIoKSB7XG4gICAgdmFyIGNoLCBzdGFydCwgdmFsdWUgPSBcIlwiO1xuXG4gICAgc3RhcnQgPSBpbmRleDtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIGlmICghc3ludGF4LmlzSlNYSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSArPSBzb3VyY2VbaW5kZXgrK107XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uSlNYSWRlbnRpZmllcixcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgICAgcmFuZ2U6IFtzdGFydCwgaW5kZXhdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2NhbkpTWEVudGl0eSgpIHtcbiAgICB2YXIgY2gsIHN0ciA9IFwiXCIsIHN0YXJ0ID0gaW5kZXgsIGNvdW50ID0gMCwgY29kZTtcbiAgICBjaCA9IHNvdXJjZVtpbmRleF07XG4gICAgYXNzZXJ0KGNoID09PSBcIiZcIiwgXCJFbnRpdHkgbXVzdCBzdGFydCB3aXRoIGFuIGFtcGVyc2FuZFwiKTtcbiAgICBpbmRleCsrO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiBjb3VudCsrIDwgMTApIHtcbiAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107XG4gICAgICAgIGlmIChjaCA9PT0gXCI7XCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBjaDtcbiAgICB9XG5cbiAgICAvLyBXZWxsLWZvcm1lZCBlbnRpdHkgKGVuZGluZyB3YXMgZm91bmQpLlxuICAgIGlmIChjaCA9PT0gXCI7XCIpIHtcbiAgICAgICAgLy8gTnVtZXJpYyBlbnRpdHkuXG4gICAgICAgIGlmIChzdHJbMF0gPT09IFwiI1wiKSB7XG4gICAgICAgICAgICBpZiAoc3RyWzFdID09PSBcInhcIikge1xuICAgICAgICAgICAgICAgIGNvZGUgPSArKFwiMFwiICsgc3RyLnN1YnN0cigxKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIGxlYWRpbmcgemVyb3MgaW4gb3JkZXIgdG8gYXZvaWQgdHJlYXRpbmcgYXMgb2N0YWwgaW4gb2xkIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgIGNvZGUgPSArc3RyLnN1YnN0cigxKS5yZXBsYWNlKFJlZ2V4LkxlYWRpbmdaZXJvcywgXCJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNOYU4oY29kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgfSBlbHNlIGlmIChYSFRNTEVudGl0aWVzW3N0cl0pIHtcbiAgICAgICAgICAgIHJldHVybiBYSFRNTEVudGl0aWVzW3N0cl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmVhdCBub24tZW50aXR5IHNlcXVlbmNlcyBhcyByZWd1bGFyIHRleHQuXG4gICAgaW5kZXggPSBzdGFydCArIDE7XG4gICAgcmV0dXJuIFwiJlwiO1xufVxuXG5mdW5jdGlvbiBzY2FuSlNYVGV4dChzdG9wQ2hhcnMpIHtcbiAgICB2YXIgY2gsIHN0ciA9IFwiXCIsIHN0YXJ0O1xuICAgIHN0YXJ0ID0gaW5kZXg7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNoID0gc291cmNlW2luZGV4XTtcbiAgICAgICAgaWYgKHN0b3BDaGFycy5pbmRleE9mKGNoKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaCA9PT0gXCImXCIpIHtcbiAgICAgICAgICAgIHN0ciArPSBzY2FuSlNYRW50aXR5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgaWYgKGNoID09PSBcIlxcclwiICYmIHNvdXJjZVtpbmRleF0gPT09IFwiXFxuXCIpIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3ludGF4LmlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHIgKz0gY2g7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogVG9rZW4uSlNYVGV4dCxcbiAgICAgICAgdmFsdWU6IHN0cixcbiAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsXG4gICAgICAgIHJhbmdlOiBbc3RhcnQsIGluZGV4XVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNjYW5KU1hTdHJpbmdMaXRlcmFsKCkge1xuICAgIHZhciBpbm5lclRva2VuLCBxdW90ZSwgc3RhcnQ7XG5cbiAgICBxdW90ZSA9IHNvdXJjZVtpbmRleF07XG4gICAgYXNzZXJ0KChxdW90ZSA9PT0gXCJcXFwiXCIgfHwgcXVvdGUgPT09IFwiJ1wiKSxcbiAgICAgICAgXCJTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRoIGEgcXVvdGVcIik7XG5cbiAgICBzdGFydCA9IGluZGV4O1xuICAgICsraW5kZXg7XG5cbiAgICBpbm5lclRva2VuID0gc2NhbkpTWFRleHQoW3F1b3RlXSk7XG5cbiAgICBpZiAocXVvdGUgIT09IHNvdXJjZVtpbmRleF0pIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIklMTEVHQUxcIik7XG4gICAgfVxuXG4gICAgKytpbmRleDtcblxuICAgIGlubmVyVG9rZW4ucmFuZ2UgPSBbc3RhcnQsIGluZGV4XTtcblxuICAgIHJldHVybiBpbm5lclRva2VuO1xufVxuXG4vKlxuICogQmV0d2VlbiBKU1ggb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIChlLmcuIDxmb28+SEVSRTwvZm9vPiksIGFueXRoaW5nIHRoYXRcbiAqIGlzIG5vdCBhbm90aGVyIEpTWCB0YWcgYW5kIGlzIG5vdCBhbiBleHByZXNzaW9uIHdyYXBwZWQgYnkge30gaXMgdGV4dC5cbiAqL1xuZnVuY3Rpb24gYWR2YW5jZUpTWENoaWxkKCkge1xuICAgIHZhciBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTtcblxuICAgIC8vIHsgKDEyMykgYW5kIDwgKDYwKVxuICAgIGlmIChjaCAhPT0gMTIzICYmIGNoICE9PSA2MCkge1xuICAgICAgICByZXR1cm4gc2NhbkpTWFRleHQoW1wiPFwiLCBcIntcIl0pO1xuICAgIH1cblxuICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWElkZW50aWZpZXIoKSB7XG4gICAgdmFyIHRva2VuLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uSlNYSWRlbnRpZmllcikge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG5cbiAgICB0b2tlbiA9IGxleCgpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWElkZW50aWZpZXIodG9rZW4udmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hOYW1lc3BhY2VkTmFtZSgpIHtcbiAgICB2YXIgbmFtZXNwYWNlLCBuYW1lLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG5hbWVzcGFjZSA9IHBhcnNlSlNYSWRlbnRpZmllcigpO1xuICAgIGV4cGVjdChcIjpcIik7XG4gICAgbmFtZSA9IHBhcnNlSlNYSWRlbnRpZmllcigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYTmFtZXNwYWNlZE5hbWUobmFtZXNwYWNlLCBuYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYTWVtYmVyRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGV4cHIgPSBwYXJzZUpTWElkZW50aWZpZXIoKTtcblxuICAgIHdoaWxlIChtYXRjaChcIi5cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWE1lbWJlckV4cHJlc3Npb24oZXhwciwgcGFyc2VKU1hJZGVudGlmaWVyKCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VKU1hFbGVtZW50TmFtZSgpIHtcbiAgICBpZiAobG9va2FoZWFkMigpLnZhbHVlID09PSBcIjpcIikge1xuICAgICAgICByZXR1cm4gcGFyc2VKU1hOYW1lc3BhY2VkTmFtZSgpO1xuICAgIH1cbiAgICBpZiAobG9va2FoZWFkMigpLnZhbHVlID09PSBcIi5cIikge1xuICAgICAgICByZXR1cm4gcGFyc2VKU1hNZW1iZXJFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlSlNYSWRlbnRpZmllcigpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEF0dHJpYnV0ZU5hbWUoKSB7XG4gICAgaWYgKGxvb2thaGVhZDIoKS52YWx1ZSA9PT0gXCI6XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNYTmFtZXNwYWNlZE5hbWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VKU1hJZGVudGlmaWVyKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQXR0cmlidXRlVmFsdWUoKSB7XG4gICAgdmFyIHZhbHVlLCBtYXJrZXI7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpO1xuICAgICAgICBpZiAodmFsdWUuZXhwcmVzc2lvbi50eXBlID09PSBhc3ROb2RlVHlwZXMuSlNYRW1wdHlFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIFwiSlNYIGF0dHJpYnV0ZXMgbXVzdCBvbmx5IGJlIGFzc2lnbmVkIGEgbm9uLWVtcHR5IFwiICtcbiAgICAgICAgICAgICAgICAgICAgXCJleHByZXNzaW9uXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwiPFwiKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSlNYRWxlbWVudCgpO1xuICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLkpTWFRleHQpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIHZhbHVlID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZShsZXgoKSwgc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZEpTWEF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEVtcHR5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlUHJlc2VydmVXaGl0ZXNwYWNlKCk7XG4gICAgd2hpbGUgKHNvdXJjZS5jaGFyQXQoaW5kZXgpICE9PSBcIn1cIikge1xuICAgICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hFbXB0eUV4cHJlc3Npb24oKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpIHtcbiAgICB2YXIgZXhwcmVzc2lvbiwgb3JpZ0luSlNYQ2hpbGQsIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYVGFnID0gZmFsc2U7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgaWYgKG1hdGNoKFwifVwiKSkge1xuICAgICAgICBleHByZXNzaW9uID0gcGFyc2VKU1hFbXB0eUV4cHJlc3Npb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgIHN0YXRlLmluSlNYVGFnID0gb3JpZ0luSlNYVGFnO1xuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEV4cHJlc3Npb25Db250YWluZXIoZXhwcmVzc2lvbikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWFNwcmVhZEF0dHJpYnV0ZSgpIHtcbiAgICB2YXIgZXhwcmVzc2lvbiwgb3JpZ0luSlNYQ2hpbGQsIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYVGFnID0gZmFsc2U7XG4gICAgc3RhdGUuaW5KU1hTcHJlYWRBdHRyaWJ1dGUgPSB0cnVlO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcbiAgICBleHBlY3QoXCIuLi5cIik7XG5cbiAgICBzdGF0ZS5pbkpTWFNwcmVhZEF0dHJpYnV0ZSA9IGZhbHNlO1xuXG4gICAgZXhwcmVzc2lvbiA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblxuICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBvcmlnSW5KU1hDaGlsZDtcbiAgICBzdGF0ZS5pbkpTWFRhZyA9IG9yaWdJbkpTWFRhZztcblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVKU1hTcHJlYWRBdHRyaWJ1dGUoZXhwcmVzc2lvbikpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWEF0dHJpYnV0ZSgpIHtcbiAgICB2YXIgbmFtZSwgbWFya2VyO1xuXG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VKU1hTcHJlYWRBdHRyaWJ1dGUoKTtcbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIG5hbWUgPSBwYXJzZUpTWEF0dHJpYnV0ZU5hbWUoKTtcblxuICAgIC8vIEhUTUwgZW1wdHkgYXR0cmlidXRlXG4gICAgaWYgKG1hdGNoKFwiPVwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYQXR0cmlidXRlKG5hbWUsIHBhcnNlSlNYQXR0cmlidXRlVmFsdWUoKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEF0dHJpYnV0ZShuYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYQ2hpbGQoKSB7XG4gICAgdmFyIHRva2VuLCBtYXJrZXI7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICB0b2tlbiA9IHBhcnNlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcigpO1xuICAgIH0gZWxzZSBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLkpTWFRleHQpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlUHJlc2VydmVXaGl0ZXNwYWNlKCk7XG4gICAgICAgIHRva2VuID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZShsZXgoKSwgc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW4gPSBwYXJzZUpTWEVsZW1lbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWENsb3NpbmdFbGVtZW50KCkge1xuICAgIHZhciBuYW1lLCBvcmlnSW5KU1hDaGlsZCwgb3JpZ0luSlNYVGFnLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlO1xuICAgIHN0YXRlLmluSlNYVGFnID0gdHJ1ZTtcbiAgICBleHBlY3QoXCI8XCIpO1xuICAgIGV4cGVjdChcIi9cIik7XG4gICAgbmFtZSA9IHBhcnNlSlNYRWxlbWVudE5hbWUoKTtcbiAgICAvLyBCZWNhdXNlIGFkdmFuY2UoKSAoY2FsbGVkIGJ5IGxleCgpIGNhbGxlZCBieSBleHBlY3QoKSkgZXhwZWN0cyB0aGVyZVxuICAgIC8vIHRvIGJlIGEgdmFsaWQgdG9rZW4gYWZ0ZXIgPiwgaXQgbmVlZHMgdG8ga25vdyB3aGV0aGVyIHRvIGxvb2sgZm9yIGFcbiAgICAvLyBzdGFuZGFyZCBKUyB0b2tlbiBvciBhbiBKU1ggdGV4dCBub2RlXG4gICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgIHN0YXRlLmluSlNYVGFnID0gb3JpZ0luSlNYVGFnO1xuICAgIGV4cGVjdChcIj5cIik7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSlNYQ2xvc2luZ0VsZW1lbnQobmFtZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpTWE9wZW5pbmdFbGVtZW50KCkge1xuICAgIHZhciBuYW1lLCBhdHRyaWJ1dGVzID0gW10sIHNlbGZDbG9zaW5nID0gZmFsc2UsIG9yaWdJbkpTWENoaWxkLFxuICAgICAgICBvcmlnSW5KU1hUYWcsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgb3JpZ0luSlNYQ2hpbGQgPSBzdGF0ZS5pbkpTWENoaWxkO1xuICAgIG9yaWdJbkpTWFRhZyA9IHN0YXRlLmluSlNYVGFnO1xuICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBmYWxzZTtcbiAgICBzdGF0ZS5pbkpTWFRhZyA9IHRydWU7XG5cbiAgICBleHBlY3QoXCI8XCIpO1xuXG4gICAgbmFtZSA9IHBhcnNlSlNYRWxlbWVudE5hbWUoKTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJlxuICAgICAgICAgICAgbG9va2FoZWFkLnZhbHVlICE9PSBcIi9cIiAmJlxuICAgICAgICAgICAgbG9va2FoZWFkLnZhbHVlICE9PSBcIj5cIikge1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2gocGFyc2VKU1hBdHRyaWJ1dGUoKSk7XG4gICAgfVxuXG4gICAgc3RhdGUuaW5KU1hUYWcgPSBvcmlnSW5KU1hUYWc7XG5cbiAgICBpZiAobG9va2FoZWFkLnZhbHVlID09PSBcIi9cIikge1xuICAgICAgICBleHBlY3QoXCIvXCIpO1xuICAgICAgICAvLyBCZWNhdXNlIGFkdmFuY2UoKSAoY2FsbGVkIGJ5IGxleCgpIGNhbGxlZCBieSBleHBlY3QoKSkgZXhwZWN0c1xuICAgICAgICAvLyB0aGVyZSB0byBiZSBhIHZhbGlkIHRva2VuIGFmdGVyID4sIGl0IG5lZWRzIHRvIGtub3cgd2hldGhlciB0b1xuICAgICAgICAvLyBsb29rIGZvciBhIHN0YW5kYXJkIEpTIHRva2VuIG9yIGFuIEpTWCB0ZXh0IG5vZGVcbiAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IG9yaWdJbkpTWENoaWxkO1xuICAgICAgICBleHBlY3QoXCI+XCIpO1xuICAgICAgICBzZWxmQ2xvc2luZyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IHRydWU7XG4gICAgICAgIGV4cGVjdChcIj5cIik7XG4gICAgfVxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWE9wZW5pbmdFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSlNYRWxlbWVudCgpIHtcbiAgICB2YXIgb3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdFbGVtZW50ID0gbnVsbCwgY2hpbGRyZW4gPSBbXSwgb3JpZ0luSlNYQ2hpbGQsIG9yaWdJbkpTWFRhZywgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBvcmlnSW5KU1hDaGlsZCA9IHN0YXRlLmluSlNYQ2hpbGQ7XG4gICAgb3JpZ0luSlNYVGFnID0gc3RhdGUuaW5KU1hUYWc7XG4gICAgb3BlbmluZ0VsZW1lbnQgPSBwYXJzZUpTWE9wZW5pbmdFbGVtZW50KCk7XG5cbiAgICBpZiAoIW9wZW5pbmdFbGVtZW50LnNlbGZDbG9zaW5nKSB7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgc3RhdGUuaW5KU1hDaGlsZCA9IGZhbHNlOyAvLyBDYWxsIGxvb2thaGVhZDIoKSB3aXRoIGluSlNYQ2hpbGQgPSBmYWxzZSBiZWNhdXNlIDwvIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBpbiB0aGUgY2hpbGRcbiAgICAgICAgICAgIGlmIChsb29rYWhlYWQudmFsdWUgPT09IFwiPFwiICYmIGxvb2thaGVhZDIoKS52YWx1ZSA9PT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRlLmluSlNYQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChwYXJzZUpTWENoaWxkKCkpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmluSlNYQ2hpbGQgPSBvcmlnSW5KU1hDaGlsZDtcbiAgICAgICAgc3RhdGUuaW5KU1hUYWcgPSBvcmlnSW5KU1hUYWc7XG4gICAgICAgIGNsb3NpbmdFbGVtZW50ID0gcGFyc2VKU1hDbG9zaW5nRWxlbWVudCgpO1xuICAgICAgICBpZiAoZ2V0UXVhbGlmaWVkSlNYTmFtZShjbG9zaW5nRWxlbWVudC5uYW1lKSAhPT0gZ2V0UXVhbGlmaWVkSlNYTmFtZShvcGVuaW5nRWxlbWVudC5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuRXhwZWN0ZWRKU1hDbG9zaW5nVGFnLCBnZXRRdWFsaWZpZWRKU1hOYW1lKG9wZW5pbmdFbGVtZW50Lm5hbWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgICogV2hlbiAoZXJyb25lb3VzbHkpIHdyaXRpbmcgdHdvIGFkamFjZW50IHRhZ3MgbGlrZVxuICAgICAqXG4gICAgICogICAgIHZhciB4ID0gPGRpdj5vbmU8L2Rpdj48ZGl2PnR3bzwvZGl2PjtcbiAgICAgKlxuICAgICAqIHRoZSBkZWZhdWx0IGVycm9yIG1lc3NhZ2UgaXMgYSBiaXQgaW5jb21wcmVoZW5zaWJsZS4gU2luY2UgaXRcInNcbiAgICAgKiByYXJlbHkgKG5ldmVyPykgdXNlZnVsIHRvIHdyaXRlIGEgbGVzcy10aGFuIHNpZ24gYWZ0ZXIgYW4gSlNYXG4gICAgICogZWxlbWVudCwgd2UgZGlzYWxsb3cgaXQgaGVyZSBpbiB0aGUgcGFyc2VyIGluIG9yZGVyIHRvIHByb3ZpZGUgYVxuICAgICAqIGJldHRlciBlcnJvciBtZXNzYWdlLiAoSW4gdGhlIHJhcmUgY2FzZSB0aGF0IHRoZSBsZXNzLXRoYW4gb3BlcmF0b3JcbiAgICAgKiB3YXMgaW50ZW5kZWQsIHRoZSBsZWZ0IHRhZyBjYW4gYmUgd3JhcHBlZCBpbiBwYXJlbnRoZXNlcy4pXG4gICAgICovXG4gICAgaWYgKCFvcmlnSW5KU1hDaGlsZCAmJiBtYXRjaChcIjxcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLkFkamFjZW50SlNYRWxlbWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUpTWEVsZW1lbnQob3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdFbGVtZW50LCBjaGlsZHJlbikpO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9jYXRpb24gbWFya2Vyc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBcHBsaWVzIGxvY2F0aW9uIGluZm9ybWF0aW9uIHRvIHRoZSBnaXZlbiBub2RlIGJ5IHVzaW5nIHRoZSBnaXZlbiBtYXJrZXIuXG4gKiBUaGUgbWFya2VyIGluZGljYXRlcyB0aGUgcG9pbnQgYXQgd2hpY2ggdGhlIG5vZGUgaXMgc2FpZCB0byBoYXZlIHRvIGJlZ3VuXG4gKiBpbiB0aGUgc291cmNlIGNvZGUuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFya2VyIFRoZSBtYXJrZXIgdG8gdXNlIGZvciB0aGUgbm9kZS5cbiAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gYXBwbHkgbG9jYXRpb24gaW5mb3JtYXRpb24gdG8uXG4gKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIG5vZGUgdGhhdCB3YXMgcGFzc2VkIGluLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbWFya2VyQXBwbHkobWFya2VyLCBub2RlKSB7XG5cbiAgICAvLyBhZGQgcmFuZ2UgaW5mb3JtYXRpb24gdG8gdGhlIG5vZGUgaWYgcHJlc2VudFxuICAgIGlmIChleHRyYS5yYW5nZSkge1xuICAgICAgICBub2RlLnJhbmdlID0gW21hcmtlci5vZmZzZXQsIGluZGV4XTtcbiAgICB9XG5cbiAgICAvLyBhZGQgbG9jYXRpb24gaW5mb3JtYXRpb24gdGhlIG5vZGUgaWYgcHJlc2VudFxuICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgbm9kZS5sb2MgPSB7XG4gICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgIGxpbmU6IG1hcmtlci5saW5lLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogbWFya2VyLmNvbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBBdHRhY2ggZXh0cmEuc291cmNlIGluZm9ybWF0aW9uIHRvIHRoZSBsb2NhdGlvbiwgaWYgcHJlc2VudFxuICAgICAgICBpZiAoZXh0cmEuc291cmNlKSB7XG4gICAgICAgICAgICBub2RlLmxvYy5zb3VyY2UgPSBleHRyYS5zb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhdHRhY2ggbGVhZGluZyBhbmQgdHJhaWxpbmcgY29tbWVudHMgaWYgcmVxdWVzdGVkXG4gICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHtcbiAgICAgICAgY29tbWVudEF0dGFjaG1lbnQucHJvY2Vzc0NvbW1lbnQobm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxvY2F0aW9uIG1hcmtlciBpbiB0aGUgc291cmNlIGNvZGUuIExvY2F0aW9uIG1hcmtlcnMgYXJlIHVzZWQgZm9yXG4gKiB0cmFja2luZyB3aGVyZSB0b2tlbnMgYW5kIG5vZGVzIGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBBIG1hcmtlciBvYmplY3Qgb3IgdW5kZWZpbmVkIGlmIHRoZSBwYXJzZXIgZG9lc24ndCBoYXZlXG4gKiAgICAgIGFueSBsb2NhdGlvbiBpbmZvcm1hdGlvbi5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1hcmtlckNyZWF0ZSgpIHtcblxuICAgIGlmICghZXh0cmEubG9jICYmICFleHRyYS5yYW5nZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHNraXBDb21tZW50KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBvZmZzZXQ6IGluZGV4LFxuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2w6IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbG9jYXRpb24gbWFya2VyIGluIHRoZSBzb3VyY2UgY29kZS4gTG9jYXRpb24gbWFya2VycyBhcmUgdXNlZCBmb3JcbiAqIHRyYWNraW5nIHdoZXJlIHRva2VucyBhbmQgbm9kZXMgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS4gVGhpcyBtZXRob2RcbiAqIGRvZXNuJ3Qgc2tpcCBjb21tZW50cyBvciBleHRyYSB3aGl0ZXNwYWNlIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgSlNYLlxuICogQHJldHVybnMge09iamVjdH0gQSBtYXJrZXIgb2JqZWN0IG9yIHVuZGVmaW5lZCBpZiB0aGUgcGFyc2VyIGRvZXNuJ3QgaGF2ZVxuICogICAgICBhbnkgbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYXJrZXJDcmVhdGVQcmVzZXJ2ZVdoaXRlc3BhY2UoKSB7XG5cbiAgICBpZiAoIWV4dHJhLmxvYyAmJiAhZXh0cmEucmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBvZmZzZXQ6IGluZGV4LFxuICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLFxuICAgICAgICBjb2w6IGluZGV4IC0gbGluZVN0YXJ0XG4gICAgfTtcbn1cblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ludGF4IFRyZWUgRGVsZWdhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGEgbGluZSB0ZXJtaW5hdG9yIGJlZm9yZSB0aGUgbmV4dCB0b2tlbi5cblxuZnVuY3Rpb24gcGVla0xpbmVUZXJtaW5hdG9yKCkge1xuICAgIHZhciBwb3MsIGxpbmUsIHN0YXJ0LCBmb3VuZDtcblxuICAgIHBvcyA9IGluZGV4O1xuICAgIGxpbmUgPSBsaW5lTnVtYmVyO1xuICAgIHN0YXJ0ID0gbGluZVN0YXJ0O1xuICAgIHNraXBDb21tZW50KCk7XG4gICAgZm91bmQgPSBsaW5lTnVtYmVyICE9PSBsaW5lO1xuICAgIGluZGV4ID0gcG9zO1xuICAgIGxpbmVOdW1iZXIgPSBsaW5lO1xuICAgIGxpbmVTdGFydCA9IHN0YXJ0O1xuXG4gICAgcmV0dXJuIGZvdW5kO1xufVxuXG4vLyBUaHJvdyBhbiBleGNlcHRpb25cblxuZnVuY3Rpb24gdGhyb3dFcnJvcih0b2tlbiwgbWVzc2FnZUZvcm1hdCkge1xuXG4gICAgdmFyIGVycm9yLFxuICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSxcbiAgICAgICAgbXNnID0gbWVzc2FnZUZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgLyUoXFxkKS9nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKHdob2xlLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIGFzc2VydChpbmRleCA8IGFyZ3MubGVuZ3RoLCBcIk1lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2VcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgaWYgKHR5cGVvZiB0b2tlbi5saW5lTnVtYmVyID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiTGluZSBcIiArIHRva2VuLmxpbmVOdW1iZXIgKyBcIjogXCIgKyBtc2cpO1xuICAgICAgICBlcnJvci5pbmRleCA9IHRva2VuLnJhbmdlWzBdO1xuICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICAgICAgZXJyb3IuY29sdW1uID0gdG9rZW4ucmFuZ2VbMF0gLSB0b2tlbi5saW5lU3RhcnQgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiTGluZSBcIiArIGxpbmVOdW1iZXIgKyBcIjogXCIgKyBtc2cpO1xuICAgICAgICBlcnJvci5pbmRleCA9IGluZGV4O1xuICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gbGluZU51bWJlcjtcbiAgICAgICAgZXJyb3IuY29sdW1uID0gaW5kZXggLSBsaW5lU3RhcnQgKyAxO1xuICAgIH1cblxuICAgIGVycm9yLmRlc2NyaXB0aW9uID0gbXNnO1xuICAgIHRocm93IGVycm9yO1xufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yVG9sZXJhbnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhyb3dFcnJvci5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGV4dHJhLmVycm9ycykge1xuICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2goZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbi8vIFRocm93IGFuIGV4Y2VwdGlvbiBiZWNhdXNlIG9mIHRoZSB0b2tlbi5cblxuZnVuY3Rpb24gdGhyb3dVbmV4cGVjdGVkKHRva2VuKSB7XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1MpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkge1xuICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkTnVtYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5KU1hUZXh0KSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRTdHJpbmcpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVyKTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBpZiAoc3ludGF4LmlzRnV0dXJlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFJlc2VydmVkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgc3ludGF4LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSwgZXh0cmEuZWNtYUZlYXR1cmVzKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSkge1xuICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVGVtcGxhdGUsIHRva2VuLnZhbHVlLnJhdyk7XG4gICAgfVxuXG4gICAgLy8gQm9vbGVhbkxpdGVyYWwsIE51bGxMaXRlcmFsLCBvciBQdW5jdHVhdG9yLlxuICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpO1xufVxuXG4vLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLlxuLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uXG5cbmZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkge1xuICAgIHZhciB0b2tlbiA9IGxleCgpO1xuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yIHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgIH1cbn1cblxuLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQga2V5d29yZC5cbi8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLlxuXG5mdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtleXdvcmQpIHtcbiAgICB2YXIgdG9rZW4gPSBsZXgoKTtcbiAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29yZCkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgIH1cbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0dWF0b3IuXG5cbmZ1bmN0aW9uIG1hdGNoKHZhbHVlKSB7XG4gICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gdmFsdWU7XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBrZXl3b3JkXG5cbmZ1bmN0aW9uIG1hdGNoS2V5d29yZChrZXl3b3JkKSB7XG4gICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDtcbn1cblxuLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGNvbnRleHR1YWwga2V5d29yZFxuLy8gKHdoZXJlIGFuIGlkZW50aWZpZXIgaXMgc29tZXRpbWVzIGEga2V5d29yZCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQpXG5cbmZ1bmN0aW9uIG1hdGNoQ29udGV4dHVhbEtleXdvcmQoa2V5d29yZCkge1xuICAgIHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciAmJiBsb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3JcblxuZnVuY3Rpb24gbWF0Y2hBc3NpZ24oKSB7XG4gICAgdmFyIG9wO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb3AgPSBsb29rYWhlYWQudmFsdWU7XG4gICAgcmV0dXJuIG9wID09PSBcIj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCIqPVwiIHx8XG4gICAgICAgIG9wID09PSBcIi89XCIgfHxcbiAgICAgICAgb3AgPT09IFwiJT1cIiB8fFxuICAgICAgICBvcCA9PT0gXCIrPVwiIHx8XG4gICAgICAgIG9wID09PSBcIi09XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPDw9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPj49XCIgfHxcbiAgICAgICAgb3AgPT09IFwiPj4+PVwiIHx8XG4gICAgICAgIG9wID09PSBcIiY9XCIgfHxcbiAgICAgICAgb3AgPT09IFwiXj1cIiB8fFxuICAgICAgICBvcCA9PT0gXCJ8PVwiO1xufVxuXG5mdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkge1xuICAgIHZhciBsaW5lO1xuXG4gICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLlxuICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IgfHwgbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGluZSA9IGxpbmVOdW1iZXI7XG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBpZiAobGluZU51bWJlciAhPT0gbGluZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YgJiYgIW1hdGNoKFwifVwiKSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG59XG5cbi8vIFJldHVybiB0cnVlIGlmIHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRTaWRlRXhwcmVzc2lvblxuXG5mdW5jdGlvbiBpc0xlZnRIYW5kU2lkZShleHByKSB7XG4gICAgcmV0dXJuIGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIgfHwgZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbjtcbn1cblxuLy8gMTEuMS40IEFycmF5IEluaXRpYWxpc2VyXG5cbmZ1bmN0aW9uIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHRtcDtcblxuICAgIGV4cGVjdChcIltcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwiXVwiKSkge1xuICAgICAgICBpZiAobWF0Y2goXCIsXCIpKSB7XG4gICAgICAgICAgICBsZXgoKTsgLy8gb25seSBnZXQgaGVyZSB3aGVuIHlvdSBoYXZlIFthLCxdIG9yIHNpbWlsYXJcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0bXAgPSBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2godG1wKTtcbiAgICAgICAgICAgIGlmICghKG1hdGNoKFwiXVwiKSkpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoXCIsXCIpOyAvLyBoYW5kbGVzIHRoZSBjb21tb24gY2FzZSBvZiBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCJdXCIpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSk7XG59XG5cbi8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXJcblxuZnVuY3Rpb24gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHBhcmFtSW5mbywgb3B0aW9ucykge1xuICAgIHZhciBwcmV2aW91c1N0cmljdCA9IHN0cmljdCxcbiAgICAgICAgcHJldmlvdXNZaWVsZEFsbG93ZWQgPSBzdGF0ZS55aWVsZEFsbG93ZWQsXG4gICAgICAgIGdlbmVyYXRvciA9IG9wdGlvbnMgPyBvcHRpb25zLmdlbmVyYXRvciA6IGZhbHNlLFxuICAgICAgICBib2R5O1xuXG4gICAgc3RhdGUueWllbGRBbGxvd2VkID0gZ2VuZXJhdG9yO1xuXG4gICAgLypcbiAgICAgKiBFc3ByaW1hIHVzZXMgcGFyc2VDb25jaXNlQm9keSgpIGhlcmUsIHdoaWNoIGlzIGluY29ycmVjdC4gT2JqZWN0IGxpdGVyYWxcbiAgICAgKiBtZXRob2RzIG11c3QgaGF2ZSBicmFjZXMuXG4gICAgICovXG4gICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuXG4gICAgaWYgKHN0cmljdCAmJiBwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudChwYXJhbUluZm8uZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzdHJpY3QgJiYgcGFyYW1JbmZvLnN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudChwYXJhbUluZm8uc3RyaWN0ZWQsIHBhcmFtSW5mby5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDtcbiAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShvcHRpb25zLm1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKFxuICAgICAgICBudWxsLFxuICAgICAgICBwYXJhbUluZm8ucGFyYW1zLFxuICAgICAgICBib2R5LFxuICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgIGJvZHkudHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkJsb2NrU3RhdGVtZW50XG4gICAgKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbihvcHRpb25zKSB7XG4gICAgdmFyIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0LFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBtZXRob2Q7XG5cbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgcGFyYW1zID0gcGFyc2VQYXJhbXMoKTtcblxuICAgIGlmIChwYXJhbXMuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHBhcmFtcy5zdHJpY3RlZCwgcGFyYW1zLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihwYXJhbXMsIHtcbiAgICAgICAgZ2VuZXJhdG9yOiBvcHRpb25zID8gb3B0aW9ucy5nZW5lcmF0b3IgOiBmYWxzZSxcbiAgICAgICAgbWFya2VyOiBtYXJrZXJcbiAgICB9KTtcblxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1ldGhvZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHRva2VuID0gbGV4KCksXG4gICAgICAgIGFsbG93T2JqZWN0TGl0ZXJhbENvbXB1dGVkID0gZXh0cmEuZWNtYUZlYXR1cmVzLm9iamVjdExpdGVyYWxDb21wdXRlZFByb3BlcnRpZXMsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIHJlc3VsdDtcblxuICAgIC8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgZnJvbSBwYXJzZU9iamVjdFByb3BlcnR5KCksIHdoZXJlXG4gICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRva2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuXG5cbiAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgY2FzZSBUb2tlbi5TdHJpbmdMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKHRva2VuLCBzb3VyY2UpKTtcblxuICAgICAgICBjYXNlIFRva2VuLklkZW50aWZpZXI6XG4gICAgICAgIGNhc2UgVG9rZW4uQm9vbGVhbkxpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uTnVsbExpdGVyYWw6XG4gICAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDpcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIodG9rZW4udmFsdWUpKTtcblxuICAgICAgICBjYXNlIFRva2VuLlB1bmN0dWF0b3I6XG4gICAgICAgICAgICBpZiAoKCFzdGF0ZS5pbk9iamVjdExpdGVyYWwgfHwgYWxsb3dPYmplY3RMaXRlcmFsQ29tcHV0ZWQpICYmXG4gICAgICAgICAgICAgICAgICAgIHRva2VuLnZhbHVlID09PSBcIltcIikge1xuICAgICAgICAgICAgICAgIC8vIEZvciBjb21wdXRlZCBwcm9wZXJ0aWVzIHdlIHNob3VsZCBza2lwIHRoZSBbIGFuZCBdLCBhbmRcbiAgICAgICAgICAgICAgICAvLyBjYXB0dXJlIGluIG1hcmtlciBvbmx5IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gaXRzZWxmLlxuICAgICAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgICAgIGV4cHIgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoXCJdXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gZGVmYXVsdFxuICAgIH1cblxuICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7XG59XG5cbmZ1bmN0aW9uIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpIHtcbiAgICBzd2l0Y2ggKGxvb2thaGVhZC50eXBlKSB7XG4gICAgICAgIGNhc2UgVG9rZW4uSWRlbnRpZmllcjpcbiAgICAgICAgY2FzZSBUb2tlbi5TdHJpbmdMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLkJvb2xlYW5MaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bGxMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLk51bWVyaWNMaXRlcmFsOlxuICAgICAgICBjYXNlIFRva2VuLktleXdvcmQ6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSBUb2tlbi5QdW5jdHVhdG9yOlxuICAgICAgICAgICAgcmV0dXJuIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJbXCI7XG4gICAgICAgIC8vIG5vIGRlZmF1bHRcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHRvIHRyeSB0byBwYXJzZSBhIE1ldGhvZERlZmluaXRpb24gYXMgZGVmaW5lZCBpbiAxNC4zLiBCdXQgaW4gdGhlIGNhc2Ugb2Ygb2JqZWN0IGxpdGVyYWxzLFxuLy8gaXQgbWlnaHQgYmUgY2FsbGVkIGF0IGEgcG9zaXRpb24gd2hlcmUgdGhlcmUgaXMgaW4gZmFjdCBhIHNob3J0IGhhbmQgaWRlbnRpZmllciBwYXR0ZXJuIG9yIGEgZGF0YSBwcm9wZXJ0eS5cbi8vIFRoaXMgY2FuIG9ubHkgYmUgZGV0ZXJtaW5lZCBhZnRlciB3ZSBjb25zdW1lZCB1cCB0byB0aGUgbGVmdCBwYXJlbnRoZXNlcy5cbi8vIEluIG9yZGVyIHRvIGF2b2lkIGJhY2sgdHJhY2tpbmcsIGl0IHJldHVybnMgYG51bGxgIGlmIHRoZSBwb3NpdGlvbiBpcyBub3QgYSBNZXRob2REZWZpbml0aW9uIGFuZCB0aGUgY2FsbGVyXG4vLyBpcyByZXNwb25zaWJsZSB0byB2aXNpdCBvdGhlciBvcHRpb25zLlxuZnVuY3Rpb24gdHJ5UGFyc2VNZXRob2REZWZpbml0aW9uKHRva2VuLCBrZXksIGNvbXB1dGVkLCBtYXJrZXIpIHtcbiAgICB2YXIgdmFsdWUsIG9wdGlvbnMsIG1ldGhvZE1hcmtlcjtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIC8vIGNoZWNrIGZvciBgZ2V0YCBhbmQgYHNldGA7XG5cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcImdldFwiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG5cbiAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICAgICAgbWV0aG9kTWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgICAgICBleHBlY3QoXCIoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKVwiKTtcblxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24oe1xuICAgICAgICAgICAgICAgIHBhcmFtczogW10sXG4gICAgICAgICAgICAgICAgc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBudWxsLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG51bGxcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBtYXJrZXI6IG1ldGhvZE1hcmtlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFwiZ2V0XCIsIGtleSwgdmFsdWUsIGZhbHNlLCBmYWxzZSwgY29tcHV0ZWQpKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSBcInNldFwiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IG1hdGNoKFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXRjaChcIilcIikpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnNlUGFyYW0ob3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihvcHRpb25zLCB7IG1hcmtlcjogbWV0aG9kTWFya2VyIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXCJzZXRcIiwga2V5LCB2YWx1ZSwgZmFsc2UsIGZhbHNlLCBjb21wdXRlZCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiKFwiKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlNZXRob2RGdW5jdGlvbigpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcImluaXRcIiwga2V5LCB2YWx1ZSwgdHJ1ZSwgZmFsc2UsIGNvbXB1dGVkKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGEgTWV0aG9kRGVmaW5pdGlvbi5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgR2VuZXJhdG9yIFByb3BlcnRpZXNcbiAqIEBwYXJhbSB7QVNUTm9kZX0ga2V5IFRoZSBwcm9wZXJ0eSBrZXkgKHVzdWFsbHkgYW4gaWRlbnRpZmllcikuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFya2VyIFRoZSBtYXJrZXIgdG8gdXNlIGZvciB0aGUgbm9kZS5cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgZ2VuZXJhdG9yIHByb3BlcnR5IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlR2VuZXJhdG9yUHJvcGVydHkoa2V5LCBtYXJrZXIpIHtcblxuICAgIHZhciBjb21wdXRlZCA9IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcblxuICAgIGlmICghbWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IHRydWUgfSksXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBjb21wdXRlZFxuICAgICAgICApXG4gICAgKTtcbn1cblxuLy8gVE9ETyhuemFrYXMpOiBVcGRhdGUgdG8gbWF0Y2ggRXNwcmltYVxuZnVuY3Rpb24gcGFyc2VPYmplY3RQcm9wZXJ0eSgpIHtcbiAgICB2YXIgdG9rZW4sIGtleSwgaWQsIGNvbXB1dGVkLCBtZXRob2RNYXJrZXIsIG9wdGlvbnM7XG4gICAgdmFyIGFsbG93Q29tcHV0ZWQgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllcyxcbiAgICAgICAgYWxsb3dNZXRob2QgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbFNob3J0aGFuZE1ldGhvZHMsXG4gICAgICAgIGFsbG93U2hvcnRoYW5kID0gZXh0cmEuZWNtYUZlYXR1cmVzLm9iamVjdExpdGVyYWxTaG9ydGhhbmRQcm9wZXJ0aWVzLFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycyxcbiAgICAgICAgYWxsb3dEZXN0cnVjdHVyaW5nID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlc3RydWN0dXJpbmcsXG4gICAgICAgIGFsbG93U3ByZWFkID0gZXh0cmEuZWNtYUZlYXR1cmVzLmV4cGVyaW1lbnRhbE9iamVjdFJlc3RTcHJlYWQsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgY29tcHV0ZWQgPSAodG9rZW4udmFsdWUgPT09IFwiW1wiICYmIHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIgfHwgKGFsbG93Q29tcHV0ZWQgJiYgY29tcHV0ZWQpKSB7XG5cbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogQ2hlY2sgZm9yIGdldHRlcnMgYW5kIHNldHRlcnMuIEJlIGNhcmVmdWwhIFwiZ2V0XCIgYW5kIFwic2V0XCIgYXJlIGxlZ2FsXG4gICAgICAgICAqIG1ldGhvZCBuYW1lcy4gSXQncyBvbmx5IGEgZ2V0dGVyIG9yIHNldHRlciBpZiBmb2xsb3dlZCBieSBhIHNwYWNlLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcImdldFwiICYmXG4gICAgICAgICAgICAgICAgIShtYXRjaChcIjpcIikgfHwgbWF0Y2goXCIoXCIpIHx8IG1hdGNoKFwiLFwiKSB8fCBtYXRjaChcIn1cIikpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChcIilcIik7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgIFwiZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtZXRob2RNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSBcInNldFwiICYmXG4gICAgICAgICAgICAgICAgIShtYXRjaChcIjpcIikgfHwgbWF0Y2goXCIoXCIpIHx8IG1hdGNoKFwiLFwiKSB8fCBtYXRjaChcIn1cIikpKSB7XG4gICAgICAgICAgICBjb21wdXRlZCA9IChsb29rYWhlYWQudmFsdWUgPT09IFwiW1wiKTtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcbiAgICAgICAgICAgIG1ldGhvZE1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgICAgICAgICBzdHJpY3RlZDogbnVsbCxcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYW1TZXQ6IG5ldyBTdHJpbmdNYXAoKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VQYXJhbShvcHRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KFwiKVwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJzZXRcIixcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5RnVuY3Rpb24ob3B0aW9ucywge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyOiBtZXRob2RNYXJrZXJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9ybWFsIHByb3BlcnR5IChrZXk6dmFsdWUpXG4gICAgICAgIGlmIChtYXRjaChcIjpcIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWV0aG9kIHNob3J0aGFuZCAoa2V5KCl7Li4ufSlcbiAgICAgICAgaWYgKGFsbG93TWV0aG9kICYmIG1hdGNoKFwiKFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVByb3BlcnR5TWV0aG9kRnVuY3Rpb24oeyBnZW5lcmF0b3I6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZGVzdHJ1Y3R1cmluZyBkZWZhdWx0cyAoc2hvcnRoYW5kIHN5bnRheClcbiAgICAgICAgaWYgKGFsbG93RGVzdHJ1Y3R1cmluZyAmJiBtYXRjaChcIj1cIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgdmFyIHByb3AgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKFwiPVwiLCBpZCwgdmFsdWUpKTtcbiAgICAgICAgICAgIHByb3AudHlwZSA9IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybjtcbiAgICAgICAgICAgIHZhciBmdWxsUHJvcGVydHkgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIHRydWUsIC8vIHNob3J0aGFuZFxuICAgICAgICAgICAgICAgIGNvbXB1dGVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgZnVsbFByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAqIE9ubHkgb3RoZXIgcG9zc2liaWxpdHkgaXMgdGhhdCB0aGlzIGlzIGEgc2hvcnRoYW5kIHByb3BlcnR5LiBDb21wdXRlZFxuICAgICAgICAgKiBwcm9wZXJ0aWVzIGNhbm5vdCB1c2Ugc2hvcnRoYW5kIG5vdGF0aW9uLCBzbyB0aGF0J3MgYSBzeW50YXggZXJyb3IuXG4gICAgICAgICAqIElmIHNob3J0aGFuZCBwcm9wZXJ0aWVzIGFyZW4ndCBhbGxvdywgdGhlbiB0aGlzIGlzIGFuIGF1dG9tYXRpY1xuICAgICAgICAgKiBzeW50YXggZXJyb3IuIERlc3RydWN0dXJpbmcgaXMgYW5vdGhlciBjYXNlIHdpdGggYSBzaW1pbGFyIHNob3J0aGFuZCBzeW50YXguXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoY29tcHV0ZWQgfHwgKCFhbGxvd1Nob3J0aGFuZCAmJiAhYWxsb3dEZXN0cnVjdHVyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzaG9ydGhhbmQgcHJvcGVydHlcbiAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICAgICAgbWFya2VyLFxuICAgICAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgXCJpbml0XCIsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIG9iamVjdCBzcHJlYWQgcHJvcGVydHlcbiAgICBpZiAoYWxsb3dTcHJlYWQgJiYgbWF0Y2goXCIuLi5cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cGVyaW1lbnRhbFNwcmVhZFByb3BlcnR5KHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSkpO1xuICAgIH1cblxuICAgIC8vIG9ubHkgcG9zc2liaWxpdHkgaW4gdGhpcyBicmFuY2ggaXMgYSBzaG9ydGhhbmQgZ2VuZXJhdG9yXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIGlmICghYWxsb3dHZW5lcmF0b3JzIHx8ICFtYXRjaChcIipcIikgfHwgIWFsbG93TWV0aG9kKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV4KCk7XG5cbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlR2VuZXJhdG9yUHJvcGVydHkoaWQsIG1hcmtlcik7XG5cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIElmIHdlJ3ZlIG1hZGUgaXQgaGVyZSwgdGhlbiB0aGF0IG1lYW5zIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIHJlcHJlc2VudGVkXG4gICAgICogYnkgYSBzdHJpbmcgKGkuZSwgeyBcImZvb1wiOiAyfSkuIFRoZSBvbmx5IG9wdGlvbnMgaGVyZSBhcmUgbm9ybWFsXG4gICAgICogcHJvcGVydHkgd2l0aCBhIGNvbG9uIG9yIGEgbWV0aG9kLlxuICAgICAqL1xuICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTtcblxuICAgIC8vIGNoZWNrIGZvciBwcm9wZXJ0eSB2YWx1ZVxuICAgIGlmIChtYXRjaChcIjpcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShcbiAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb3BlcnR5KFxuICAgICAgICAgICAgICAgIFwiaW5pdFwiLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBmb3IgbWV0aG9kXG4gICAgaWYgKGFsbG93TWV0aG9kICYmIG1hdGNoKFwiKFwiKSkge1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICBcImluaXRcIixcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eU1ldGhvZEZ1bmN0aW9uKCksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIG5vIG90aGVyIG9wdGlvbnMsIHRoaXMgaXMgYmFkXG4gICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmllbGROYW1lKGtleSkge1xuICAgIHZhciB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAoa2V5LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBrZXkubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHRvU3RyaW5nKGtleS52YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKSB7XG4gICAgdmFyIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0R1cGxpY2F0ZXMgPSBleHRyYS5lY21hRmVhdHVyZXMub2JqZWN0TGl0ZXJhbER1cGxpY2F0ZVByb3BlcnRpZXMsXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXSxcbiAgICAgICAgcHJvcGVydHksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHByb3BlcnR5Rm4sXG4gICAgICAgIGtpbmQsXG4gICAgICAgIHN0b3JlZEtpbmQsXG4gICAgICAgIHByZXZpb3VzSW5PYmplY3RMaXRlcmFsID0gc3RhdGUuaW5PYmplY3RMaXRlcmFsLFxuICAgICAgICBraW5kTWFwID0gbmV3IFN0cmluZ01hcCgpO1xuXG4gICAgc3RhdGUuaW5PYmplY3RMaXRlcmFsID0gdHJ1ZTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICB3aGlsZSAoIW1hdGNoKFwifVwiKSkge1xuXG4gICAgICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgpO1xuXG4gICAgICAgIGlmICghcHJvcGVydHkuY29tcHV0ZWQgJiYgcHJvcGVydHkudHlwZS5pbmRleE9mKFwiRXhwZXJpbWVudGFsXCIpID09PSAtMSkge1xuXG4gICAgICAgICAgICBuYW1lID0gZ2V0RmllbGROYW1lKHByb3BlcnR5LmtleSk7XG4gICAgICAgICAgICBwcm9wZXJ0eUZuID0gKHByb3BlcnR5LmtpbmQgPT09IFwiZ2V0XCIpID8gUHJvcGVydHlLaW5kLkdldCA6IFByb3BlcnR5S2luZC5TZXQ7XG4gICAgICAgICAgICBraW5kID0gKHByb3BlcnR5LmtpbmQgPT09IFwiaW5pdFwiKSA/IFByb3BlcnR5S2luZC5EYXRhIDogcHJvcGVydHlGbjtcblxuICAgICAgICAgICAgaWYgKGtpbmRNYXAuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgc3RvcmVkS2luZCA9IGtpbmRNYXAuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdG9yZWRLaW5kID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEgJiYgbmFtZSA9PT0gXCJfX3Byb3RvX19cIiAmJiBhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIER1cGxpY2F0ZSAnX19wcm90b19fJyBsaXRlcmFsIHByb3BlcnRpZXMgYXJlIGZvcmJpZGRlbiBpbiBFUyA2XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkR1cGxpY2F0ZVByb3RvdHlwZVByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYga2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEgJiYgIWFsbG93RHVwbGljYXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRHVwbGljYXRlIGxpdGVyYWwgcHJvcGVydGllcyBhcmUgb25seSBmb3JiaWRkZW4gaW4gRVMgNSBzdHJpY3QgbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3REdXBsaWNhdGVQcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCAhPT0gUHJvcGVydHlLaW5kLkRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdG9yZWRLaW5kICYga2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckdldFNldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAga2luZE1hcC5zZXQobmFtZSwgc3RvcmVkS2luZCB8IGtpbmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBraW5kTWFwLnNldChuYW1lLCBraW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG5cbiAgICAgICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGV4cGVjdChcIixcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgc3RhdGUuaW5PYmplY3RMaXRlcmFsID0gcHJldmlvdXNJbk9iamVjdExpdGVyYWw7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVPYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMpKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHRlbXBsYXRlIHN0cmluZyBlbGVtZW50IGFuZCByZXR1cm4gaXRzIEFTVE5vZGUgcmVwcmVzZW50YXRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb24gUGFyc2luZyAmIHNjYW5uaW5nIG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb24uaGVhZCBUcnVlIGlmIHRoaXMgZWxlbWVudCBpcyB0aGUgZmlyc3QgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSBzdHJpbmcsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgdGVtcGxhdGUgZWxlbWVudCBub2RlIHdpdGggbWFya2VyIGluZm8gYXBwbGllZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZUVsZW1lbnQob3B0aW9uKSB7XG4gICAgdmFyIG1hcmtlciwgdG9rZW47XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlRlbXBsYXRlIHx8IChvcHRpb24uaGVhZCAmJiAhbG9va2FoZWFkLmhlYWQpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCJJTExFR0FMXCIpO1xuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIHRva2VuID0gbGV4KCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGVtcGxhdGVFbGVtZW50KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJhdzogdG9rZW4udmFsdWUucmF3LFxuICAgICAgICAgICAgICAgIGNvb2tlZDogdG9rZW4udmFsdWUuY29va2VkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG9rZW4udGFpbFxuICAgICAgICApXG4gICAgKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHRlbXBsYXRlIHN0cmluZyBsaXRlcmFsIGFuZCByZXR1cm4gaXRzIEFTVE5vZGUgcmVwcmVzZW50YXRpb25cbiAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgdGVtcGxhdGUgbGl0ZXJhbCBub2RlIHdpdGggbWFya2VyIGluZm8gYXBwbGllZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VUZW1wbGF0ZUxpdGVyYWwoKSB7XG4gICAgdmFyIHF1YXNpLCBxdWFzaXMsIGV4cHJlc3Npb25zLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHF1YXNpID0gcGFyc2VUZW1wbGF0ZUVsZW1lbnQoeyBoZWFkOiB0cnVlIH0pO1xuICAgIHF1YXNpcyA9IFsgcXVhc2kgXTtcbiAgICBleHByZXNzaW9ucyA9IFtdO1xuXG4gICAgd2hpbGUgKCFxdWFzaS50YWlsKSB7XG4gICAgICAgIGV4cHJlc3Npb25zLnB1c2gocGFyc2VFeHByZXNzaW9uKCkpO1xuICAgICAgICBxdWFzaSA9IHBhcnNlVGVtcGxhdGVFbGVtZW50KHsgaGVhZDogZmFsc2UgfSk7XG4gICAgICAgIHF1YXNpcy5wdXNoKHF1YXNpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVUZW1wbGF0ZUxpdGVyYWwocXVhc2lzLCBleHByZXNzaW9ucykpO1xufVxuXG4vLyAxMS4xLjYgVGhlIEdyb3VwaW5nIE9wZXJhdG9yXG5cbmZ1bmN0aW9uIHBhcnNlR3JvdXBFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgICsrc3RhdGUucGFyZW50aGVzaXNDb3VudDtcblxuICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuXG4vLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lvbnNcblxuZnVuY3Rpb24gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgdHlwZSwgdG9rZW4sIGV4cHIsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgYWxsb3dKU1ggPSBleHRyYS5lY21hRmVhdHVyZXMuanN4LFxuICAgICAgICBhbGxvd0NsYXNzZXMgPSBleHRyYS5lY21hRmVhdHVyZXMuY2xhc3NlcyxcbiAgICAgICAgYWxsb3dTdXBlciA9IGFsbG93Q2xhc3NlcyB8fCBleHRyYS5lY21hRmVhdHVyZXMuc3VwZXJJbkZ1bmN0aW9ucztcblxuICAgIGlmIChtYXRjaChcIihcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpO1xuICAgIH1cblxuICAgIGlmIChhbGxvd0pTWCAmJiBtYXRjaChcIjxcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSlNYRWxlbWVudCgpO1xuICAgIH1cblxuICAgIHR5cGUgPSBsb29rYWhlYWQudHlwZTtcbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKGxleCgpLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHtcbiAgICAgICAgaWYgKHN0cmljdCAmJiBsb29rYWhlYWQub2N0YWwpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUxpdGVyYWxGcm9tU291cmNlKGxleCgpLCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZnVuY3Rpb25cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFsbG93U3VwZXIgJiYgbWF0Y2hLZXl3b3JkKFwic3VwZXJcIikgJiYgc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHtcbiAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTdXBlcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoXCJ0aGlzXCIpKSB7XG4gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVGhpc0V4cHJlc3Npb24oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxsb3dDbGFzc2VzICYmIG1hdGNoS2V5d29yZChcImNsYXNzXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0V4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCkge1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICB0b2tlbi52YWx1ZSA9ICh0b2tlbi52YWx1ZSA9PT0gXCJ0cnVlXCIpO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UodG9rZW4sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbCkge1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICB0b2tlbi52YWx1ZSA9IG51bGw7XG4gICAgICAgIGV4cHIgPSBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMaXRlcmFsRnJvbVNvdXJjZSh0b2tlbiwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwiL1wiKSB8fCBtYXRjaChcIi89XCIpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UoY29sbGVjdFJlZ2V4KCksIHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2Uoc2NhblJlZ0V4cCgpLCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHBlZWsoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbn1cblxuLy8gMTEuMiBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9uc1xuXG5mdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBhcmc7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgYXJnID0gcGFyc2VTcHJlYWRPckFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QoXCIsXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIHJldHVybiBhcmdzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKSB7XG4gICAgaWYgKG1hdGNoKFwiLi4uXCIpKSB7XG4gICAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVNwcmVhZEVsZW1lbnQocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIHtcbiAgICB2YXIgdG9rZW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsZXgoKTtcblxuICAgIGlmICghaXNJZGVudGlmaWVyTmFtZSh0b2tlbikpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKSB7XG4gICAgZXhwZWN0KFwiLlwiKTtcblxuICAgIHJldHVybiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb21wdXRlZE1lbWJlcigpIHtcbiAgICB2YXIgZXhwcjtcblxuICAgIGV4cGVjdChcIltcIik7XG5cbiAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCJdXCIpO1xuXG4gICAgcmV0dXJuIGV4cHI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTmV3RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgY2FsbGVlLCBhcmdzLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJuZXdcIik7XG5cbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLm5ld1RhcmdldCAmJiBtYXRjaChcIi5cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllciAmJiBsb29rYWhlYWQudmFsdWUgPT09IFwidGFyZ2V0XCIpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5pbkZ1bmN0aW9uQm9keSkge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZU1ldGFQcm9wZXJ0eShcIm5ld1wiLCBcInRhcmdldFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG5cbiAgICBjYWxsZWUgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb24oKTtcbiAgICBhcmdzID0gbWF0Y2goXCIoXCIpID8gcGFyc2VBcmd1bWVudHMoKSA6IFtdO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTmV3RXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCkge1xuICAgIHZhciBleHByLCBhcmdzLFxuICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlO1xuICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoXCJuZXdcIikgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTtcbiAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXG4gICAgLy8gb25seSBzdGFydCBwYXJzaW5nIHRlbXBsYXRlIGxpdGVyYWwgaWYgdGhlIGxvb2thaGVhZCBpcyBhIGhlYWQgKGJlZ2lubmluZyB3aXRoIGApXG4gICAgd2hpbGUgKG1hdGNoKFwiLlwiKSB8fCBtYXRjaChcIltcIikgfHwgbWF0Y2goXCIoXCIpIHx8IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uVGVtcGxhdGUgJiYgbG9va2FoZWFkLmhlYWQpKSB7XG4gICAgICAgIGlmIChtYXRjaChcIihcIikpIHtcbiAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50cygpO1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2FsbEV4cHJlc3Npb24oZXhwciwgYXJncykpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbihcIltcIiwgZXhwciwgcGFyc2VDb21wdXRlZE1lbWJlcigpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goXCIuXCIpKSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKFwiLlwiLCBleHByLCBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCkge1xuICAgIHZhciBleHByLFxuICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cHIgPSBtYXRjaEtleXdvcmQoXCJuZXdcIikgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKTtcbiAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuXG4gICAgLy8gb25seSBzdGFydCBwYXJzaW5nIHRlbXBsYXRlIGxpdGVyYWwgaWYgdGhlIGxvb2thaGVhZCBpcyBhIGhlYWQgKGJlZ2lubmluZyB3aXRoIGApXG4gICAgd2hpbGUgKG1hdGNoKFwiLlwiKSB8fCBtYXRjaChcIltcIikgfHwgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5UZW1wbGF0ZSAmJiBsb29rYWhlYWQuaGVhZCkpIHtcbiAgICAgICAgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbihcIltcIiwgZXhwciwgcGFyc2VDb21wdXRlZE1lbWJlcigpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2goXCIuXCIpKSB7XG4gICAgICAgICAgICBleHByID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKFwiLlwiLCBleHByLCBwYXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHIgPSBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbihleHByLCBwYXJzZVRlbXBsYXRlTGl0ZXJhbCgpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuXG4vLyAxMS4zIFBvc3RmaXggRXhwcmVzc2lvbnNcblxuZnVuY3Rpb24gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgZXhwciwgdG9rZW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgZXhwciA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpO1xuXG4gICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIGlmICgobWF0Y2goXCIrK1wiKSB8fCBtYXRjaChcIi0tXCIpKSAmJiAhcGVla0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICAgICAgICAgIC8vIDExLjMuMSwgMTEuMy4yXG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIgJiYgc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TEhTUG9zdGZpeCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUG9zdGZpeEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG4vLyAxMS40IFVuYXJ5IE9wZXJhdG9yc1xuXG5mdW5jdGlvbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgdG9rZW4sIGV4cHIsXG4gICAgICAgIG1hcmtlcjtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCIrK1wiKSB8fCBtYXRjaChcIi0tXCIpKSB7XG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcbiAgICAgICAgLy8gMTEuNC40LCAxMS40LjVcbiAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyICYmIHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TEhTUHJlZml4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUoZXhwcikpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTtcbiAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIitcIikgfHwgbWF0Y2goXCItXCIpIHx8IG1hdGNoKFwiflwiKSB8fCBtYXRjaChcIiFcIikpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTtcbiAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgfSBlbHNlIGlmIChtYXRjaEtleXdvcmQoXCJkZWxldGVcIikgfHwgbWF0Y2hLZXl3b3JkKFwidm9pZFwiKSB8fCBtYXRjaEtleXdvcmQoXCJ0eXBlb2ZcIikpIHtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgICAgIHRva2VuID0gbGV4KCk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTtcbiAgICAgICAgZXhwciA9IG1hcmtlckFwcGx5KG1hcmtlciwgZXhwcik7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci5vcGVyYXRvciA9PT0gXCJkZWxldGVcIiAmJiBleHByLmFyZ3VtZW50LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdERlbGV0ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG5mdW5jdGlvbiBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBhbGxvd0luKSB7XG4gICAgdmFyIHByZWMgPSAwO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XG4gICAgY2FzZSBcInx8XCI6XG4gICAgICAgIHByZWMgPSAxO1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCImJlwiOlxuICAgICAgICBwcmVjID0gMjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwifFwiOlxuICAgICAgICBwcmVjID0gMztcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiXlwiOlxuICAgICAgICBwcmVjID0gNDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiJlwiOlxuICAgICAgICBwcmVjID0gNTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiPT1cIjpcbiAgICBjYXNlIFwiIT1cIjpcbiAgICBjYXNlIFwiPT09XCI6XG4gICAgY2FzZSBcIiE9PVwiOlxuICAgICAgICBwcmVjID0gNjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiPFwiOlxuICAgIGNhc2UgXCI+XCI6XG4gICAgY2FzZSBcIjw9XCI6XG4gICAgY2FzZSBcIj49XCI6XG4gICAgY2FzZSBcImluc3RhbmNlb2ZcIjpcbiAgICAgICAgcHJlYyA9IDc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImluXCI6XG4gICAgICAgIHByZWMgPSBhbGxvd0luID8gNyA6IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIjw8XCI6XG4gICAgY2FzZSBcIj4+XCI6XG4gICAgY2FzZSBcIj4+PlwiOlxuICAgICAgICBwcmVjID0gODtcbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwiK1wiOlxuICAgIGNhc2UgXCItXCI6XG4gICAgICAgIHByZWMgPSA5O1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgXCIqXCI6XG4gICAgY2FzZSBcIi9cIjpcbiAgICBjYXNlIFwiJVwiOlxuICAgICAgICBwcmVjID0gMTE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZWM7XG59XG5cbi8vIDExLjUgTXVsdGlwbGljYXRpdmUgT3BlcmF0b3JzXG4vLyAxMS42IEFkZGl0aXZlIE9wZXJhdG9yc1xuLy8gMTEuNyBCaXR3aXNlIFNoaWZ0IE9wZXJhdG9yc1xuLy8gMTEuOCBSZWxhdGlvbmFsIE9wZXJhdG9yc1xuLy8gMTEuOSBFcXVhbGl0eSBPcGVyYXRvcnNcbi8vIDExLjEwIEJpbmFyeSBCaXR3aXNlIE9wZXJhdG9yc1xuLy8gMTEuMTEgQmluYXJ5IExvZ2ljYWwgT3BlcmF0b3JzXG5mdW5jdGlvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKSB7XG4gICAgdmFyIGV4cHIsIHRva2VuLCBwcmVjLCBwcmV2aW91c0FsbG93SW4sIHN0YWNrLCByaWdodCwgb3BlcmF0b3IsIGxlZnQsIGksXG4gICAgICAgIG1hcmtlciwgbWFya2VycztcblxuICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47XG4gICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcbiAgICBsZWZ0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTtcblxuICAgIHRva2VuID0gbG9va2FoZWFkO1xuICAgIHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBwcmV2aW91c0FsbG93SW4pO1xuICAgIGlmIChwcmVjID09PSAwKSB7XG4gICAgICAgIHJldHVybiBsZWZ0O1xuICAgIH1cbiAgICB0b2tlbi5wcmVjID0gcHJlYztcbiAgICBsZXgoKTtcblxuICAgIG1hcmtlcnMgPSBbbWFya2VyLCBtYXJrZXJDcmVhdGUoKV07XG4gICAgcmlnaHQgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuXG4gICAgc3RhY2sgPSBbbGVmdCwgdG9rZW4sIHJpZ2h0XTtcblxuICAgIHdoaWxlICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFkLCBwcmV2aW91c0FsbG93SW4pKSA+IDApIHtcblxuICAgICAgICAvLyBSZWR1Y2U6IG1ha2UgYSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuXG4gICAgICAgIHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0ucHJlYykpIHtcbiAgICAgICAgICAgIHJpZ2h0ID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBvcGVyYXRvciA9IHN0YWNrLnBvcCgpLnZhbHVlO1xuICAgICAgICAgICAgbGVmdCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgICAgIG1hcmtlcnMucG9wKCk7XG4gICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJzLnBvcCgpO1xuICAgICAgICAgICAgbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goZXhwcik7XG4gICAgICAgICAgICBtYXJrZXJzLnB1c2gobWFya2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNoaWZ0LlxuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICB0b2tlbi5wcmVjID0gcHJlYztcbiAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7XG4gICAgICAgIG1hcmtlcnMucHVzaChtYXJrZXJDcmVhdGUoKSk7XG4gICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpO1xuICAgICAgICBzdGFjay5wdXNoKGV4cHIpO1xuICAgIH1cblxuICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0FsbG93SW47XG5cbiAgICAvLyBGaW5hbCByZWR1Y2UgdG8gY2xlYW4tdXAgdGhlIHN0YWNrLlxuICAgIGkgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgIGV4cHIgPSBzdGFja1tpXTtcbiAgICBtYXJrZXJzLnBvcCgpO1xuICAgIHdoaWxlIChpID4gMSkge1xuICAgICAgICBleHByID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihzdGFja1tpIC0gMV0udmFsdWUsIHN0YWNrW2kgLSAyXSwgZXhwcik7XG4gICAgICAgIGkgLT0gMjtcbiAgICAgICAgbWFya2VyID0gbWFya2Vycy5wb3AoKTtcbiAgICAgICAgbWFya2VyQXBwbHkobWFya2VyLCBleHByKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhwcjtcbn1cblxuLy8gMTEuMTIgQ29uZGl0aW9uYWwgT3BlcmF0b3JcblxuZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKSB7XG4gICAgdmFyIGV4cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwgYWx0ZXJuYXRlLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cHIgPSBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKTtcblxuICAgIGlmIChtYXRjaChcIj9cIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47XG4gICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlO1xuICAgICAgICBjb25zZXF1ZW50ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luO1xuICAgICAgICBleHBlY3QoXCI6XCIpO1xuICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG5cbiAgICAgICAgZXhwciA9IGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihleHByLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpO1xuICAgICAgICBtYXJrZXJBcHBseShtYXJrZXIsIGV4cHIpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByO1xufVxuXG4vLyBbRVM2XSAxNC4yIEFycm93IEZ1bmN0aW9uXG5cbmZ1bmN0aW9uIHBhcnNlQ29uY2lzZUJvZHkoKSB7XG4gICAgaWYgKG1hdGNoKFwie1wiKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG59XG5cbmZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNDb3ZlckZvcm1hbHNMaXN0KGV4cHJlc3Npb25zKSB7XG4gICAgdmFyIGksIGxlbiwgcGFyYW0sIHBhcmFtcywgb3B0aW9ucyxcbiAgICAgICAgYWxsb3dSZXN0UGFyYW1zID0gZXh0cmEuZWNtYUZlYXR1cmVzLnJlc3RQYXJhbXM7XG5cbiAgICBwYXJhbXMgPSBbXTtcbiAgICBvcHRpb25zID0ge1xuICAgICAgICBwYXJhbVNldDogbmV3IFN0cmluZ01hcCgpXG4gICAgfTtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGV4cHJlc3Npb25zLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIHBhcmFtID0gZXhwcmVzc2lvbnNbaV07XG4gICAgICAgIGlmIChwYXJhbS50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbSwgcGFyYW0ubmFtZSk7XG4gICAgICAgIH0gIGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RFeHByZXNzaW9uIHx8IHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5BcnJheUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNEZXN0cnVjdHVyZWRQYXJhbWV0ZXIob3B0aW9ucywgcGFyYW0pO1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50KSB7XG4gICAgICAgICAgICBhc3NlcnQoaSA9PT0gbGVuIC0gMSwgXCJJdCBpcyBndWFyYW50ZWVkIHRoYXQgU3ByZWFkRWxlbWVudCBpcyBsYXN0IGVsZW1lbnQgYnkgcGFyc2VFeHByZXNzaW9uXCIpO1xuICAgICAgICAgICAgaWYgKHBhcmFtLmFyZ3VtZW50LnR5cGUgIT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCBcIltcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYWxsb3dSZXN0UGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FuJ3QgZ2V0IGNvcnJlY3QgbGluZS9jb2x1bW4gaGVyZSA6KFxuICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCIuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50LCBwYXJhbS5hcmd1bWVudC5uYW1lKTtcbiAgICAgICAgICAgIHBhcmFtLnR5cGUgPSBhc3ROb2RlVHlwZXMuUmVzdEVsZW1lbnQ7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlJlc3RFbGVtZW50KSB7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7XG4gICAgICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLmFyZ3VtZW50LCBwYXJhbS5hcmd1bWVudC5uYW1lKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb24pIHtcblxuICAgICAgICAgICAgLy8gVE9ETzogRmluZCBhIGxlc3MgaGFja3kgd2F5IG9mIGRvaW5nIHRoaXNcbiAgICAgICAgICAgIHBhcmFtLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm47XG4gICAgICAgICAgICBkZWxldGUgcGFyYW0ub3BlcmF0b3I7XG5cbiAgICAgICAgICAgIGlmIChwYXJhbS5yaWdodC50eXBlID09PSBhc3ROb2RlVHlwZXMuWWllbGRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLnJpZ2h0LmFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhcmFtLnJpZ2h0LnR5cGUgPSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcjtcbiAgICAgICAgICAgICAgICBwYXJhbS5yaWdodC5uYW1lID0gXCJ5aWVsZFwiO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbS5yaWdodC5hcmd1bWVudDtcbiAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW0ucmlnaHQuZGVsZWdhdGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICAgICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgcGFyYW0ubGVmdCwgcGFyYW0ubGVmdC5uYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubWVzc2FnZSA9PT0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlKSB7XG4gICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICBzdHJpY3QgPyBvcHRpb25zLnN0cmljdGVkIDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgc3RyaWN0ZWQ6IG9wdGlvbnMuc3RyaWN0ZWQsXG4gICAgICAgIGZpcnN0UmVzdHJpY3RlZDogb3B0aW9ucy5maXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24ob3B0aW9ucywgbWFya2VyKSB7XG4gICAgdmFyIHByZXZpb3VzU3RyaWN0LCBib2R5O1xuICAgIHZhciBhcnJvd1N0YXJ0ID0gbGluZU51bWJlcjtcblxuICAgIGV4cGVjdChcIj0+XCIpO1xuICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgaWYgKGxpbmVOdW1iZXIgPiBhcnJvd1N0YXJ0KSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgXCI9PlwiKTtcbiAgICB9XG5cbiAgICBib2R5ID0gcGFyc2VDb25jaXNlQm9keSgpO1xuXG4gICAgaWYgKHN0cmljdCAmJiBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICB0aHJvd0Vycm9yKG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLCBvcHRpb25zLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAoc3RyaWN0ICYmIG9wdGlvbnMuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KG9wdGlvbnMuc3RyaWN0ZWQsIG9wdGlvbnMubWVzc2FnZSk7XG4gICAgfVxuXG4gICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24oXG4gICAgICAgIG9wdGlvbnMucGFyYW1zLFxuICAgICAgICBib2R5LFxuICAgICAgICBib2R5LnR5cGUgIT09IGFzdE5vZGVUeXBlcy5CbG9ja1N0YXRlbWVudFxuICAgICkpO1xufVxuXG4vLyAxMS4xMyBBc3NpZ25tZW50IE9wZXJhdG9yc1xuXG4vLyAxMi4xNC41IEFzc2lnbm1lbnRQYXR0ZXJuXG5cbmZ1bmN0aW9uIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZXhwcikge1xuICAgIHZhciBpLCBsZW4sIHByb3BlcnR5LCBlbGVtZW50LFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZyxcbiAgICAgICAgYWxsb3dSZXN0ID0gZXh0cmEuZWNtYUZlYXR1cmVzLmV4cGVyaW1lbnRhbE9iamVjdFJlc3RTcHJlYWQ7XG5cbiAgICBpZiAoIWFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgIH1cblxuICAgIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5PYmplY3RFeHByZXNzaW9uKSB7XG4gICAgICAgIGV4cHIudHlwZSA9IGFzdE5vZGVUeXBlcy5PYmplY3RQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLnByb3BlcnRpZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gZXhwci5wcm9wZXJ0aWVzW2ldO1xuXG4gICAgICAgICAgICBpZiAoYWxsb3dSZXN0ICYmIHByb3BlcnR5LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5FeHBlcmltZW50YWxTcHJlYWRQcm9wZXJ0eSkge1xuXG4gICAgICAgICAgICAgICAgLy8gb25seSBhbGxvdyBpZGVudGlmaWVyc1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5hcmd1bWVudC50eXBlICE9PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIFwiSW52YWxpZCBvYmplY3QgcmVzdC5cIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcHJvcGVydHkudHlwZSA9IGFzdE5vZGVUeXBlcy5FeHBlcmltZW50YWxSZXN0UHJvcGVydHk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvcGVydHkua2luZCAhPT0gXCJpbml0XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihwcm9wZXJ0eS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXJyYXlQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZXhwci5lbGVtZW50c1tpXTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpIHtcbiAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNwcmVhZEVsZW1lbnQpIHtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihleHByLmFyZ3VtZW50KTtcbiAgICAgICAgaWYgKGV4cHIuYXJndW1lbnQudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdFBhdHRlcm4pIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuT2JqZWN0UGF0dGVybkFzU3ByZWFkKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIgJiYgZXhwci5vcGVyYXRvciA9PT0gXCI9XCIpIHtcbiAgICAgICAgZXhwci50eXBlID0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRQYXR0ZXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5NZW1iZXJFeHByZXNzaW9uICYmXG4gICAgICAgICAgICBleHByLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5DYWxsRXhwcmVzc2lvbiAmJlxuICAgICAgICAgICAgZXhwci50eXBlICE9PSBhc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbiAmJlxuICAgICAgICAgICAgZXhwci50eXBlICE9PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm5cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyAxMy4yLjMgQmluZGluZ1BhdHRlcm5cblxuZnVuY3Rpb24gcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBleHByKSB7XG4gICAgdmFyIGksIGxlbiwgcHJvcGVydHksIGVsZW1lbnQsXG4gICAgICAgIGFsbG93RGVzdHJ1Y3R1cmluZyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5kZXN0cnVjdHVyaW5nO1xuXG4gICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTtcbiAgICB9XG5cbiAgICBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuT2JqZWN0UGF0dGVybjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gZXhwci5wcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IGV4cHIucHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5raW5kICE9PSBcImluaXRcIikge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ybWFsc0xpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwcm9wZXJ0eS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikge1xuICAgICAgICBleHByLnR5cGUgPSBhc3ROb2RlVHlwZXMuQXJyYXlQYXR0ZXJuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBleHByLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZXhwci5lbGVtZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIGV4cHIsIGV4cHIubmFtZSk7XG4gICAgfSBlbHNlIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50KSB7XG4gICAgICAgIC8vIEJpbmRpbmdSZXN0RWxlbWVudCBvbmx5IGFsbG93cyBCaW5kaW5nSWRlbnRpZmllclxuICAgICAgICBpZiAoZXhwci5hcmd1bWVudC50eXBlICE9PSBhc3ROb2RlVHlwZXMuSWRlbnRpZmllcikge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBleHByLmFyZ3VtZW50LCBleHByLmFyZ3VtZW50Lm5hbWUpO1xuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlID09PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb24gJiYgZXhwci5vcGVyYXRvciA9PT0gXCI9XCIpIHtcbiAgICAgICAgZXhwci50eXBlID0gYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRQYXR0ZXJuO1xuICAgIH0gZWxzZSBpZiAoZXhwci50eXBlICE9PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudFBhdHRlcm4pIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ybWFsc0xpc3QpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpIHtcbiAgICB2YXIgdG9rZW4sIGxlZnQsIHJpZ2h0LCBub2RlLCBwYXJhbXMsXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgc3RhcnRzV2l0aFBhcmVuID0gZmFsc2UsXG4gICAgICAgIG9sZFBhcmVudGhlc2lzQ291bnQgPSBzdGF0ZS5wYXJlbnRoZXNpc0NvdW50LFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycztcblxuICAgIC8vIE5vdGUgdGhhdCAneWllbGQnIGlzIHRyZWF0ZWQgYXMgYSBrZXl3b3JkIGluIHN0cmljdCBtb2RlLCBidXQgYVxuICAgIC8vIGNvbnRleHR1YWwga2V5d29yZCAoaWRlbnRpZmllcikgaW4gbm9uLXN0cmljdCBtb2RlLCBzbyB3ZSBuZWVkXG4gICAgLy8gdG8gdXNlIG1hdGNoS2V5d29yZCBhbmQgbWF0Y2hDb250ZXh0dWFsS2V5d29yZCBhcHByb3ByaWF0ZWx5LlxuICAgIGlmIChhbGxvd0dlbmVyYXRvcnMgJiYgKChzdGF0ZS55aWVsZEFsbG93ZWQgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcInlpZWxkXCIpKSB8fCAoc3RyaWN0ICYmIG1hdGNoS2V5d29yZChcInlpZWxkXCIpKSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlWWllbGRFeHByZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAobWF0Y2goXCIoXCIpKSB7XG4gICAgICAgIHRva2VuID0gbG9va2FoZWFkMigpO1xuICAgICAgICBpZiAoKHRva2VuLnZhbHVlID09PSBcIilcIiAmJiB0b2tlbi50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB8fCB0b2tlbi52YWx1ZSA9PT0gXCIuLi5cIikge1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyc2VQYXJhbXMoKTtcbiAgICAgICAgICAgIGlmICghbWF0Y2goXCI9PlwiKSkge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRzV2l0aFBhcmVuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyByZXZlcnQgdG8gdGhlIHByZXZpb3VzIGxvb2thaGVhZCBzdHlsZSBvYmplY3RcbiAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICBub2RlID0gbGVmdCA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7XG5cbiAgICBpZiAobWF0Y2goXCI9PlwiKSAmJlxuICAgICAgICAgICAgKHN0YXRlLnBhcmVudGhlc2lzQ291bnQgPT09IG9sZFBhcmVudGhlc2lzQ291bnQgfHxcbiAgICAgICAgICAgIHN0YXRlLnBhcmVudGhlc2lzQ291bnQgPT09IChvbGRQYXJlbnRoZXNpc0NvdW50ICsgMSkpKSB7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSByZWludGVycHJldEFzQ292ZXJGb3JtYWxzTGlzdChbIG5vZGUgXSk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb24gfHxcbiAgICAgICAgICAgIG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbiB8fFxuICAgICAgICAgICAgbm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuT2JqZWN0RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgaWYgKCFzdGFydHNXaXRoUGFyZW4pIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3QoWyBub2RlIF0pO1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLlNlcXVlbmNlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcGFyYW1zID0gcmVpbnRlcnByZXRBc0NvdmVyRm9ybWFsc0xpc3Qobm9kZS5leHByZXNzaW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBzdGF0ZS5wYXJlbnRoZXNpc0NvdW50LS07XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbihwYXJhbXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2hBc3NpZ24oKSkge1xuXG4gICAgICAgIC8vIDExLjEzLjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBsZWZ0LnR5cGUgPT09IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyICYmIHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKGxlZnQubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFUy5uZXh0IGRyYWYgMTEuMTMgUnVudGltZSBTZW1hbnRpY3Mgc3RlcCAxXG4gICAgICAgIGlmIChtYXRjaChcIj1cIikgJiYgKG5vZGUudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uKSkge1xuICAgICAgICAgICAgcmVpbnRlcnByZXRBc0Fzc2lnbm1lbnRCaW5kaW5nUGF0dGVybihub2RlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNMZWZ0SGFuZFNpZGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IGxleCgpO1xuICAgICAgICByaWdodCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcblxuICAgICAgICBub2RlID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgbGVmdCwgcmlnaHQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbn1cblxuLy8gMTEuMTQgQ29tbWEgT3BlcmF0b3JcblxuZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkge1xuICAgIHZhciBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgZXhwciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSxcbiAgICAgICAgZXhwcmVzc2lvbnMgPSBbIGV4cHIgXSxcbiAgICAgICAgc2VxdWVuY2UsIHNwcmVhZEZvdW5kO1xuXG4gICAgaWYgKG1hdGNoKFwiLFwiKSkge1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghbWF0Y2goXCIsXCIpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGV4cHIgPSBwYXJzZVNwcmVhZE9yQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2goZXhwcik7XG5cbiAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgc3ByZWFkRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkVsZW1lbnRBZnRlclNwcmVhZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNlcXVlbmNlID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb24oZXhwcmVzc2lvbnMpKTtcbiAgICB9XG5cbiAgICBpZiAoc3ByZWFkRm91bmQgJiYgbG9va2FoZWFkMigpLnZhbHVlICE9PSBcIj0+XCIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbFNwcmVhZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcXVlbmNlIHx8IGV4cHI7XG59XG5cbi8vIDEyLjEgQmxvY2tcblxuZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRMaXN0KCkge1xuICAgIHZhciBsaXN0ID0gW10sXG4gICAgICAgIHN0YXRlbWVudDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxpc3QucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0O1xufVxuXG5mdW5jdGlvbiBwYXJzZUJsb2NrKCkge1xuICAgIHZhciBibG9jayxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgYmxvY2sgPSBwYXJzZVN0YXRlbWVudExpc3QoKTtcblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCbG9ja1N0YXRlbWVudChibG9jaykpO1xufVxuXG4vLyAxMi4yIFZhcmlhYmxlIFN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIHtcbiAgICB2YXIgdG9rZW4sXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsZXgoKTtcblxuICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5JZGVudGlmaWVyKSB7XG4gICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCAmJiBzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWRlbnRpZmllcih0b2tlbi52YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkge1xuICAgIHZhciBpZCxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIGluaXQgPSBudWxsO1xuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgaWQgPSBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGlkID0gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7XG4gICAgICAgIHJlaW50ZXJwcmV0QXNBc3NpZ25tZW50QmluZGluZ1BhdHRlcm4oaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlkID0gc3RhdGUuYWxsb3dLZXl3b3JkID8gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgOiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgICAgICAvLyAxMi4yLjFcbiAgICAgICAgaWYgKHN0cmljdCAmJiBzeW50YXguaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFZlcmlmeSBhZ2FpbnN0IGZlYXR1cmUgZmxhZ3NcbiAgICBpZiAoa2luZCA9PT0gXCJjb25zdFwiKSB7XG4gICAgICAgIGlmICghbWF0Y2goXCI9XCIpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob1VuaW50aWFsaXplZENvbnN0KTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3QoXCI9XCIpO1xuICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH0gZWxzZSBpZiAobWF0Y2goXCI9XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpIHtcbiAgICB2YXIgbGlzdCA9IFtdO1xuXG4gICAgZG8ge1xuICAgICAgICBsaXN0LnB1c2gocGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKGtpbmQpKTtcbiAgICAgICAgaWYgKCFtYXRjaChcIixcIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxleCgpO1xuICAgIH0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkge1xuICAgIHZhciBkZWNsYXJhdGlvbnM7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwidmFyXCIpO1xuXG4gICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBcInZhclwiKTtcbn1cblxuLy8ga2luZCBtYXkgYmUgYGNvbnN0YCBvciBgbGV0YFxuLy8gQm90aCBhcmUgZXhwZXJpbWVudGFsIGFuZCBub3QgaW4gdGhlIHNwZWNpZmljYXRpb24geWV0LlxuLy8gc2VlIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6Y29uc3Rcbi8vIGFuZCBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmxldFxuZnVuY3Rpb24gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGtpbmQpIHtcbiAgICB2YXIgZGVjbGFyYXRpb25zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoa2luZCk7XG5cbiAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpKTtcbn1cblxuXG5mdW5jdGlvbiBwYXJzZVJlc3RFbGVtZW50KCkge1xuICAgIHZhciBwYXJhbSxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBsZXgoKTtcblxuICAgIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLk9iamVjdFBhdHRlcm5Bc1Jlc3RQYXJhbWV0ZXIpO1xuICAgIH1cblxuICAgIHBhcmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcblxuICAgIGlmIChtYXRjaChcIj1cIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcihsb29rYWhlYWQsIE1lc3NhZ2VzLkRlZmF1bHRSZXN0UGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICB0aHJvd0Vycm9yKGxvb2thaGVhZCwgTWVzc2FnZXMuUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVSZXN0RWxlbWVudChwYXJhbSkpO1xufVxuXG4vLyAxMi4zIEVtcHR5IFN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkge1xuICAgIGV4cGVjdChcIjtcIik7XG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUVtcHR5U3RhdGVtZW50KCk7XG59XG5cbi8vIDEyLjQgRXhwcmVzc2lvbiBTdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCkge1xuICAgIHZhciBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpO1xufVxuXG4vLyAxMi41IElmIHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkge1xuICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGU7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwiaWZcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIGNvbnNlcXVlbnQgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImVsc2VcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlU3RhdGVtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSWZTdGF0ZW1lbnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTtcbn1cblxuLy8gMTIuNiBJdGVyYXRpb24gU3RhdGVtZW50c1xuXG5mdW5jdGlvbiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImRvXCIpO1xuXG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247XG5cbiAgICBleHBlY3RLZXl3b3JkKFwid2hpbGVcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIGlmIChtYXRjaChcIjtcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZURvV2hpbGVTdGF0ZW1lbnQodGVzdCwgYm9keSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9uO1xuXG4gICAgZXhwZWN0S2V5d29yZChcIndoaWxlXCIpO1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uO1xuICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTtcblxuICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVXaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCkge1xuICAgIHZhciB0b2tlbiwgZGVjbGFyYXRpb25zLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIHRva2VuID0gbGV4KCk7XG4gICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIHRva2VuLnZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRm9yU3RhdGVtZW50KG9wdHMpIHtcbiAgICB2YXIgaW5pdCwgdGVzdCwgdXBkYXRlLCBsZWZ0LCByaWdodCwgYm9keSwgb3BlcmF0b3IsIG9sZEluSXRlcmF0aW9uO1xuICAgIHZhciBhbGxvd0Zvck9mID0gZXh0cmEuZWNtYUZlYXR1cmVzLmZvck9mLFxuICAgICAgICBhbGxvd0Jsb2NrQmluZGluZ3MgPSBleHRyYS5lY21hRmVhdHVyZXMuYmxvY2tCaW5kaW5ncztcblxuICAgIGluaXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJmb3JcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgaWYgKG1hdGNoKFwiO1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChtYXRjaEtleXdvcmQoXCJ2YXJcIikgfHxcbiAgICAgICAgICAgIChhbGxvd0Jsb2NrQmluZGluZ3MgJiYgKG1hdGNoS2V5d29yZChcImxldFwiKSB8fCBtYXRjaEtleXdvcmQoXCJjb25zdFwiKSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlO1xuICAgICAgICAgICAgaW5pdCA9IHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChpbml0LmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKFwiaW5cIikgfHwgKGFsbG93Rm9yT2YgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcIm9mXCIpKSkge1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9IGxvb2thaGVhZDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBpcyBcInZhclwiIGNoZWNrIGhlcmUgcmVhbGx5IG5lZWRlZD8gd2FzblwidCBpbiAxLjIuMlxuICAgICAgICAgICAgICAgICAgICBpZiAoISgob3BlcmF0b3IudmFsdWUgPT09IFwiaW5cIiB8fCBpbml0LmtpbmQgIT09IFwidmFyXCIpICYmIGluaXQuZGVjbGFyYXRpb25zWzBdLmluaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBpbml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7XG4gICAgICAgICAgICBpbml0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGluaXQudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLkFycmF5RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIGluaXQudHlwZSA9IGFzdE5vZGVUeXBlcy5BcnJheVBhdHRlcm47XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgaWYgKGFsbG93Rm9yT2YgJiYgbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcIm9mXCIpKSB7XG4gICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDtcbiAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaEtleXdvcmQoXCJpblwiKSkge1xuICAgICAgICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRTaWRlKGluaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9wZXJhdG9yID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgZXhwZWN0KFwiO1wiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuXG4gICAgICAgIGlmICghbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KFwiO1wiKTtcblxuICAgICAgICBpZiAoIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICAgICAgdXBkYXRlID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7XG5cbiAgICBpZiAoIShvcHRzICE9PSB1bmRlZmluZWQgJiYgb3B0cy5pZ25vcmVCb2R5KSkge1xuICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICB9XG5cbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uO1xuXG4gICAgaWYgKHR5cGVvZiBsZWZ0ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5pdCwgdGVzdCwgdXBkYXRlLCBib2R5KTtcbiAgICB9XG5cbiAgICBpZiAoZXh0cmEuZWNtYUZlYXR1cmVzLmZvck9mICYmIG9wZXJhdG9yLnZhbHVlID09PSBcIm9mXCIpIHtcbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZvck9mU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRm9ySW5TdGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpO1xufVxuXG4vLyAxMi43IFRoZSBjb250aW51ZSBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0YXRlbWVudCgpIHtcbiAgICB2YXIgbGFiZWwgPSBudWxsO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNvbnRpbnVlXCIpO1xuXG4gICAgLy8gT3B0aW1pemUgdGhlIG1vc3QgY29tbW9uIGZvcm06IFwiY29udGludWU7XCIuXG4gICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzQikge1xuICAgICAgICBsZXgoKTtcblxuICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sYWJlbFNldC5oYXMobGFiZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXN0YXRlLmluSXRlcmF0aW9uKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxhYmVsKTtcbn1cblxuLy8gMTIuOCBUaGUgYnJlYWsgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGxhYmVsID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJicmVha1wiKTtcblxuICAgIC8vIENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAoVSswMDNCKS5cbiAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7XG4gICAgICAgIGxleCgpO1xuXG4gICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmluU3dpdGNoKSkge1xuICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTtcbiAgICB9XG5cbiAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHtcbiAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5sYWJlbFNldC5oYXMobGFiZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobGFiZWwpO1xufVxuXG4vLyAxMi45IFRoZSByZXR1cm4gc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkge1xuICAgIHZhciBhcmd1bWVudCA9IG51bGw7XG5cbiAgICBleHBlY3RLZXl3b3JkKFwicmV0dXJuXCIpO1xuXG4gICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9keSAmJiAhZXh0cmEuZWNtYUZlYXR1cmVzLmdsb2JhbFJldHVybikge1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pO1xuICAgIH1cblxuICAgIC8vIFwicmV0dXJuXCIgZm9sbG93ZWQgYnkgYSBzcGFjZSBhbmQgYW4gaWRlbnRpZmllciBpcyB2ZXJ5IGNvbW1vbi5cbiAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDIwKSB7XG4gICAgICAgIGlmIChzeW50YXguaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHtcbiAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG4gICAgICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG51bGwpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2goXCI7XCIpKSB7XG4gICAgICAgIGlmICghbWF0Y2goXCJ9XCIpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50KTtcbn1cblxuLy8gMTIuMTAgVGhlIHdpdGggc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlV2l0aFN0YXRlbWVudCgpIHtcbiAgICB2YXIgb2JqZWN0LCBib2R5O1xuXG4gICAgaWYgKHN0cmljdCkge1xuICAgICAgICAvLyBUT0RPKGlrYXJpZW5hdG9yKTogU2hvdWxkIHdlIHVwZGF0ZSB0aGUgdGVzdCBjYXNlcyBpbnN0ZWFkP1xuICAgICAgICBza2lwQ29tbWVudCgpO1xuICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdE1vZGVXaXRoKTtcbiAgICB9XG5cbiAgICBleHBlY3RLZXl3b3JkKFwid2l0aFwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG5cbiAgICBvYmplY3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGV4cGVjdChcIilcIik7XG5cbiAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVXaXRoU3RhdGVtZW50KG9iamVjdCwgYm9keSk7XG59XG5cbi8vIDEyLjEwIFRoZSBzd2l0aCBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VTd2l0Y2hDYXNlKCkge1xuICAgIHZhciB0ZXN0LCBjb25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBpZiAobWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgdGVzdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXhwZWN0S2V5d29yZChcImNhc2VcIik7XG4gICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTtcbiAgICB9XG4gICAgZXhwZWN0KFwiOlwiKTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2goXCJ9XCIpIHx8IG1hdGNoS2V5d29yZChcImRlZmF1bHRcIikgfHwgbWF0Y2hLZXl3b3JkKFwiY2FzZVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zZXF1ZW50LnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVTd2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGRpc2NyaW1pbmFudCwgY2FzZXMsIGNsYXVzZSwgb2xkSW5Td2l0Y2gsIGRlZmF1bHRGb3VuZDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJzd2l0Y2hcIik7XG5cbiAgICBleHBlY3QoXCIoXCIpO1xuXG4gICAgZGlzY3JpbWluYW50ID0gcGFyc2VFeHByZXNzaW9uKCk7XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuXG4gICAgZXhwZWN0KFwie1wiKTtcblxuICAgIGNhc2VzID0gW107XG5cbiAgICBpZiAobWF0Y2goXCJ9XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpO1xuICAgIH1cblxuICAgIG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7XG4gICAgc3RhdGUuaW5Td2l0Y2ggPSB0cnVlO1xuICAgIGRlZmF1bHRGb3VuZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGlmIChtYXRjaChcIn1cIikpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNsYXVzZSA9IHBhcnNlU3dpdGNoQ2FzZSgpO1xuICAgICAgICBpZiAoY2xhdXNlLnRlc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5NdWx0aXBsZURlZmF1bHRzSW5Td2l0Y2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlcy5wdXNoKGNsYXVzZSk7XG4gICAgfVxuXG4gICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJblN3aXRjaDtcblxuICAgIGV4cGVjdChcIn1cIik7XG5cbiAgICByZXR1cm4gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpO1xufVxuXG4vLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVtZW50XG5cbmZ1bmN0aW9uIHBhcnNlVGhyb3dTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGFyZ3VtZW50O1xuXG4gICAgZXhwZWN0S2V5d29yZChcInRocm93XCIpO1xuXG4gICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5ld2xpbmVBZnRlclRocm93KTtcbiAgICB9XG5cbiAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRocm93U3RhdGVtZW50KGFyZ3VtZW50KTtcbn1cblxuLy8gMTIuMTQgVGhlIHRyeSBzdGF0ZW1lbnRcblxuZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVzZSgpIHtcbiAgICB2YXIgcGFyYW0sIGJvZHksXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZyxcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHBhcmFtU2V0OiBuZXcgU3RyaW5nTWFwKClcbiAgICAgICAgfTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJjYXRjaFwiKTtcblxuICAgIGV4cGVjdChcIihcIik7XG4gICAgaWYgKG1hdGNoKFwiKVwiKSkge1xuICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2goXCJbXCIpKSB7XG4gICAgICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlQXJyYXlJbml0aWFsaXNlcigpO1xuICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKFwie1wiKSkge1xuXG4gICAgICAgIGlmICghYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlT2JqZWN0SW5pdGlhbGlzZXIoKTtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgIH1cblxuICAgIC8vIDEyLjE0LjFcbiAgICBpZiAoc3RyaWN0ICYmIHBhcmFtLm5hbWUgJiYgc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQocGFyYW0ubmFtZSkpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RDYXRjaFZhcmlhYmxlKTtcbiAgICB9XG5cbiAgICBleHBlY3QoXCIpXCIpO1xuICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2F0Y2hDbGF1c2UocGFyYW0sIGJvZHkpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUcnlTdGF0ZW1lbnQoKSB7XG4gICAgdmFyIGJsb2NrLCBoYW5kbGVyID0gbnVsbCwgZmluYWxpemVyID0gbnVsbDtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJ0cnlcIik7XG5cbiAgICBibG9jayA9IHBhcnNlQmxvY2soKTtcblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJjYXRjaFwiKSkge1xuICAgICAgICBoYW5kbGVyID0gcGFyc2VDYXRjaENsYXVzZSgpO1xuICAgIH1cblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJmaW5hbGx5XCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBmaW5hbGl6ZXIgPSBwYXJzZUJsb2NrKCk7XG4gICAgfVxuXG4gICAgaWYgKCFoYW5kbGVyICYmICFmaW5hbGl6ZXIpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTm9DYXRjaE9yRmluYWxseSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVRyeVN0YXRlbWVudChibG9jaywgaGFuZGxlciwgZmluYWxpemVyKTtcbn1cblxuLy8gMTIuMTUgVGhlIGRlYnVnZ2VyIHN0YXRlbWVudFxuXG5mdW5jdGlvbiBwYXJzZURlYnVnZ2VyU3RhdGVtZW50KCkge1xuICAgIGV4cGVjdEtleXdvcmQoXCJkZWJ1Z2dlclwiKTtcblxuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcblxuICAgIHJldHVybiBhc3ROb2RlRmFjdG9yeS5jcmVhdGVEZWJ1Z2dlclN0YXRlbWVudCgpO1xufVxuXG4vLyAxMiBTdGF0ZW1lbnRzXG5cbmZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KCkge1xuICAgIHZhciB0eXBlID0gbG9va2FoZWFkLnR5cGUsXG4gICAgICAgIGV4cHIsXG4gICAgICAgIGxhYmVsZWRCb2R5LFxuICAgICAgICBtYXJrZXI7XG5cbiAgICBpZiAodHlwZSA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJ7XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlQmxvY2soKTtcbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7XG4gICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwiO1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRW1wdHlTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwie1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgICBjYXNlIFwiKFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7XG4gICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlIFwiYnJlYWtcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUJyZWFrU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcImNvbnRpbnVlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VDb250aW51ZVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJkZWJ1Z2dlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZG9cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZURvV2hpbGVTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZm9yXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VGb3JTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSk7XG4gICAgICAgICAgICBjYXNlIFwiaWZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZUlmU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInJldHVyblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInN3aXRjaFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIHBhcnNlU3dpdGNoU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcInRocm93XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VUaHJvd1N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ0cnlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVRyeVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgY2FzZSBcIndoaWxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VXaGlsZVN0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGNhc2UgXCJ3aXRoXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgcGFyc2VXaXRoU3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIC8vIDEyLjEyIExhYmVsbGVkIFN0YXRlbWVudHNcbiAgICBpZiAoKGV4cHIudHlwZSA9PT0gYXN0Tm9kZVR5cGVzLklkZW50aWZpZXIpICYmIG1hdGNoKFwiOlwiKSkge1xuICAgICAgICBsZXgoKTtcblxuICAgICAgICBpZiAoc3RhdGUubGFiZWxTZXQuaGFzKGV4cHIubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlJlZGVjbGFyYXRpb24sIFwiTGFiZWxcIiwgZXhwci5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlLmxhYmVsU2V0LnNldChleHByLm5hbWUsIHRydWUpO1xuICAgICAgICBsYWJlbGVkQm9keSA9IHBhcnNlU3RhdGVtZW50KCk7XG4gICAgICAgIHN0YXRlLmxhYmVsU2V0LmRlbGV0ZShleHByLm5hbWUpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGV4cHIsIGxhYmVsZWRCb2R5KSk7XG4gICAgfVxuXG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChleHByKSk7XG59XG5cbi8vIDEzIEZ1bmN0aW9uIERlZmluaXRpb25cblxuLy8gZnVuY3Rpb24gcGFyc2VDb25jaXNlQm9keSgpIHtcbi8vICAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4vLyAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcbi8vICAgICB9XG4vLyAgICAgcmV0dXJuIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbi8vIH1cblxuZnVuY3Rpb24gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCkge1xuICAgIHZhciBzb3VyY2VFbGVtZW50LCBzb3VyY2VFbGVtZW50cyA9IFtdLCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQsXG4gICAgICAgIG9sZExhYmVsU2V0LCBvbGRJbkl0ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rpb25Cb2R5LCBvbGRQYXJlbnRoZXNpc0NvdW50LFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdChcIntcIik7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcblxuICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7XG4gICAgICAgIGlmIChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gYXN0Tm9kZVR5cGVzLkxpdGVyYWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnJhbmdlWzBdICsgMSwgdG9rZW4ucmFuZ2VbMV0gLSAxKTtcbiAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gXCJ1c2Ugc3RyaWN0XCIpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9sZExhYmVsU2V0ID0gc3RhdGUubGFiZWxTZXQ7XG4gICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjtcbiAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoO1xuICAgIG9sZEluRnVuY3Rpb25Cb2R5ID0gc3RhdGUuaW5GdW5jdGlvbkJvZHk7XG4gICAgb2xkUGFyZW50aGVzaXNDb3VudCA9IHN0YXRlLnBhcmVudGhlc2lzQ291bnQ7XG5cbiAgICBzdGF0ZS5sYWJlbFNldCA9IG5ldyBTdHJpbmdNYXAoKTtcbiAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgIHN0YXRlLmluU3dpdGNoID0gZmFsc2U7XG4gICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSB0cnVlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG5cbiAgICAgICAgaWYgKG1hdGNoKFwifVwiKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgZXhwZWN0KFwifVwiKTtcblxuICAgIHN0YXRlLmxhYmVsU2V0ID0gb2xkTGFiZWxTZXQ7XG4gICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjtcbiAgICBzdGF0ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNoO1xuICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gb2xkSW5GdW5jdGlvbkJvZHk7XG4gICAgc3RhdGUucGFyZW50aGVzaXNDb3VudCA9IG9sZFBhcmVudGhlc2lzQ291bnQ7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVCbG9ja1N0YXRlbWVudChzb3VyY2VFbGVtZW50cykpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVBhcmFtKG9wdGlvbnMsIHBhcmFtLCBuYW1lKSB7XG5cbiAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZChuYW1lKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1TZXQuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBvcHRpb25zLnN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbUR1cGU7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQobmFtZSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkID0gcGFyYW07XG4gICAgICAgICAgICBvcHRpb25zLm1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3ludGF4LmlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChuYW1lLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyYW1TZXQuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpcnN0UmVzdHJpY3RlZCA9IHBhcmFtO1xuICAgICAgICAgICAgb3B0aW9ucy5tZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1EdXBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9wdGlvbnMucGFyYW1TZXQuc2V0KG5hbWUsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBhcmFtKG9wdGlvbnMpIHtcbiAgICB2YXIgdG9rZW4sIHBhcmFtLCBkZWYsXG4gICAgICAgIGFsbG93UmVzdFBhcmFtcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5yZXN0UGFyYW1zLFxuICAgICAgICBhbGxvd0Rlc3RydWN0dXJpbmcgPSBleHRyYS5lY21hRmVhdHVyZXMuZGVzdHJ1Y3R1cmluZyxcbiAgICAgICAgYWxsb3dEZWZhdWx0UGFyYW1zID0gZXh0cmEuZWNtYUZlYXR1cmVzLmRlZmF1bHRQYXJhbXMsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgaWYgKHRva2VuLnZhbHVlID09PSBcIi4uLlwiKSB7XG4gICAgICAgIGlmICghYWxsb3dSZXN0UGFyYW1zKSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbSA9IHBhcnNlUmVzdEVsZW1lbnQoKTtcbiAgICAgICAgdmFsaWRhdGVQYXJhbShvcHRpb25zLCBwYXJhbS5hcmd1bWVudCwgcGFyYW0uYXJndW1lbnQubmFtZSk7XG4gICAgICAgIG9wdGlvbnMucGFyYW1zLnB1c2gocGFyYW0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKFwiW1wiKSkge1xuICAgICAgICBpZiAoIWFsbG93RGVzdHJ1Y3R1cmluZykge1xuICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW0gPSBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKTtcbiAgICAgICAgcmVpbnRlcnByZXRBc0Rlc3RydWN0dXJlZFBhcmFtZXRlcihvcHRpb25zLCBwYXJhbSk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgaWYgKCFhbGxvd0Rlc3RydWN0dXJpbmcpIHtcbiAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtID0gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpO1xuICAgICAgICByZWludGVycHJldEFzRGVzdHJ1Y3R1cmVkUGFyYW1ldGVyKG9wdGlvbnMsIHBhcmFtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgICAgIHZhbGlkYXRlUGFyYW0ob3B0aW9ucywgdG9rZW4sIHRva2VuLnZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2goXCI9XCIpKSB7XG4gICAgICAgIGlmIChhbGxvd0RlZmF1bHRQYXJhbXMgfHwgYWxsb3dEZXN0cnVjdHVyaW5nKSB7XG4gICAgICAgICAgICBsZXgoKTtcbiAgICAgICAgICAgIGRlZiA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICsrb3B0aW9ucy5kZWZhdWx0Q291bnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWYpIHtcbiAgICAgICAgb3B0aW9ucy5wYXJhbXMucHVzaChtYXJrZXJBcHBseShcbiAgICAgICAgICAgIG1hcmtlcixcbiAgICAgICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUFzc2lnbm1lbnRQYXR0ZXJuKFxuICAgICAgICAgICAgICAgIHBhcmFtLFxuICAgICAgICAgICAgICAgIGRlZlxuICAgICAgICAgICAgKVxuICAgICAgICApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBvcHRpb25zLnBhcmFtcy5wdXNoKHBhcmFtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIW1hdGNoKFwiKVwiKTtcbn1cblxuXG5mdW5jdGlvbiBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpIHtcbiAgICB2YXIgb3B0aW9ucztcblxuICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHBhcmFtczogW10sXG4gICAgICAgIGRlZmF1bHRDb3VudDogMCxcbiAgICAgICAgZmlyc3RSZXN0cmljdGVkOiBmaXJzdFJlc3RyaWN0ZWRcbiAgICB9O1xuXG4gICAgZXhwZWN0KFwiKFwiKTtcblxuICAgIGlmICghbWF0Y2goXCIpXCIpKSB7XG4gICAgICAgIG9wdGlvbnMucGFyYW1TZXQgPSBuZXcgU3RyaW5nTWFwKCk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFwYXJzZVBhcmFtKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHBlY3QoXCIsXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwZWN0KFwiKVwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHBhcmFtczogb3B0aW9ucy5wYXJhbXMsXG4gICAgICAgIHN0cmljdGVkOiBvcHRpb25zLnN0cmljdGVkLFxuICAgICAgICBmaXJzdFJlc3RyaWN0ZWQ6IG9wdGlvbnMuZmlyc3RSZXN0cmljdGVkLFxuICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2VcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oaWRlbnRpZmllcklzT3B0aW9uYWwpIHtcbiAgICAgICAgdmFyIGlkID0gbnVsbCwgYm9keSwgdG9rZW4sIHRtcCwgZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlLCBwcmV2aW91c1N0cmljdCwgcHJldmlvdXNZaWVsZEFsbG93ZWQsIGdlbmVyYXRvcixcbiAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICAgICAgYWxsb3dHZW5lcmF0b3JzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmdlbmVyYXRvcnM7XG5cbiAgICAgICAgZXhwZWN0S2V5d29yZChcImZ1bmN0aW9uXCIpO1xuXG4gICAgICAgIGdlbmVyYXRvciA9IGZhbHNlO1xuICAgICAgICBpZiAoYWxsb3dHZW5lcmF0b3JzICYmIG1hdGNoKFwiKlwiKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgICAgICBnZW5lcmF0b3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCAhbWF0Y2goXCIoXCIpKSB7XG5cbiAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkO1xuXG4gICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3ludGF4LmlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7XG4gICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7XG4gICAgICAgIGlmICh0bXAubWVzc2FnZSkge1xuICAgICAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7XG4gICAgICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkO1xuICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBnZW5lcmF0b3I7XG5cbiAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpO1xuXG4gICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgICAgICB0aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmljdCAmJiB0bXAuc3RyaWN0ZWQpIHtcbiAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0bXAuc3RyaWN0ZWQsIG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgICAgICBzdGF0ZS55aWVsZEFsbG93ZWQgPSBwcmV2aW91c1lpZWxkQWxsb3dlZDtcblxuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkoXG4gICAgICAgICAgICBtYXJrZXIsXG4gICAgICAgICAgICBhc3ROb2RlRmFjdG9yeS5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHRtcC5wYXJhbXMsXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbmZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uKCkge1xuICAgIHZhciB0b2tlbiwgaWQgPSBudWxsLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHRtcCwgYm9keSwgcHJldmlvdXNTdHJpY3QsIHByZXZpb3VzWWllbGRBbGxvd2VkLCBnZW5lcmF0b3IsXG4gICAgICAgIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBhbGxvd0dlbmVyYXRvcnMgPSBleHRyYS5lY21hRmVhdHVyZXMuZ2VuZXJhdG9ycztcblxuICAgIGV4cGVjdEtleXdvcmQoXCJmdW5jdGlvblwiKTtcblxuICAgIGdlbmVyYXRvciA9IGZhbHNlO1xuXG4gICAgaWYgKGFsbG93R2VuZXJhdG9ycyAmJiBtYXRjaChcIipcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGdlbmVyYXRvciA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaChcIihcIikpIHtcbiAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7XG4gICAgICAgIGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKHN5bnRheC5pc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzeW50YXguaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW50YXguaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlLCBleHRyYS5lY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCk7XG4gICAgZmlyc3RSZXN0cmljdGVkID0gdG1wLmZpcnN0UmVzdHJpY3RlZDtcbiAgICBpZiAodG1wLm1lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlO1xuICAgIH1cblxuICAgIHByZXZpb3VzU3RyaWN0ID0gc3RyaWN0O1xuICAgIHByZXZpb3VzWWllbGRBbGxvd2VkID0gc3RhdGUueWllbGRBbGxvd2VkO1xuICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IGdlbmVyYXRvcjtcblxuICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTtcblxuICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7XG4gICAgICAgIHRocm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKHN0cmljdCAmJiB0bXAuc3RyaWN0ZWQpIHtcbiAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRtcC5zdHJpY3RlZCwgbWVzc2FnZSk7XG4gICAgfVxuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuICAgIHN0YXRlLnlpZWxkQWxsb3dlZCA9IHByZXZpb3VzWWllbGRBbGxvd2VkO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KFxuICAgICAgICBtYXJrZXIsXG4gICAgICAgIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgdG1wLnBhcmFtcyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICBnZW5lcmF0b3IsXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICApXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VZaWVsZEV4cHJlc3Npb24oKSB7XG4gICAgdmFyIHlpZWxkVG9rZW4sIGRlbGVnYXRlRmxhZywgZXhwciwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICB5aWVsZFRva2VuID0gbGV4KCk7XG4gICAgYXNzZXJ0KHlpZWxkVG9rZW4udmFsdWUgPT09IFwieWllbGRcIiwgXCJDYWxsZWQgcGFyc2VZaWVsZEV4cHJlc3Npb24gd2l0aCBub24teWllbGQgbG9va2FoZWFkLlwiKTtcblxuICAgIGlmICghc3RhdGUueWllbGRBbGxvd2VkKSB7XG4gICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFlpZWxkKTtcbiAgICB9XG5cbiAgICBkZWxlZ2F0ZUZsYWcgPSBmYWxzZTtcbiAgICBpZiAobWF0Y2goXCIqXCIpKSB7XG4gICAgICAgIGxleCgpO1xuICAgICAgICBkZWxlZ2F0ZUZsYWcgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkge1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVZaWVsZEV4cHJlc3Npb24obnVsbCwgZGVsZWdhdGVGbGFnKSk7XG4gICAgfVxuXG4gICAgaWYgKCFtYXRjaChcIjtcIikgJiYgIW1hdGNoKFwiKVwiKSkge1xuICAgICAgICBpZiAoIW1hdGNoKFwifVwiKSAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBleHByID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlWWllbGRFeHByZXNzaW9uKGV4cHIsIGRlbGVnYXRlRmxhZykpO1xufVxuXG4vLyBNb2R1bGVzIGdyYW1tYXIgZnJvbTpcbi8vIHBlb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbFxuXG5mdW5jdGlvbiBwYXJzZU1vZHVsZVNwZWNpZmllcigpIHtcbiAgICB2YXIgbWFya2VyID0gbWFya2VyQ3JlYXRlKCksXG4gICAgICAgIHNwZWNpZmllcjtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkge1xuICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkTW9kdWxlU3BlY2lmaWVyKTtcbiAgICB9XG4gICAgc3BlY2lmaWVyID0gYXN0Tm9kZUZhY3RvcnkuY3JlYXRlTGl0ZXJhbEZyb21Tb3VyY2UobGV4KCksIHNvdXJjZSk7XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgc3BlY2lmaWVyKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnRTcGVjaWZpZXIoKSB7XG4gICAgdmFyIGV4cG9ydGVkLCBsb2NhbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgaWYgKG1hdGNoS2V5d29yZChcImRlZmF1bHRcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIGxvY2FsID0gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJZGVudGlmaWVyKFwiZGVmYXVsdFwiKSk7XG4gICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH0gZnJvbSBcInNvbWV0aGluZ1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2FsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTtcbiAgICB9XG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJhc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgZXhwb3J0ZWQgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0U3BlY2lmaWVyKGxvY2FsLCBleHBvcnRlZCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cG9ydE5hbWVkRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIGRlY2xhcmF0aW9uID0gbnVsbCxcbiAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllcixcbiAgICAgICAgc3JjID0gbnVsbCwgc3BlY2lmaWVycyA9IFtdLFxuICAgICAgICBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJleHBvcnRcIik7XG5cbiAgICAvLyBub24tZGVmYXVsdCBleHBvcnRcbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBleHBvcnQgdmFyIGYgPSAxO1xuICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcImxldFwiOlxuICAgICAgICAgICAgY2FzZSBcImNvbnN0XCI6XG4gICAgICAgICAgICBjYXNlIFwidmFyXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2xhc3NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0TmFtZWREZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgc3BlY2lmaWVycywgbnVsbCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cGVjdChcIntcIik7XG4gICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaXNFeHBvcnRGcm9tSWRlbnRpZmllciA9IGlzRXhwb3J0RnJvbUlkZW50aWZpZXIgfHwgbWF0Y2hLZXl3b3JkKFwiZGVmYXVsdFwiKTtcbiAgICAgICAgICAgIHNwZWNpZmllcnMucHVzaChwYXJzZUV4cG9ydFNwZWNpZmllcigpKTtcbiAgICAgICAgfSB3aGlsZSAobWF0Y2goXCIsXCIpICYmIGxleCgpICYmICFtYXRjaChcIn1cIikpO1xuICAgIH1cbiAgICBleHBlY3QoXCJ9XCIpO1xuXG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJmcm9tXCIpKSB7XG4gICAgICAgIC8vIGNvdmVyaW5nOlxuICAgICAgICAvLyBleHBvcnQge2RlZmF1bHR9IGZyb20gXCJmb29cIjtcbiAgICAgICAgLy8gZXhwb3J0IHtmb299IGZyb20gXCJmb29cIjtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7XG4gICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICB9IGVsc2UgaWYgKGlzRXhwb3J0RnJvbUlkZW50aWZpZXIpIHtcbiAgICAgICAgLy8gY292ZXJpbmc6XG4gICAgICAgIC8vIGV4cG9ydCB7ZGVmYXVsdH07IC8vIG1pc3NpbmcgZnJvbUNsYXVzZVxuICAgICAgICB0aHJvd0Vycm9yKHt9LCBsb29rYWhlYWQudmFsdWUgP1xuICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiA6IE1lc3NhZ2VzLk1pc3NpbmdGcm9tQ2xhdXNlLCBsb29rYWhlYWQudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNvdmVyXG4gICAgICAgIC8vIGV4cG9ydCB7Zm9vfTtcbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgIH1cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHBvcnROYW1lZERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzLCBzcmMpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIGRlY2xhcmF0aW9uID0gbnVsbCxcbiAgICAgICAgZXhwcmVzc2lvbiA9IG51bGwsXG4gICAgICAgIHBvc3NpYmxlSWRlbnRpZmllclRva2VuLFxuICAgICAgICBhbGxvd0NsYXNzZXMgPSBleHRyYS5lY21hRmVhdHVyZXMuY2xhc3NlcyxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICAvLyBjb3ZlcnM6XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgLi4uXG4gICAgZXhwZWN0S2V5d29yZChcImV4cG9ydFwiKTtcbiAgICBleHBlY3RLZXl3b3JkKFwiZGVmYXVsdFwiKTtcblxuICAgIGlmIChtYXRjaEtleXdvcmQoXCJmdW5jdGlvblwiKSB8fCBtYXRjaEtleXdvcmQoXCJjbGFzc1wiKSkge1xuICAgICAgICBwb3NzaWJsZUlkZW50aWZpZXJUb2tlbiA9IGxvb2thaGVhZDIoKTtcbiAgICAgICAgaWYgKHBvc3NpYmxlSWRlbnRpZmllclRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgICAgIC8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvbyAoKSB7fVxuICAgICAgICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgY2xhc3MgZm9vIHt9XG4gICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7fVxuICAgICAgICAvLyBleHBvcnQgZGVmYXVsdCBjbGFzcyB7fVxuICAgICAgICBpZiAobG9va2FoZWFkLnZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uID0gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWxsb3dDbGFzc2VzICYmIGxvb2thaGVhZC52YWx1ZSA9PT0gXCJjbGFzc1wiKSB7XG4gICAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnNlQ2xhc3NEZWNsYXJhdGlvbih0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUV4cG9ydERlZmF1bHREZWNsYXJhdGlvbihkZWNsYXJhdGlvbikpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJmcm9tXCIpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBjb3ZlcnM6XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQge307XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgW107XG4gICAgLy8gZXhwb3J0IGRlZmF1bHQgKDEgKyAyKTtcbiAgICBpZiAobWF0Y2goXCJ7XCIpKSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIltcIikpIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlQXJyYXlJbml0aWFsaXNlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGNvbnN1bWVTZW1pY29sb24oKTtcbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24oZXhwcmVzc2lvbikpO1xufVxuXG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0QWxsRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIHNyYyxcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICAvLyBjb3ZlcnM6XG4gICAgLy8gZXhwb3J0ICogZnJvbSBcImZvb1wiO1xuICAgIGV4cGVjdEtleXdvcmQoXCJleHBvcnRcIik7XG4gICAgZXhwZWN0KFwiKlwiKTtcbiAgICBpZiAoIW1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJmcm9tXCIpKSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIGxvb2thaGVhZC52YWx1ZSA/XG4gICAgICAgICAgICAgICAgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuIDogTWVzc2FnZXMuTWlzc2luZ0Zyb21DbGF1c2UsIGxvb2thaGVhZC52YWx1ZSk7XG4gICAgfVxuICAgIGxleCgpO1xuICAgIHNyYyA9IHBhcnNlTW9kdWxlU3BlY2lmaWVyKCk7XG4gICAgY29uc3VtZVNlbWljb2xvbigpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlRXhwb3J0QWxsRGVjbGFyYXRpb24oc3JjKSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXhwb3J0RGVjbGFyYXRpb24oKSB7XG4gICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbik7XG4gICAgfVxuICAgIHZhciBkZWNsYXJhdGlvblR5cGUgPSBsb29rYWhlYWQyKCkudmFsdWU7XG4gICAgaWYgKGRlY2xhcmF0aW9uVHlwZSA9PT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKCk7XG4gICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvblR5cGUgPT09IFwiKlwiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUV4cG9ydEFsbERlY2xhcmF0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRXhwb3J0TmFtZWREZWNsYXJhdGlvbigpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VJbXBvcnRTcGVjaWZpZXIoKSB7XG4gICAgLy8gaW1wb3J0IHs8Zm9vIGFzIGJhcj59IC4uLjtcbiAgICB2YXIgbG9jYWwsIGltcG9ydGVkLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGltcG9ydGVkID0gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7XG4gICAgaWYgKG1hdGNoQ29udGV4dHVhbEtleXdvcmQoXCJhc1wiKSkge1xuICAgICAgICBsZXgoKTtcbiAgICAgICAgbG9jYWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUltcG9ydFNwZWNpZmllcihsb2NhbCwgaW1wb3J0ZWQpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VOYW1lZEltcG9ydHMoKSB7XG4gICAgdmFyIHNwZWNpZmllcnMgPSBbXTtcbiAgICAvLyB7Zm9vLCBiYXIgYXMgYmFzfVxuICAgIGV4cGVjdChcIntcIik7XG4gICAgaWYgKCFtYXRjaChcIn1cIikpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0U3BlY2lmaWVyKCkpO1xuICAgICAgICB9IHdoaWxlIChtYXRjaChcIixcIikgJiYgbGV4KCkgJiYgIW1hdGNoKFwifVwiKSk7XG4gICAgfVxuICAgIGV4cGVjdChcIn1cIik7XG4gICAgcmV0dXJuIHNwZWNpZmllcnM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpIHtcbiAgICAvLyBpbXBvcnQgPGZvbz4gLi4uO1xuICAgIHZhciBsb2NhbCwgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICBsb2NhbCA9IHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpO1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlSW1wb3J0RGVmYXVsdFNwZWNpZmllcihsb2NhbCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcigpIHtcbiAgICAvLyBpbXBvcnQgPCogYXMgZm9vPiAuLi47XG4gICAgdmFyIGxvY2FsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKTtcblxuICAgIGV4cGVjdChcIipcIik7XG4gICAgaWYgKCFtYXRjaENvbnRleHR1YWxLZXl3b3JkKFwiYXNcIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTm9Bc0FmdGVySW1wb3J0TmFtZXNwYWNlKTtcbiAgICB9XG4gICAgbGV4KCk7XG4gICAgbG9jYWwgPSBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTtcblxuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihsb2NhbCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUltcG9ydERlY2xhcmF0aW9uKCkge1xuICAgIHZhciBzcGVjaWZpZXJzLCBzcmMsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpO1xuXG4gICAgaWYgKHN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7XG4gICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxJbXBvcnREZWNsYXJhdGlvbik7XG4gICAgfVxuXG4gICAgZXhwZWN0S2V5d29yZChcImltcG9ydFwiKTtcbiAgICBzcGVjaWZpZXJzID0gW107XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBpbXBvcnQgXCJmb29cIjtcbiAgICAgICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICAgICAgY29uc3VtZVNlbWljb2xvbigpO1xuICAgICAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnREZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBzcmMpKTtcbiAgICB9XG5cbiAgICBpZiAoIW1hdGNoS2V5d29yZChcImRlZmF1bHRcIikgJiYgaXNJZGVudGlmaWVyTmFtZShsb29rYWhlYWQpKSB7XG4gICAgICAgIC8vIGNvdmVyczpcbiAgICAgICAgLy8gaW1wb3J0IGZvb1xuICAgICAgICAvLyBpbXBvcnQgZm9vLCAuLi5cbiAgICAgICAgc3BlY2lmaWVycy5wdXNoKHBhcnNlSW1wb3J0RGVmYXVsdFNwZWNpZmllcigpKTtcbiAgICAgICAgaWYgKG1hdGNoKFwiLFwiKSkge1xuICAgICAgICAgICAgbGV4KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG1hdGNoKFwiKlwiKSkge1xuICAgICAgICAvLyBjb3ZlcnM6XG4gICAgICAgIC8vIGltcG9ydCBmb28sICogYXMgZm9vXG4gICAgICAgIC8vIGltcG9ydCAqIGFzIGZvb1xuICAgICAgICBzcGVjaWZpZXJzLnB1c2gocGFyc2VJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIoKSk7XG4gICAgfSBlbHNlIGlmIChtYXRjaChcIntcIikpIHtcbiAgICAgICAgLy8gY292ZXJzOlxuICAgICAgICAvLyBpbXBvcnQgZm9vLCB7YmFyfVxuICAgICAgICAvLyBpbXBvcnQge2Jhcn1cbiAgICAgICAgc3BlY2lmaWVycyA9IHNwZWNpZmllcnMuY29uY2F0KHBhcnNlTmFtZWRJbXBvcnRzKCkpO1xuICAgIH1cblxuICAgIGlmICghbWF0Y2hDb250ZXh0dWFsS2V5d29yZChcImZyb21cIikpIHtcbiAgICAgICAgdGhyb3dFcnJvcih7fSwgbG9va2FoZWFkLnZhbHVlID9cbiAgICAgICAgICAgICAgICBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4gOiBNZXNzYWdlcy5NaXNzaW5nRnJvbUNsYXVzZSwgbG9va2FoZWFkLnZhbHVlKTtcbiAgICB9XG4gICAgbGV4KCk7XG4gICAgc3JjID0gcGFyc2VNb2R1bGVTcGVjaWZpZXIoKTtcbiAgICBjb25zdW1lU2VtaWNvbG9uKCk7XG5cbiAgICByZXR1cm4gbWFya2VyQXBwbHkobWFya2VyLCBhc3ROb2RlRmFjdG9yeS5jcmVhdGVJbXBvcnREZWNsYXJhdGlvbihzcGVjaWZpZXJzLCBzcmMpKTtcbn1cblxuLy8gMTQgRnVuY3Rpb25zIGFuZCBjbGFzc2VzXG5cbi8vIDE0LjEgRnVuY3Rpb25zIGlzIGRlZmluZWQgYWJvdmUgKDEzIGluIEVTNSlcbi8vIDE0LjIgQXJyb3cgRnVuY3Rpb25zIERlZmluaXRpb25zIGlzIGRlZmluZWQgaW4gKDcuMyBhc3NpZ25tZW50cylcblxuLy8gMTQuMyBNZXRob2QgRGVmaW5pdGlvbnNcbi8vIDE0LjMuN1xuXG4vLyAxNC41IENsYXNzIERlZmluaXRpb25zXG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NCb2R5KCkge1xuICAgIHZhciBoYXNDb25zdHJ1Y3RvciA9IGZhbHNlLCBnZW5lcmF0b3IgPSBmYWxzZSxcbiAgICAgICAgYWxsb3dHZW5lcmF0b3JzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmdlbmVyYXRvcnMsXG4gICAgICAgIHRva2VuLCBpc1N0YXRpYywgYm9keSA9IFtdLCBtZXRob2QsIGNvbXB1dGVkLCBrZXk7XG5cbiAgICB2YXIgZXhpc3RpbmdQcm9wcyA9IHt9LFxuICAgICAgICB0b3BNYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgbWFya2VyO1xuXG4gICAgZXhpc3RpbmdQcm9wcy5zdGF0aWMgPSBuZXcgU3RyaW5nTWFwKCk7XG4gICAgZXhpc3RpbmdQcm9wcy5wcm90b3R5cGUgPSBuZXcgU3RyaW5nTWFwKCk7XG5cbiAgICBleHBlY3QoXCJ7XCIpO1xuXG4gICAgd2hpbGUgKCFtYXRjaChcIn1cIikpIHtcblxuICAgICAgICAvLyBleHRyYSBzZW1pY29sb25zIGFyZSBmaW5lXG4gICAgICAgIGlmIChtYXRjaChcIjtcIikpIHtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaXNTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgZ2VuZXJhdG9yID0gbWF0Y2goXCIqXCIpO1xuICAgICAgICBjb21wdXRlZCA9IG1hdGNoKFwiW1wiKTtcbiAgICAgICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG5cbiAgICAgICAgaWYgKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgaWYgKCFhbGxvd0dlbmVyYXRvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuXG4gICAgICAgIC8vIHN0YXRpYyBnZW5lcmF0b3IgbWV0aG9kc1xuICAgICAgICBpZiAoa2V5Lm5hbWUgPT09IFwic3RhdGljXCIgJiYgbWF0Y2goXCIqXCIpKSB7XG4gICAgICAgICAgICBpZiAoIWFsbG93R2VuZXJhdG9ycykge1xuICAgICAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2VuZXJhdG9yID0gdHJ1ZTtcbiAgICAgICAgICAgIGxleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleS5uYW1lID09PSBcInN0YXRpY1wiICYmIGxvb2thaGVhZFByb3BlcnR5TmFtZSgpKSB7XG4gICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgICAgIGlzU3RhdGljID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbXB1dGVkID0gbWF0Y2goXCJbXCIpO1xuICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgbWV0aG9kID0gcGFyc2VHZW5lcmF0b3JQcm9wZXJ0eShrZXksIG1hcmtlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXRob2QgPSB0cnlQYXJzZU1ldGhvZERlZmluaXRpb24odG9rZW4sIGtleSwgY29tcHV0ZWQsIG1hcmtlciwgZ2VuZXJhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgICAgIG1ldGhvZC5zdGF0aWMgPSBpc1N0YXRpYztcbiAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCA9PT0gXCJpbml0XCIpIHtcbiAgICAgICAgICAgICAgICBtZXRob2Qua2luZCA9IFwibWV0aG9kXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXNTdGF0aWMpIHtcblxuICAgICAgICAgICAgICAgIGlmICghbWV0aG9kLmNvbXB1dGVkICYmIChtZXRob2Qua2V5Lm5hbWUgfHwgKG1ldGhvZC5rZXkudmFsdWUgJiYgbWV0aG9kLmtleS52YWx1ZS50b1N0cmluZygpKSkgPT09IFwiY29uc3RydWN0b3JcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmtpbmQgIT09IFwibWV0aG9kXCIgfHwgIW1ldGhvZC5tZXRob2QgfHwgbWV0aG9kLnZhbHVlLmdlbmVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5Db25zdHJ1Y3RvclNwZWNpYWxNZXRob2QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5EdXBsaWNhdGVDb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNDb25zdHJ1Y3RvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLmtpbmQgPSBcImNvbnN0cnVjdG9yXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZC5jb21wdXRlZCAmJiAobWV0aG9kLmtleS5uYW1lIHx8IG1ldGhvZC5rZXkudmFsdWUudG9TdHJpbmcoKSkgPT09IFwicHJvdG90eXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuLCBNZXNzYWdlcy5TdGF0aWNQcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1ldGhvZC50eXBlID0gYXN0Tm9kZVR5cGVzLk1ldGhvZERlZmluaXRpb247XG4gICAgICAgICAgICBkZWxldGUgbWV0aG9kLm1ldGhvZDtcbiAgICAgICAgICAgIGRlbGV0ZSBtZXRob2Quc2hvcnRoYW5kO1xuICAgICAgICAgICAgYm9keS5wdXNoKG1ldGhvZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxleCgpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseSh0b3BNYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZUNsYXNzQm9keShib2R5KSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xhc3NFeHByZXNzaW9uKCkge1xuICAgIHZhciBpZCA9IG51bGwsIHN1cGVyQ2xhc3MgPSBudWxsLCBtYXJrZXIgPSBtYXJrZXJDcmVhdGUoKSxcbiAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3QsIGNsYXNzQm9keTtcblxuICAgIC8vIGNsYXNzZXMgcnVuIGluIHN0cmljdCBtb2RlXG4gICAgc3RyaWN0ID0gdHJ1ZTtcblxuICAgIGV4cGVjdEtleXdvcmQoXCJjbGFzc1wiKTtcblxuICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImV4dGVuZHNcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKTtcbiAgICB9XG5cbiAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpO1xuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2xhc3NFeHByZXNzaW9uKGlkLCBzdXBlckNsYXNzLCBjbGFzc0JvZHkpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKGlkZW50aWZpZXJJc09wdGlvbmFsKSB7XG4gICAgdmFyIGlkID0gbnVsbCwgc3VwZXJDbGFzcyA9IG51bGwsIG1hcmtlciA9IG1hcmtlckNyZWF0ZSgpLFxuICAgICAgICBwcmV2aW91c1N0cmljdCA9IHN0cmljdCwgY2xhc3NCb2R5O1xuXG4gICAgLy8gY2xhc3NlcyBydW4gaW4gc3RyaWN0IG1vZGVcbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gICAgZXhwZWN0S2V5d29yZChcImNsYXNzXCIpO1xuXG4gICAgaWYgKCFpZGVudGlmaWVySXNPcHRpb25hbCB8fCBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikge1xuICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoS2V5d29yZChcImV4dGVuZHNcIikpIHtcbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHN1cGVyQ2xhc3MgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKTtcbiAgICB9XG5cbiAgICBjbGFzc0JvZHkgPSBwYXJzZUNsYXNzQm9keSgpO1xuICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0O1xuXG4gICAgcmV0dXJuIG1hcmtlckFwcGx5KG1hcmtlciwgYXN0Tm9kZUZhY3RvcnkuY3JlYXRlQ2xhc3NEZWNsYXJhdGlvbihpZCwgc3VwZXJDbGFzcywgY2xhc3NCb2R5KSk7XG59XG5cbi8vIDE1IFByb2dyYW1cblxuZnVuY3Rpb24gcGFyc2VTb3VyY2VFbGVtZW50KCkge1xuXG4gICAgdmFyIGFsbG93Q2xhc3NlcyA9IGV4dHJhLmVjbWFGZWF0dXJlcy5jbGFzc2VzLFxuICAgICAgICBhbGxvd01vZHVsZXMgPSBleHRyYS5lY21hRmVhdHVyZXMubW9kdWxlcyxcbiAgICAgICAgYWxsb3dCbG9ja0JpbmRpbmdzID0gZXh0cmEuZWNtYUZlYXR1cmVzLmJsb2NrQmluZGluZ3M7XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHtcbiAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJleHBvcnRcIjpcbiAgICAgICAgICAgICAgICBpZiAoIWFsbG93TW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxFeHBvcnREZWNsYXJhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUV4cG9ydERlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICBjYXNlIFwiaW1wb3J0XCI6XG4gICAgICAgICAgICAgICAgaWYgKCFhbGxvd01vZHVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbGxlZ2FsSW1wb3J0RGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbXBvcnREZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpO1xuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93Q2xhc3Nlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDbGFzc0RlY2xhcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNvbnN0XCI6XG4gICAgICAgICAgICBjYXNlIFwibGV0XCI6XG4gICAgICAgICAgICAgICAgaWYgKGFsbG93QmxvY2tCaW5kaW5ncykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGxvb2thaGVhZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RhdGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikge1xuICAgICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnQoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU291cmNlRWxlbWVudHMoKSB7XG4gICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZDtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpO1xuICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpO1xuICAgICAgICBpZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IGFzdE5vZGVUeXBlcy5MaXRlcmFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmVcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSArIDEsIHRva2VuLnJhbmdlWzFdIC0gMSk7XG4gICAgICAgIGlmIChkaXJlY3RpdmUgPT09IFwidXNlIHN0cmljdFwiKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkge1xuICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkge1xuICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBwYXJzZVByb2dyYW0oKSB7XG4gICAgdmFyIGJvZHksXG4gICAgICAgIG1hcmtlcixcbiAgICAgICAgaXNNb2R1bGUgPSAhIWV4dHJhLmVjbWFGZWF0dXJlcy5tb2R1bGVzO1xuXG4gICAgc2tpcENvbW1lbnQoKTtcbiAgICBwZWVrKCk7XG4gICAgbWFya2VyID0gbWFya2VyQ3JlYXRlKCk7XG4gICAgc3RyaWN0ID0gaXNNb2R1bGU7XG5cbiAgICBib2R5ID0gcGFyc2VTb3VyY2VFbGVtZW50cygpO1xuICAgIHJldHVybiBtYXJrZXJBcHBseShtYXJrZXIsIGFzdE5vZGVGYWN0b3J5LmNyZWF0ZVByb2dyYW0oYm9keSwgaXNNb2R1bGUgPyBcIm1vZHVsZVwiIDogXCJzY3JpcHRcIikpO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJUb2tlbkxvY2F0aW9uKCkge1xuICAgIHZhciBpLCBlbnRyeSwgdG9rZW4sIHRva2VucyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGV4dHJhLnRva2Vucy5sZW5ndGg7ICsraSkge1xuICAgICAgICBlbnRyeSA9IGV4dHJhLnRva2Vuc1tpXTtcbiAgICAgICAgdG9rZW4gPSB7XG4gICAgICAgICAgICB0eXBlOiBlbnRyeS50eXBlLFxuICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlbnRyeS5yZWdleCkge1xuICAgICAgICAgICAgdG9rZW4ucmVnZXggPSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjogZW50cnkucmVnZXgucGF0dGVybixcbiAgICAgICAgICAgICAgICBmbGFnczogZW50cnkucmVnZXguZmxhZ3NcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7XG4gICAgICAgICAgICB0b2tlbi5yYW5nZSA9IGVudHJ5LnJhbmdlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleHRyYS5sb2MpIHtcbiAgICAgICAgICAgIHRva2VuLmxvYyA9IGVudHJ5LmxvYztcbiAgICAgICAgfVxuICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgfVxuXG4gICAgZXh0cmEudG9rZW5zID0gdG9rZW5zO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVG9rZW5pemVyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiB0b2tlbml6ZShjb2RlLCBvcHRpb25zKSB7XG4gICAgdmFyIHRvU3RyaW5nLFxuICAgICAgICB0b2tlbnM7XG5cbiAgICB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAodHlwZW9mIGNvZGUgIT09IFwic3RyaW5nXCIgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7XG4gICAgfVxuXG4gICAgc291cmNlID0gY29kZTtcbiAgICBpbmRleCA9IDA7XG4gICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDtcbiAgICBsaW5lU3RhcnQgPSAwO1xuICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgYWxsb3dJbjogdHJ1ZSxcbiAgICAgICAgbGFiZWxTZXQ6IHt9LFxuICAgICAgICBwYXJlbnRoZXNpc0NvdW50OiAwLFxuICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsXG4gICAgICAgIGluSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLFxuICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAtMSxcbiAgICAgICAgeWllbGRBbGxvd2VkOiBmYWxzZSxcbiAgICAgICAgY3VybHlTdGFjazogW10sXG4gICAgICAgIGN1cmx5TGFzdEluZGV4OiAwLFxuICAgICAgICBpbkpTWFNwcmVhZEF0dHJpYnV0ZTogZmFsc2UsXG4gICAgICAgIGluSlNYQ2hpbGQ6IGZhbHNlLFxuICAgICAgICBpbkpTWFRhZzogZmFsc2VcbiAgICB9O1xuXG4gICAgZXh0cmEgPSB7XG4gICAgICAgIGVjbWFGZWF0dXJlczogZGVmYXVsdEZlYXR1cmVzXG4gICAgfTtcblxuICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBPZiBjb3Vyc2Ugd2UgY29sbGVjdCB0b2tlbnMgaGVyZS5cbiAgICBvcHRpb25zLnRva2VucyA9IHRydWU7XG4gICAgZXh0cmEudG9rZW5zID0gW107XG4gICAgZXh0cmEudG9rZW5pemUgPSB0cnVlO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyB0d28gZmllbGRzIGFyZSBuZWNlc3NhcnkgdG8gY29tcHV0ZSB0aGUgUmVnZXggdG9rZW5zLlxuICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gLTE7XG4gICAgZXh0cmEub3BlbkN1cmx5VG9rZW4gPSAtMTtcblxuICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdlID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5yYW5nZTtcbiAgICBleHRyYS5sb2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5sb2M7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy5jb21tZW50KSB7XG4gICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy50b2xlcmFudCkge1xuICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSBwYXJzaW5nIGZsYWdzXG4gICAgaWYgKG9wdGlvbnMuZWNtYUZlYXR1cmVzICYmIHR5cGVvZiBvcHRpb25zLmVjbWFGZWF0dXJlcyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBleHRyYS5lY21hRmVhdHVyZXMgPSBvcHRpb25zLmVjbWFGZWF0dXJlcztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgICBwZWVrKCk7XG4gICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICByZXR1cm4gZXh0cmEudG9rZW5zO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV4KCk7XG4gICAgICAgIHdoaWxlIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxleCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAobGV4RXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGxleEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayBvbiB0aGUgZmlyc3QgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGxleEVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTtcbiAgICAgICAgdG9rZW5zID0gZXh0cmEudG9rZW5zO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRva2Vucy5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEuZXJyb3JzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0b2tlbnMuZXJyb3JzID0gZXh0cmEuZXJyb3JzO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4dHJhID0ge307XG4gICAgfVxuICAgIHJldHVybiB0b2tlbnM7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXJzZXJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvZ3JhbSwgdG9TdHJpbmc7XG5cbiAgICB0b1N0cmluZyA9IFN0cmluZztcbiAgICBpZiAodHlwZW9mIGNvZGUgIT09IFwic3RyaW5nXCIgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkge1xuICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7XG4gICAgfVxuXG4gICAgc291cmNlID0gY29kZTtcbiAgICBpbmRleCA9IDA7XG4gICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAxIDogMDtcbiAgICBsaW5lU3RhcnQgPSAwO1xuICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgbG9va2FoZWFkID0gbnVsbDtcbiAgICBzdGF0ZSA9IHtcbiAgICAgICAgYWxsb3dJbjogdHJ1ZSxcbiAgICAgICAgbGFiZWxTZXQ6IG5ldyBTdHJpbmdNYXAoKSxcbiAgICAgICAgcGFyZW50aGVzaXNDb3VudDogMCxcbiAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLFxuICAgICAgICBpbkl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICAgIGluU3dpdGNoOiBmYWxzZSxcbiAgICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEsXG4gICAgICAgIHlpZWxkQWxsb3dlZDogZmFsc2UsXG4gICAgICAgIGN1cmx5U3RhY2s6IFtdLFxuICAgICAgICBjdXJseUxhc3RJbmRleDogMCxcbiAgICAgICAgaW5KU1hTcHJlYWRBdHRyaWJ1dGU6IGZhbHNlLFxuICAgICAgICBpbkpTWENoaWxkOiBmYWxzZSxcbiAgICAgICAgaW5KU1hUYWc6IGZhbHNlXG4gICAgfTtcblxuICAgIGV4dHJhID0ge1xuICAgICAgICBlY21hRmVhdHVyZXM6IE9iamVjdC5jcmVhdGUoZGVmYXVsdEZlYXR1cmVzKVxuICAgIH07XG5cbiAgICAvLyBmb3IgdGVtcGxhdGUgc3RyaW5nc1xuICAgIHN0YXRlLmN1cmx5U3RhY2sgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gXCJib29sZWFuXCIpICYmIG9wdGlvbnMucmFuZ2U7XG4gICAgICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09IFwiYm9vbGVhblwiKSAmJiBvcHRpb25zLmxvYztcbiAgICAgICAgZXh0cmEuYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Ygb3B0aW9ucy5hdHRhY2hDb21tZW50ID09PSBcImJvb2xlYW5cIikgJiYgb3B0aW9ucy5hdHRhY2hDb21tZW50O1xuXG4gICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9ucy5zb3VyY2UgIT09IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXh0cmEuc291cmNlID0gdG9TdHJpbmcob3B0aW9ucy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0gXCJib29sZWFuXCIgJiYgb3B0aW9ucy50b2tlbnMpIHtcbiAgICAgICAgICAgIGV4dHJhLnRva2VucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSBcImJvb2xlYW5cIiAmJiBvcHRpb25zLnRvbGVyYW50KSB7XG4gICAgICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkge1xuICAgICAgICAgICAgZXh0cmEucmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgIGNvbW1lbnRBdHRhY2htZW50LnJlc2V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zb3VyY2VUeXBlID09PSBcIm1vZHVsZVwiKSB7XG4gICAgICAgICAgICBleHRyYS5lY21hRmVhdHVyZXMgPSB7XG4gICAgICAgICAgICAgICAgYXJyb3dGdW5jdGlvbnM6IHRydWUsXG4gICAgICAgICAgICAgICAgYmxvY2tCaW5kaW5nczogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWdleFVGbGFnOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlZ2V4WUZsYWc6IHRydWUsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVTdHJpbmdzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGJpbmFyeUxpdGVyYWxzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG9jdGFsTGl0ZXJhbHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdW5pY29kZUNvZGVQb2ludEVzY2FwZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgc3VwZXJJbkZ1bmN0aW9uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0UGFyYW1zOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlc3RQYXJhbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgZm9yT2Y6IHRydWUsXG4gICAgICAgICAgICAgICAgb2JqZWN0TGl0ZXJhbENvbXB1dGVkUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kTWV0aG9kczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvYmplY3RMaXRlcmFsRHVwbGljYXRlUHJvcGVydGllczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0b3JzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRlc3RydWN0dXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgY2xhc3NlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtb2R1bGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIG5ld1RhcmdldDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFwcGx5IHBhcnNpbmcgZmxhZ3MgYWZ0ZXIgc291cmNlVHlwZSB0byBhbGxvdyBvdmVycmlkaW5nXG4gICAgICAgIGlmIChvcHRpb25zLmVjbWFGZWF0dXJlcyAmJiB0eXBlb2Ygb3B0aW9ucy5lY21hRmVhdHVyZXMgPT09IFwib2JqZWN0XCIpIHtcblxuICAgICAgICAgICAgLy8gaWYgaXQncyBhIG1vZHVsZSwgYXVnbWVudCB0aGUgZWNtYUZlYXR1cmVzXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zb3VyY2VUeXBlID09PSBcIm1vZHVsZVwiKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5lY21hRmVhdHVyZXMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmVjbWFGZWF0dXJlc1trZXldID0gb3B0aW9ucy5lY21hRmVhdHVyZXNba2V5XTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXh0cmEuZWNtYUZlYXR1cmVzID0gb3B0aW9ucy5lY21hRmVhdHVyZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHByb2dyYW0gPSBwYXJzZVByb2dyYW0oKTtcbiAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcHJvZ3JhbS5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7XG4gICAgICAgICAgICBwcm9ncmFtLnRva2VucyA9IGV4dHJhLnRva2VucztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcHJvZ3JhbS5lcnJvcnMgPSBleHRyYS5lcnJvcnM7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZXh0cmEgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvZ3JhbTtcbn1cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0cy52ZXJzaW9uID0gcmVxdWlyZShcIi4vcGFja2FnZS5qc29uXCIpLnZlcnNpb247XG5cbmV4cG9ydHMudG9rZW5pemUgPSB0b2tlbml6ZTtcblxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuXG4vLyBEZWVwIGNvcHkuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0cy5TeW50YXggPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBuYW1lLCB0eXBlcyA9IHt9O1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH1cblxuICAgIGZvciAobmFtZSBpbiBhc3ROb2RlVHlwZXMpIHtcbiAgICAgICAgaWYgKGFzdE5vZGVUeXBlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgdHlwZXNbbmFtZV0gPSBhc3ROb2RlVHlwZXNbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIE9iamVjdC5mcmVlemUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBPYmplY3QuZnJlZXplKHR5cGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG59KCkpO1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IEEgZmFjdG9yeSBmb3IgY3JlYXRpbmcgQVNUIG5vZGVzXG4gKiBAYXV0aG9yIEZyZWQgSy4gU2Nob3R0XG4gKiBAY29weXJpZ2h0IDIwMTQgRnJlZCBLLiBTY2hvdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgYXN0Tm9kZVR5cGVzID0gcmVxdWlyZShcIi4vYXN0LW5vZGUtdHlwZXNcIik7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFycmF5IEV4cHJlc3Npb24gQVNUTm9kZSBvdXQgb2YgYW4gYXJyYXkgb2YgZWxlbWVudHNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZWxlbWVudHMgQW4gYXJyYXkgb2YgQVNUTm9kZSBlbGVtZW50c1xuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGFycmF5IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uKGVsZW1lbnRzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQXJyYXlFeHByZXNzaW9uLFxuICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBcnJvdyBGdW5jdGlvbiBFeHByZXNzaW9uIEFTVE5vZGVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmFtcyBUaGUgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBmdW5jdGlvbiBib2R5XG4gICAgICogQHBhcmFtIHtib29sZWFufSBleHByZXNzaW9uIFRydWUgaWYgdGhlIGFycm93IGZ1bmN0aW9uIGlzIGNyZWF0ZWQgdmlhIGFuIGV4cHJlc3Npb24uXG4gICAgICogICAgICBBbHdheXMgZmFsc2UgZm9yIGRlY2xhcmF0aW9ucywgYnV0IGtlcHQgaGVyZSB0byBiZSBpbiBzeW5jIHdpdGhcbiAgICAgKiAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKHBhcmFtcywgYm9keSwgZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkFycm93RnVuY3Rpb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBnZW5lcmF0b3I6IGZhbHNlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG9wZXJhdG9yIFRoZSBhc3NpZ25tZW50IG9wZXJhdG9yXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSBsZWZ0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSByaWdodCBvcGVyYW5kXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgYXNzaWdubWVudCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQXNzaWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkFzc2lnbm1lbnRFeHByZXNzaW9uLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBhc3NpZ25tZW50IHBhdHRlcm4gKGRlZmF1bHQgcGFyYW1ldGVycylcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBhc3NpZ25tZW50IHBhdHRlcm5cbiAgICAgKi9cbiAgICBjcmVhdGVBc3NpZ25tZW50UGF0dGVybjogZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Bc3NpZ25tZW50UGF0dGVybixcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBiaW5hcnkgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gb3BlcmF0b3IgVGhlIGFzc2lnbm1lbnQgb3BlcmF0b3JcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGxlZnQgVGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcmlnaHQgVGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBiaW5hcnkgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkge1xuICAgICAgICB2YXIgdHlwZSA9IChvcGVyYXRvciA9PT0gXCJ8fFwiIHx8IG9wZXJhdG9yID09PSBcIiYmXCIpID8gYXN0Tm9kZVR5cGVzLkxvZ2ljYWxFeHByZXNzaW9uIDpcbiAgICAgICAgICAgICAgICAgICAgYXN0Tm9kZVR5cGVzLkJpbmFyeUV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGJsb2NrIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgYmxvY2sgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBibG9jayBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24oYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkJsb2NrU3RhdGVtZW50LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGJyZWFrIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGFiZWwgVGhlIGJyZWFrIHN0YXRlbWVudCBsYWJlbFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgYnJlYWsgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlQnJlYWtTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQnJlYWtTdGF0ZW1lbnQsXG4gICAgICAgICAgICBsYWJlbDogbGFiZWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBjYWxsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNhbGxlZSBUaGUgZnVuY3Rpb24gYmVpbmcgY2FsbGVkXG4gICAgICogQHBhcmFtIHtBU1ROb2RlW119IGFyZ3MgQW4gYXJyYXkgb2YgQVNUTm9kZXMgcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50c1xuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGNhbGwgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZUNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbihjYWxsZWUsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5DYWxsRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLFxuICAgICAgICAgICAgXCJhcmd1bWVudHNcIjogYXJnc1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGNhdGNoIGNsYXVzZS9ibG9ja1xuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyYW0gQW55IGNhdGNoIGNsYXVzZSBleGVwdGlvbi9jb25kaXRpb25hbCBwYXJhbWV0ZXIgaW5mb3JtYXRpb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGNhdGNoIGJsb2NrIGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBjYXRjaCBjbGF1c2VcbiAgICAgKi9cbiAgICBjcmVhdGVDYXRjaENsYXVzZTogZnVuY3Rpb24ocGFyYW0sIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5DYXRjaENsYXVzZSxcbiAgICAgICAgICAgIHBhcmFtOiBwYXJhbSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgY2xhc3MgYm9keS5cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBib2R5IG9mIHRoZSBjbGFzcy5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGNsYXNzIGJvZHkuXG4gICAgICovXG4gICAgY3JlYXRlQ2xhc3NCb2R5OiBmdW5jdGlvbihib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2xhc3NCb2R5LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVDbGFzc0V4cHJlc3Npb246IGZ1bmN0aW9uKGlkLCBzdXBlckNsYXNzLCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuQ2xhc3NFeHByZXNzaW9uLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgc3VwZXJDbGFzczogc3VwZXJDbGFzcyxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlQ2xhc3NEZWNsYXJhdGlvbjogZnVuY3Rpb24oaWQsIHN1cGVyQ2xhc3MsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5DbGFzc0RlY2xhcmF0aW9uLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgc3VwZXJDbGFzczogc3VwZXJDbGFzcyxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlTWV0aG9kRGVmaW5pdGlvbjogZnVuY3Rpb24ocHJvcGVydHlUeXBlLCBraW5kLCBrZXksIHZhbHVlLCBjb21wdXRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLk1ldGhvZERlZmluaXRpb24sXG4gICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgICAgICBcInN0YXRpY1wiOiBwcm9wZXJ0eVR5cGUgPT09IFwic3RhdGljXCIsXG4gICAgICAgICAgICBjb21wdXRlZDogY29tcHV0ZWRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlTWV0YVByb3BlcnR5OiBmdW5jdGlvbihtZXRhLCBwcm9wZXJ0eSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLk1ldGFQcm9wZXJ0eSxcbiAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBjb25kaXRpb25hbCB0byBldmFsdWF0ZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gY29uc2VxdWVudCBUaGUgY29kZSB0byBiZSBydW4gaWYgdGhlIHRlc3QgcmV0dXJucyB0cnVlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhbHRlcm5hdGUgVGhlIGNvZGUgdG8gYmUgcnVuIGlmIHRoZSB0ZXN0IHJldHVybnMgZmFsc2VcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9uOiBmdW5jdGlvbih0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Db25kaXRpb25hbEV4cHJlc3Npb24sXG4gICAgICAgICAgICB0ZXN0OiB0ZXN0LFxuICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCxcbiAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJuYXRlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgY29udGludWUgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHs/QVNUTm9kZX0gbGFiZWwgVGhlIG9wdGlvbmFsIGNvbnRpbnVlIGxhYmVsIChudWxsIGlmIG5vdCBzZXQpXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBjb250aW51ZSBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVDb250aW51ZVN0YXRlbWVudDogZnVuY3Rpb24obGFiZWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Db250aW51ZVN0YXRlbWVudCxcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGRlYnVnZ2VyIHN0YXRlbWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgZGVidWdnZXIgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkRlYnVnZ2VyU3RhdGVtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGVtcHR5IHN0YXRlbWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhbiBlbXB0eSBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVFbXB0eVN0YXRlbWVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRW1wdHlTdGF0ZW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb25cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbihleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwcmVzc2lvblN0YXRlbWVudCxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB3aGlsZSBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIHdoaWxlIGNvbmRpdGlvbmFsXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSB3aGlsZSBsb29wIGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB3aGlsZSBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24odGVzdCwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLldoaWxlU3RhdGVtZW50LFxuICAgICAgICAgICAgdGVzdDogdGVzdCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBkby4ud2hpbGUgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBkby4ud2hpbGUgY29uZGl0aW9uYWxcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGRvLi53aGlsZSBsb29wIGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBkby4ud2hpbGUgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRG9XaGlsZVN0YXRlbWVudDogZnVuY3Rpb24odGVzdCwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkRvV2hpbGVTdGF0ZW1lbnQsXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgdGVzdDogdGVzdFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGZvciBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGluaXQgVGhlIGluaXRpYWxpemF0aW9uIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIGNvbmRpdGlvbmFsIHRlc3QgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gdXBkYXRlIFRoZSB1cGRhdGUgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBmb3Igc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRm9yU3RhdGVtZW50OiBmdW5jdGlvbihpbml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Gb3JTdGF0ZW1lbnQsXG4gICAgICAgICAgICBpbml0OiBpbml0LFxuICAgICAgICAgICAgdGVzdDogdGVzdCxcbiAgICAgICAgICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIGZvci4uaW4gc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBsZWZ0IFRoZSBsZWZ0LXNpZGUgdmFyaWFibGUgZm9yIHRoZSBwcm9wZXJ0eSBuYW1lXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSByaWdodCBUaGUgcmlnaHQtc2lkZSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIHN0YXRlbWVudCBib2R5XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZm9yLi5pbiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVGb3JJblN0YXRlbWVudDogZnVuY3Rpb24obGVmdCwgcmlnaHQsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5Gb3JJblN0YXRlbWVudCxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgICAgICByaWdodDogcmlnaHQsXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgZWFjaDogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmb3IuLm9mIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGVmdCBUaGUgbGVmdC1zaWRlIHZhcmlhYmxlIGZvciB0aGUgcHJvcGVydHkgdmFsdWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHJpZ2h0IFRoZSByaWdodC1zaWRlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgc3RhdGVtZW50IGJvZHlcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBmb3IuLm9mIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUZvck9mU3RhdGVtZW50OiBmdW5jdGlvbihsZWZ0LCByaWdodCwgYm9keSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkZvck9mU3RhdGVtZW50LFxuICAgICAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodCxcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmdW5jdGlvbiBkZWNsYXJhdGlvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaWQgVGhlIGZ1bmN0aW9uIG5hbWVcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHBhcmFtcyBUaGUgZnVuY3Rpb24gYXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBib2R5IFRoZSBmdW5jdGlvbiBib2R5XG4gICAgICogQHBhcmFtIHtib29sZWFufSBnZW5lcmF0b3IgVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgYSBnZW5lcmF0b3IsIGZhbHNlIGlmIG5vdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4cHJlc3Npb24gVHJ1ZSBpZiB0aGUgZnVuY3Rpb24gaXMgY3JlYXRlZCB2aWEgYW4gZXhwcmVzc2lvbi5cbiAgICAgKiAgICAgIEFsd2F5cyBmYWxzZSBmb3IgZGVjbGFyYXRpb25zLCBidXQga2VwdCBoZXJlIHRvIGJlIGluIHN5bmMgd2l0aFxuICAgICAqICAgICAgRnVuY3Rpb25FeHByZXNzaW9uIG9iamVjdHMuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgZnVuY3Rpb24gZGVjbGFyYXRpb25cbiAgICAgKi9cbiAgICBjcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJhdG9yLCBleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zIHx8IFtdLFxuICAgICAgICAgICAgYm9keTogYm9keSxcbiAgICAgICAgICAgIGdlbmVyYXRvcjogISFnZW5lcmF0b3IsXG4gICAgICAgICAgICBleHByZXNzaW9uOiAhIWV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBmdW5jdGlvbiBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpZCBUaGUgZnVuY3Rpb24gbmFtZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyYW1zIFRoZSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGZ1bmN0aW9uIGJvZHlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdlbmVyYXRvciBUcnVlIGlmIHRoZSBmdW5jdGlvbiBpcyBhIGdlbmVyYXRvciwgZmFsc2UgaWYgbm90LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwcmVzc2lvbiBUcnVlIGlmIHRoZSBmdW5jdGlvbiBpcyBjcmVhdGVkIHZpYSBhbiBleHByZXNzaW9uLlxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uXG4gICAgICovXG4gICAgY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgYm9keSwgZ2VuZXJhdG9yLCBleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uLFxuICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMgfHwgW10sXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgZ2VuZXJhdG9yOiAhIWdlbmVyYXRvcixcbiAgICAgICAgICAgIGV4cHJlc3Npb246ICEhZXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpZGVudGlmaWVyXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBuYW1lIFRoZSBpZGVudGlmaWVyIG5hbWVcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gaWRlbnRpZmllclxuICAgICAqL1xuICAgIGNyZWF0ZUlkZW50aWZpZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpZiBzdGF0ZW1lbnRcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRlc3QgVGhlIGlmIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGNvbnNlcXVlbnQgVGhlIGNvbnNlcXVlbnQgaWYgc3RhdGVtZW50IHRvIHJ1blxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYWx0ZXJuYXRlIHRoZSBcImVsc2VcIiBhbHRlcm5hdGUgc3RhdGVtZW50XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGFuIGlmIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZUlmU3RhdGVtZW50OiBmdW5jdGlvbih0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JZlN0YXRlbWVudCxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50LFxuICAgICAgICAgICAgYWx0ZXJuYXRlOiBhbHRlcm5hdGVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBsYWJlbGVkIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbGFiZWwgVGhlIHN0YXRlbWVudCBsYWJlbFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgbGFiZWxlZCBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIGxhYmVsZWQgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlTGFiZWxlZFN0YXRlbWVudDogZnVuY3Rpb24obGFiZWwsIGJvZHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5MYWJlbGVkU3RhdGVtZW50LFxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSBsaXRlcmFsIGZyb20gdGhlIHNvdXJjZSBjb2RlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0b2tlbiBUaGUgQVNUTm9kZSB0b2tlblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSBjb2RlIHRvIGdldCB0aGUgbGl0ZXJhbCBmcm9tXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSBuZXcgbGl0ZXJhbFxuICAgICAqL1xuICAgIGNyZWF0ZUxpdGVyYWxGcm9tU291cmNlOiBmdW5jdGlvbih0b2tlbiwgc291cmNlKSB7XG4gICAgICAgIHZhciBub2RlID0ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkxpdGVyYWwsXG4gICAgICAgICAgICB2YWx1ZTogdG9rZW4udmFsdWUsXG4gICAgICAgICAgICByYXc6IHNvdXJjZS5zbGljZSh0b2tlbi5yYW5nZVswXSwgdG9rZW4ucmFuZ2VbMV0pXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcmVndWxhciBleHByZXNzaW9ucyBoYXZlIHJlZ2V4IHByb3BlcnRpZXNcbiAgICAgICAgaWYgKHRva2VuLnJlZ2V4KSB7XG4gICAgICAgICAgICBub2RlLnJlZ2V4ID0gdG9rZW4ucmVnZXg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgdGVtcGxhdGUgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZSBEYXRhIG9uIHRoZSBlbGVtZW50IHZhbHVlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlLnJhdyBUaGUgcmF3IHRlbXBsYXRlIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZS5jb29rZWQgVGhlIHByb2Nlc3NlZCB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRhaWwgVHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaW5hbCBlbGVtZW50IGluIGEgdGVtcGxhdGUgc3RyaW5nXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZWxlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVRlbXBsYXRlRWxlbWVudDogZnVuY3Rpb24odmFsdWUsIHRhaWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UZW1wbGF0ZUVsZW1lbnQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB0YWlsOiB0YWlsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHRlbXBsYXRlIGxpdGVyYWxcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gcXVhc2lzIEFuIGFycmF5IG9mIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZWxlbWVudHNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZXhwcmVzc2lvbnMgQW4gYXJyYXkgb2YgdGhlIHRlbXBsYXRlIHN0cmluZyBleHByZXNzaW9uc1xuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyB0aGUgdGVtcGxhdGUgc3RyaW5nXG4gICAgICovXG4gICAgY3JlYXRlVGVtcGxhdGVMaXRlcmFsOiBmdW5jdGlvbihxdWFzaXMsIGV4cHJlc3Npb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVGVtcGxhdGVMaXRlcmFsLFxuICAgICAgICAgICAgcXVhc2lzOiBxdWFzaXMsXG4gICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVzc2lvbnNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSBzcHJlYWQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIGFycmF5IGJlaW5nIHNwcmVhZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHNwcmVhZCBlbGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlU3ByZWFkRWxlbWVudDogZnVuY3Rpb24oYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5TcHJlYWRFbGVtZW50LFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGV4cGVyaW1lbnRhbCByZXN0IHByb3BlcnR5XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgaWRlbnRpZmllciBiZWluZyByZXN0ZWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSByZXN0IGVsZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVFeHBlcmltZW50YWxSZXN0UHJvcGVydHk6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwZXJpbWVudGFsUmVzdFByb3BlcnR5LFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGV4cGVyaW1lbnRhbCBzcHJlYWQgcHJvcGVydHlcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3VtZW50IFRoZSBpZGVudGlmaWVyIGJlaW5nIHNwcmVhZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHNwcmVhZCBlbGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlRXhwZXJpbWVudGFsU3ByZWFkUHJvcGVydHk6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwZXJpbWVudGFsU3ByZWFkUHJvcGVydHksXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgdGFnZ2VkIHRlbXBsYXRlIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHRhZyBUaGUgdGFnIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHF1YXNpIEEgVGVtcGxhdGVMaXRlcmFsIEFTVE5vZGUgcmVwcmVzZW50aW5nXG4gICAgICogdGhlIHRlbXBsYXRlIHN0cmluZyBpdHNlbGYuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHRoZSB0YWdnZWQgdGVtcGxhdGVcbiAgICAgKi9cbiAgICBjcmVhdGVUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IGZ1bmN0aW9uKHRhZywgcXVhc2kpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24sXG4gICAgICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgICAgIHF1YXNpOiBxdWFzaVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG1lbWJlciBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGFjY2Vzc29yIFRoZSBtZW1iZXIgYWNjZXNzIG1ldGhvZCAoYnJhY2tldCBvciBwZXJpb2QpXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBvYmplY3QgVGhlIG9iamVjdCBiZWluZyByZWZlcmVuY2VkXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBwcm9wZXJ0eSBUaGUgb2JqZWN0LXByb3BlcnR5IGJlaW5nIHJlZmVyZW5jZWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSBtZW1iZXIgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZU1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uKGFjY2Vzc29yLCBvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTWVtYmVyRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNvbXB1dGVkOiBhY2Nlc3NvciA9PT0gXCJbXCIsXG4gICAgICAgICAgICBvYmplY3Q6IG9iamVjdCxcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldyBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjYWxsZWUgVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgbmV3IG9iamVjdCB0eXBlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmdzIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvclxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIG5ldyBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlTmV3RXhwcmVzc2lvbjogZnVuY3Rpb24oY2FsbGVlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuTmV3RXhwcmVzc2lvbixcbiAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLFxuICAgICAgICAgICAgXCJhcmd1bWVudHNcIjogYXJnc1xuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldyBvYmplY3QgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBwcm9wZXJ0aWVzIEFuIGFycmF5IG9mIEFTVE5vZGVzIHRoYXQgcmVwcmVzZW50IGFsbCBvYmplY3RcbiAgICAgKiAgICAgIHByb3BlcnRpZXMgYW5kIGFzc29jaWF0ZWQgdmFsdWVzXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgbmV3IG9iamVjdCBleHByZXNzaW9uXG4gICAgICovXG4gICAgY3JlYXRlT2JqZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24ocHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLk9iamVjdEV4cHJlc3Npb24sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgcG9zdGZpeCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdG9yIFRoZSBwb3N0Zml4IG9wZXJhdG9yIChcIisrXCIsIFwiLS1cIiwgZXRjLilcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGFyZ3VtZW50IFRoZSBvcGVyYXRvciBhcmd1bWVudFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHBvc3RmaXggZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uOiBmdW5jdGlvbihvcGVyYXRvciwgYXJndW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5VcGRhdGVFeHByZXNzaW9uLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LFxuICAgICAgICAgICAgcHJlZml4OiBmYWxzZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhbiBlbnRpcmUgcHJvZ3JhbVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgcHJvZ3JhbSBib2R5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVR5cGUgRWl0aGVyIFwibW9kdWxlXCIgb3IgXCJzY3JpcHRcIi5cbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gZW50aXJlIHByb2dyYW1cbiAgICAgKi9cbiAgICBjcmVhdGVQcm9ncmFtOiBmdW5jdGlvbihib2R5LCBzb3VyY2VUeXBlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUHJvZ3JhbSxcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiBzb3VyY2VUeXBlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdCBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIFRoZSB0eXBlIG9mIHByb3BlcnR5IHJlcHJlc2VudGVkIChcImdldFwiLCBcInNldFwiLCBldGMuKVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0ga2V5IFRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IHZhbHVlIFRoZSBuZXcgcHJvcGVydHkgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG1ldGhvZCBUcnVlIGlmIHRoZSBwcm9wZXJ0eSBpcyBhbHNvIGEgbWV0aG9kICh2YWx1ZSBpcyBhIGZ1bmN0aW9uKVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvcnRoYW5kIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHNob3J0aGFuZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29tcHV0ZWQgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgdmFsdWUgaGFzIGJlZW4gY29tcHV0ZWRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAgICovXG4gICAgY3JlYXRlUHJvcGVydHk6IGZ1bmN0aW9uKGtpbmQsIGtleSwgdmFsdWUsIG1ldGhvZCwgc2hvcnRoYW5kLCBjb21wdXRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlByb3BlcnR5LFxuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBraW5kOiBraW5kLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBzaG9ydGhhbmQ6IHNob3J0aGFuZCxcbiAgICAgICAgICAgIGNvbXB1dGVkOiBjb21wdXRlZFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHJlc3QgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIHJlc3QgYXJndW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSByZXN0IGVsZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVSZXN0RWxlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUmVzdEVsZW1lbnQsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSByZXR1cm4gc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHs/QVNUTm9kZX0gYXJndW1lbnQgVGhlIHJldHVybiBhcmd1bWVudCwgbnVsbCBpZiBubyBhcmd1bWVudCBpcyBwcm92aWRlZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHJldHVybiBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBjcmVhdGVSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuUmV0dXJuU3RhdGVtZW50LFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnNcbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZXhwcmVzc2lvbnMgQW4gYXJyYXkgY29udGFpbmluZyBlYWNoIGV4cHJlc3Npb24sIGluIG9yZGVyXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc2VxdWVuY2Ugb2YgZXhwcmVzc2lvbnNcbiAgICAgKi9cbiAgICBjcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb246IGZ1bmN0aW9uKGV4cHJlc3Npb25zKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU2VxdWVuY2VFeHByZXNzaW9uLFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIHN1cGVyXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIHN1cGVyXG4gICAgICovXG4gICAgY3JlYXRlU3VwZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlN1cGVyXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3dpdGNoIGNhc2Ugc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSB0ZXN0IFRoZSBjYXNlIHZhbHVlIHRvIHRlc3QgYWdhaW5zdCB0aGUgc3dpdGNoIHZhbHVlXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBjb25zZXF1ZW50IFRoZSBjb25zZXF1ZW50IGNhc2Ugc3RhdGVtZW50XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc3dpdGNoIGNhc2VcbiAgICAgKi9cbiAgICBjcmVhdGVTd2l0Y2hDYXNlOiBmdW5jdGlvbih0ZXN0LCBjb25zZXF1ZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuU3dpdGNoQ2FzZSxcbiAgICAgICAgICAgIHRlc3Q6IHRlc3QsXG4gICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50XG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3dpdGNoIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gZGlzY3JpbWluYW50IEFuIGV4cHJlc3Npb24gdG8gdGVzdCBhZ2FpbnN0IGVhY2ggY2FzZSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBjYXNlcyBBbiBhcnJheSBvZiBzd2l0Y2ggY2FzZSBzdGF0ZW1lbnRzXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgc3dpdGNoIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVN3aXRjaFN0YXRlbWVudDogZnVuY3Rpb24oZGlzY3JpbWluYW50LCBjYXNlcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlN3aXRjaFN0YXRlbWVudCxcbiAgICAgICAgICAgIGRpc2NyaW1pbmFudDogZGlzY3JpbWluYW50LFxuICAgICAgICAgICAgY2FzZXM6IGNhc2VzXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhpcyBzdGF0ZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB0aGlzIHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVRoaXNFeHByZXNzaW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5UaGlzRXhwcmVzc2lvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHRocm93IHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYXJndW1lbnQgVGhlIGFyZ3VtZW50IHRvIHRocm93XG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdGhyb3cgc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlVGhyb3dTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGFyZ3VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVGhyb3dTdGF0ZW1lbnQsXG4gICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB0cnkgc3RhdGVtZW50XG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBibG9jayBUaGUgdHJ5IGJsb2NrXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBoYW5kbGVyIEEgY2F0Y2ggaGFuZGxlclxuICAgICAqIEBwYXJhbSB7P0FTVE5vZGV9IGZpbmFsaXplciBUaGUgZmluYWwgY29kZSBibG9jayB0byBydW4gYWZ0ZXIgdGhlIHRyeS9jYXRjaCBoYXMgcnVuXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdHJ5IHN0YXRlbWVudFxuICAgICAqL1xuICAgIGNyZWF0ZVRyeVN0YXRlbWVudDogZnVuY3Rpb24oYmxvY2ssIGhhbmRsZXIsIGZpbmFsaXplcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlRyeVN0YXRlbWVudCxcbiAgICAgICAgICAgIGJsb2NrOiBibG9jayxcbiAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgICAgICBmaW5hbGl6ZXI6IGZpbmFsaXplclxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gQVNUTm9kZSByZXByZXNlbnRhdGlvbiBvZiBhIHVuYXJ5IGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgVGhlIHVuYXJ5IG9wZXJhdG9yXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBhcmd1bWVudCBUaGUgdW5hcnkgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHVuYXJ5IGV4cHJlc3Npb25cbiAgICAgKi9cbiAgICBjcmVhdGVVbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBhcmd1bWVudCkge1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09IFwiKytcIiB8fCBvcGVyYXRvciA9PT0gXCItLVwiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5VcGRhdGVFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsXG4gICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuVW5hcnlFeHByZXNzaW9uLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LFxuICAgICAgICAgICAgcHJlZml4OiB0cnVlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFyaWFibGUgZGVjbGFyYXRpb25cbiAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gZGVjbGFyYXRpb25zIEFuIGFycmF5IG9mIHZhcmlhYmxlIGRlY2xhcmF0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIFRoZSBraW5kIG9mIHZhcmlhYmxlIGNyZWF0ZWQgKFwidmFyXCIsIFwibGV0XCIsIGV0Yy4pXG4gICAgICogQHJldHVybnMge0FTVE5vZGV9IEFuIEFTVE5vZGUgcmVwcmVzZW50aW5nIGEgdmFyaWFibGUgZGVjbGFyYXRpb25cbiAgICAgKi9cbiAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5WYXJpYWJsZURlY2xhcmF0aW9uLFxuICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBkZWNsYXJhdGlvbnMsXG4gICAgICAgICAgICBraW5kOiBraW5kXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBBU1ROb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFyaWFibGUgZGVjbGFyYXRvclxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gaWQgVGhlIHZhcmlhYmxlIElEXG4gICAgICogQHBhcmFtIHtBU1ROb2RlfSBpbml0IFRoZSB2YXJpYWJsZSdzIGluaXRpYWwgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gQW4gQVNUTm9kZSByZXByZXNlbnRpbmcgYSB2YXJpYWJsZSBkZWNsYXJhdG9yXG4gICAgICovXG4gICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbihpZCwgaW5pdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLlZhcmlhYmxlRGVjbGFyYXRvcixcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIGluaXQ6IGluaXRcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIEFTVE5vZGUgcmVwcmVzZW50YXRpb24gb2YgYSB3aXRoIHN0YXRlbWVudFxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gb2JqZWN0IFRoZSB3aXRoIHN0YXRlbWVudCBvYmplY3QgZXhwcmVzc2lvblxuICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgd2l0aCBzdGF0ZW1lbnQgYm9keVxuICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBBbiBBU1ROb2RlIHJlcHJlc2VudGluZyBhIHdpdGggc3RhdGVtZW50XG4gICAgICovXG4gICAgY3JlYXRlV2l0aFN0YXRlbWVudDogZnVuY3Rpb24ob2JqZWN0LCBib2R5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuV2l0aFN0YXRlbWVudCxcbiAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgICAgICAgYm9keTogYm9keVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVZaWVsZEV4cHJlc3Npb246IGZ1bmN0aW9uKGFyZ3VtZW50LCBkZWxlZ2F0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLllpZWxkRXhwcmVzc2lvbixcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCB8fCBudWxsLFxuICAgICAgICAgICAgZGVsZWdhdGU6IGRlbGVnYXRlXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWEF0dHJpYnV0ZTogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hBdHRyaWJ1dGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlIHx8IG51bGxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYU3ByZWFkQXR0cmlidXRlOiBmdW5jdGlvbihhcmd1bWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWFNwcmVhZEF0dHJpYnV0ZSxcbiAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVKU1hJZGVudGlmaWVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSlNYSWRlbnRpZmllcixcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYTmFtZXNwYWNlZE5hbWU6IGZ1bmN0aW9uKG5hbWVzcGFjZSwgbmFtZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWE5hbWVzcGFjZWROYW1lLFxuICAgICAgICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWE1lbWJlckV4cHJlc3Npb246IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hNZW1iZXJFeHByZXNzaW9uLFxuICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsXG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRWxlbWVudDogZnVuY3Rpb24ob3BlbmluZ0VsZW1lbnQsIGNsb3NpbmdFbGVtZW50LCBjaGlsZHJlbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEVsZW1lbnQsXG4gICAgICAgICAgICBvcGVuaW5nRWxlbWVudDogb3BlbmluZ0VsZW1lbnQsXG4gICAgICAgICAgICBjbG9zaW5nRWxlbWVudDogY2xvc2luZ0VsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRW1wdHlFeHByZXNzaW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hFbXB0eUV4cHJlc3Npb25cbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjogZnVuY3Rpb24oZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWEV4cHJlc3Npb25Db250YWluZXIsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUpTWE9wZW5pbmdFbGVtZW50OiBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkpTWE9wZW5pbmdFbGVtZW50LFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHNlbGZDbG9zaW5nOiBzZWxmQ2xvc2luZyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSlNYQ2xvc2luZ0VsZW1lbnQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5KU1hDbG9zaW5nRWxlbWVudCxcbiAgICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0U3BlY2lmaWVyOiBmdW5jdGlvbihsb2NhbCwgZXhwb3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5FeHBvcnRTcGVjaWZpZXIsXG4gICAgICAgICAgICBleHBvcnRlZDogZXhwb3J0ZWQgfHwgbG9jYWwsXG4gICAgICAgICAgICBsb2NhbDogbG9jYWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlSW1wb3J0RGVmYXVsdFNwZWNpZmllcjogZnVuY3Rpb24obG9jYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JbXBvcnREZWZhdWx0U3BlY2lmaWVyLFxuICAgICAgICAgICAgbG9jYWw6IGxvY2FsXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIGNyZWF0ZUltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogZnVuY3Rpb24obG9jYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IGFzdE5vZGVUeXBlcy5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIsXG4gICAgICAgICAgICBsb2NhbDogbG9jYWxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogZnVuY3Rpb24oZGVjbGFyYXRpb24sIHNwZWNpZmllcnMsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBkZWNsYXJhdGlvbjogZGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzcGVjaWZpZXJzOiBzcGVjaWZpZXJzLFxuICAgICAgICAgICAgc291cmNlOiBzb3VyY2VcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgY3JlYXRlRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBmdW5jdGlvbihkZWNsYXJhdGlvbikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbixcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uOiBkZWNsYXJhdGlvblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVFeHBvcnRBbGxEZWNsYXJhdGlvbjogZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuRXhwb3J0QWxsRGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZVxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVJbXBvcnRTcGVjaWZpZXI6IGZ1bmN0aW9uKGxvY2FsLCBpbXBvcnRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogYXN0Tm9kZVR5cGVzLkltcG9ydFNwZWNpZmllcixcbiAgICAgICAgICAgIGxvY2FsOiBsb2NhbCB8fCBpbXBvcnRlZCxcbiAgICAgICAgICAgIGltcG9ydGVkOiBpbXBvcnRlZFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICBjcmVhdGVJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24oc3BlY2lmaWVycywgc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBhc3ROb2RlVHlwZXMuSW1wb3J0RGVjbGFyYXRpb24sXG4gICAgICAgICAgICBzcGVjaWZpZXJzOiBzcGVjaWZpZXJzLFxuICAgICAgICAgICAgc291cmNlOiBzb3VyY2VcbiAgICAgICAgfTtcbiAgICB9XG5cbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVGhlIEFTVCBub2RlIHR5cGVzIHByb2R1Y2VkIGJ5IHRoZSBwYXJzZXIuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb25lIVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiLFxuICAgIEFzc2lnbm1lbnRQYXR0ZXJuOiBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIsXG4gICAgQXJyYXlFeHByZXNzaW9uOiBcIkFycmF5RXhwcmVzc2lvblwiLFxuICAgIEFycmF5UGF0dGVybjogXCJBcnJheVBhdHRlcm5cIixcbiAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiLFxuICAgIEJsb2NrU3RhdGVtZW50OiBcIkJsb2NrU3RhdGVtZW50XCIsXG4gICAgQmluYXJ5RXhwcmVzc2lvbjogXCJCaW5hcnlFeHByZXNzaW9uXCIsXG4gICAgQnJlYWtTdGF0ZW1lbnQ6IFwiQnJlYWtTdGF0ZW1lbnRcIixcbiAgICBDYWxsRXhwcmVzc2lvbjogXCJDYWxsRXhwcmVzc2lvblwiLFxuICAgIENhdGNoQ2xhdXNlOiBcIkNhdGNoQ2xhdXNlXCIsXG4gICAgQ2xhc3NCb2R5OiBcIkNsYXNzQm9keVwiLFxuICAgIENsYXNzRGVjbGFyYXRpb246IFwiQ2xhc3NEZWNsYXJhdGlvblwiLFxuICAgIENsYXNzRXhwcmVzc2lvbjogXCJDbGFzc0V4cHJlc3Npb25cIixcbiAgICBDb25kaXRpb25hbEV4cHJlc3Npb246IFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsXG4gICAgQ29udGludWVTdGF0ZW1lbnQ6IFwiQ29udGludWVTdGF0ZW1lbnRcIixcbiAgICBEb1doaWxlU3RhdGVtZW50OiBcIkRvV2hpbGVTdGF0ZW1lbnRcIixcbiAgICBEZWJ1Z2dlclN0YXRlbWVudDogXCJEZWJ1Z2dlclN0YXRlbWVudFwiLFxuICAgIEVtcHR5U3RhdGVtZW50OiBcIkVtcHR5U3RhdGVtZW50XCIsXG4gICAgRXhwZXJpbWVudGFsUmVzdFByb3BlcnR5OiBcIkV4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eVwiLFxuICAgIEV4cGVyaW1lbnRhbFNwcmVhZFByb3BlcnR5OiBcIkV4cGVyaW1lbnRhbFNwcmVhZFByb3BlcnR5XCIsXG4gICAgRXhwcmVzc2lvblN0YXRlbWVudDogXCJFeHByZXNzaW9uU3RhdGVtZW50XCIsXG4gICAgRm9yU3RhdGVtZW50OiBcIkZvclN0YXRlbWVudFwiLFxuICAgIEZvckluU3RhdGVtZW50OiBcIkZvckluU3RhdGVtZW50XCIsXG4gICAgRm9yT2ZTdGF0ZW1lbnQ6IFwiRm9yT2ZTdGF0ZW1lbnRcIixcbiAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIixcbiAgICBGdW5jdGlvbkV4cHJlc3Npb246IFwiRnVuY3Rpb25FeHByZXNzaW9uXCIsXG4gICAgSWRlbnRpZmllcjogXCJJZGVudGlmaWVyXCIsXG4gICAgSWZTdGF0ZW1lbnQ6IFwiSWZTdGF0ZW1lbnRcIixcbiAgICBMaXRlcmFsOiBcIkxpdGVyYWxcIixcbiAgICBMYWJlbGVkU3RhdGVtZW50OiBcIkxhYmVsZWRTdGF0ZW1lbnRcIixcbiAgICBMb2dpY2FsRXhwcmVzc2lvbjogXCJMb2dpY2FsRXhwcmVzc2lvblwiLFxuICAgIE1lbWJlckV4cHJlc3Npb246IFwiTWVtYmVyRXhwcmVzc2lvblwiLFxuICAgIE1ldGFQcm9wZXJ0eTogXCJNZXRhUHJvcGVydHlcIixcbiAgICBNZXRob2REZWZpbml0aW9uOiBcIk1ldGhvZERlZmluaXRpb25cIixcbiAgICBOZXdFeHByZXNzaW9uOiBcIk5ld0V4cHJlc3Npb25cIixcbiAgICBPYmplY3RFeHByZXNzaW9uOiBcIk9iamVjdEV4cHJlc3Npb25cIixcbiAgICBPYmplY3RQYXR0ZXJuOiBcIk9iamVjdFBhdHRlcm5cIixcbiAgICBQcm9ncmFtOiBcIlByb2dyYW1cIixcbiAgICBQcm9wZXJ0eTogXCJQcm9wZXJ0eVwiLFxuICAgIFJlc3RFbGVtZW50OiBcIlJlc3RFbGVtZW50XCIsXG4gICAgUmV0dXJuU3RhdGVtZW50OiBcIlJldHVyblN0YXRlbWVudFwiLFxuICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogXCJTZXF1ZW5jZUV4cHJlc3Npb25cIixcbiAgICBTcHJlYWRFbGVtZW50OiBcIlNwcmVhZEVsZW1lbnRcIixcbiAgICBTdXBlcjogXCJTdXBlclwiLFxuICAgIFN3aXRjaENhc2U6IFwiU3dpdGNoQ2FzZVwiLFxuICAgIFN3aXRjaFN0YXRlbWVudDogXCJTd2l0Y2hTdGF0ZW1lbnRcIixcbiAgICBUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb246IFwiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uXCIsXG4gICAgVGVtcGxhdGVFbGVtZW50OiBcIlRlbXBsYXRlRWxlbWVudFwiLFxuICAgIFRlbXBsYXRlTGl0ZXJhbDogXCJUZW1wbGF0ZUxpdGVyYWxcIixcbiAgICBUaGlzRXhwcmVzc2lvbjogXCJUaGlzRXhwcmVzc2lvblwiLFxuICAgIFRocm93U3RhdGVtZW50OiBcIlRocm93U3RhdGVtZW50XCIsXG4gICAgVHJ5U3RhdGVtZW50OiBcIlRyeVN0YXRlbWVudFwiLFxuICAgIFVuYXJ5RXhwcmVzc2lvbjogXCJVbmFyeUV4cHJlc3Npb25cIixcbiAgICBVcGRhdGVFeHByZXNzaW9uOiBcIlVwZGF0ZUV4cHJlc3Npb25cIixcbiAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIixcbiAgICBWYXJpYWJsZURlY2xhcmF0b3I6IFwiVmFyaWFibGVEZWNsYXJhdG9yXCIsXG4gICAgV2hpbGVTdGF0ZW1lbnQ6IFwiV2hpbGVTdGF0ZW1lbnRcIixcbiAgICBXaXRoU3RhdGVtZW50OiBcIldpdGhTdGF0ZW1lbnRcIixcbiAgICBZaWVsZEV4cHJlc3Npb246IFwiWWllbGRFeHByZXNzaW9uXCIsXG4gICAgSlNYSWRlbnRpZmllcjogXCJKU1hJZGVudGlmaWVyXCIsXG4gICAgSlNYTmFtZXNwYWNlZE5hbWU6IFwiSlNYTmFtZXNwYWNlZE5hbWVcIixcbiAgICBKU1hNZW1iZXJFeHByZXNzaW9uOiBcIkpTWE1lbWJlckV4cHJlc3Npb25cIixcbiAgICBKU1hFbXB0eUV4cHJlc3Npb246IFwiSlNYRW1wdHlFeHByZXNzaW9uXCIsXG4gICAgSlNYRXhwcmVzc2lvbkNvbnRhaW5lcjogXCJKU1hFeHByZXNzaW9uQ29udGFpbmVyXCIsXG4gICAgSlNYRWxlbWVudDogXCJKU1hFbGVtZW50XCIsXG4gICAgSlNYQ2xvc2luZ0VsZW1lbnQ6IFwiSlNYQ2xvc2luZ0VsZW1lbnRcIixcbiAgICBKU1hPcGVuaW5nRWxlbWVudDogXCJKU1hPcGVuaW5nRWxlbWVudFwiLFxuICAgIEpTWEF0dHJpYnV0ZTogXCJKU1hBdHRyaWJ1dGVcIixcbiAgICBKU1hTcHJlYWRBdHRyaWJ1dGU6IFwiSlNYU3ByZWFkQXR0cmlidXRlXCIsXG4gICAgSlNYVGV4dDogXCJKU1hUZXh0XCIsXG4gICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBcIkV4cG9ydERlZmF1bHREZWNsYXJhdGlvblwiLFxuICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IFwiRXhwb3J0TmFtZWREZWNsYXJhdGlvblwiLFxuICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIsXG4gICAgRXhwb3J0U3BlY2lmaWVyOiBcIkV4cG9ydFNwZWNpZmllclwiLFxuICAgIEltcG9ydERlY2xhcmF0aW9uOiBcIkltcG9ydERlY2xhcmF0aW9uXCIsXG4gICAgSW1wb3J0U3BlY2lmaWVyOiBcIkltcG9ydFNwZWNpZmllclwiLFxuICAgIEltcG9ydERlZmF1bHRTcGVjaWZpZXI6IFwiSW1wb3J0RGVmYXVsdFNwZWNpZmllclwiLFxuICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogXCJJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXJcIlxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBBdHRhY2hlcyBjb21tZW50cyB0byB0aGUgQVNULlxuICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthc1xuICogQGNvcHlyaWdodCAyMDE1IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGFzdE5vZGVUeXBlcyA9IHJlcXVpcmUoXCIuL2FzdC1ub2RlLXR5cGVzXCIpO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJpdmF0ZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGV4dHJhID0ge1xuICAgICAgICB0cmFpbGluZ0NvbW1lbnRzOiBbXSxcbiAgICAgICAgbGVhZGluZ0NvbW1lbnRzOiBbXSxcbiAgICAgICAgYm90dG9tUmlnaHRTdGFjazogW11cbiAgICB9O1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFjayA9IFtdO1xuICAgIH0sXG5cbiAgICBhZGRDb21tZW50OiBmdW5jdGlvbihjb21tZW50KSB7XG4gICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMucHVzaChjb21tZW50KTtcbiAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgfSxcblxuICAgIHByb2Nlc3NDb21tZW50OiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIHZhciBsYXN0Q2hpbGQsXG4gICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzLFxuICAgICAgICAgICAgaTtcblxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBhc3ROb2RlVHlwZXMuUHJvZ3JhbSkge1xuICAgICAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogSWYgdGhlIGZpcnN0IGNvbW1lbnQgaW4gdHJhaWxpbmdDb21tZW50cyBjb21lcyBhZnRlciB0aGVcbiAgICAgICAgICAgICAqIGN1cnJlbnQgbm9kZSwgdGhlbiB3ZSdyZSBnb29kIC0gYWxsIGNvbW1lbnRzIGluIHRoZSBhcnJheSB3aWxsXG4gICAgICAgICAgICAgKiBjb21lIGFmdGVyIHRoZSBub2RlIGFuZCBzbyBpdCdzIHNhZmUgdG8gYWRkIHRoZW4gYXMgb2ZmaWNpYWxcbiAgICAgICAgICAgICAqIHRyYWlsaW5nQ29tbWVudHMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEudHJhaWxpbmdDb21tZW50cztcbiAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgKiBPdGhlcndpc2UsIGlmIHRoZSBmaXJzdCBjb21tZW50IGRvZXNuJ3QgY29tZSBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAgKiBjdXJyZW50IG5vZGUsIHRoYXQgbWVhbnMgd2UgaGF2ZSBhIG1peCBvZiBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgICAgICAgICAgICAgICAqIGNvbW1lbnRzIGluIHRoZSBhcnJheSBhbmQgdGhhdCBsZWFkaW5nQ29tbWVudHMgY29udGFpbnMgdGhlXG4gICAgICAgICAgICAgICAgICogc2FtZSBpdGVtcyBhcyB0cmFpbGluZ0NvbW1lbnRzLiBSZXNldCB0cmFpbGluZ0NvbW1lbnRzIHRvXG4gICAgICAgICAgICAgICAgICogemVybyBpdGVtcyBhbmQgd2UnbGwgaGFuZGxlIHRoaXMgYnkgZXZhbHVhdGluZyBsZWFkaW5nQ29tbWVudHNcbiAgICAgICAgICAgICAgICAgKiBsYXRlci5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRWF0aW5nIHRoZSBzdGFjay5cbiAgICAgICAgd2hpbGUgKGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoID4gMCAmJiBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgbGFzdENoaWxkID0gZXh0cmEuYm90dG9tUmlnaHRTdGFjay5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXN0Q2hpbGQpIHtcbiAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNbbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENoaWxkLmxlYWRpbmdDb21tZW50cztcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBsZWFkaW5nIGNvbW1lbnQgZm9yIGFuIGFub255bW91cyBjbGFzcyBoYWQgYmVlbiBzdG9sZW4gYnkgaXRzIGZpcnN0IE1ldGhvZERlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHRoaXMgdGFrZXMgYmFjayB0aGUgbGVhZGluZyBjb21tZW50LlxuICAgICAgICAgICAgICAgICAgICAvLyBTZWUgQWxzbzogaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc3ByZWUvaXNzdWVzLzE1OFxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCAtIDI7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENoaWxkLmxlYWRpbmdDb21tZW50c1tpXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLnNwbGljZSgwLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgaWYgKGV4dHJhLmxlYWRpbmdDb21tZW50c1tleHRyYS5sZWFkaW5nQ29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlL2lzc3Vlcy8yXG5cbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAqIEluIHNwZWNpYWwgY2FzZXMsIHN1Y2ggYXMgcmV0dXJuICh3aXRob3V0IGEgdmFsdWUpIGFuZFxuICAgICAgICAgICAgICAgICAqIGRlYnVnZ2VyLCBhbGwgY29tbWVudHMgd2lsbCBlbmQgdXAgYXMgbGVhZGluZ0NvbW1lbnRzIGFuZFxuICAgICAgICAgICAgICAgICAqIHdpbGwgb3RoZXJ3aXNlIGJlIGVsaW1pbmF0ZWQuIFRoaXMgZXh0cmEgc3RlcCBydW5zIHdoZW4gdGhlXG4gICAgICAgICAgICAgICAgICogYm90dG9tUmlnaHRTdGFjayBpcyBlbXB0eSBhbmQgdGhlcmUgYXJlIGNvbW1lbnRzIGxlZnRcbiAgICAgICAgICAgICAgICAgKiBpbiBsZWFkaW5nQ29tbWVudHMuXG4gICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgKiBUaGlzIGxvb3AgZmlndXJlcyBvdXQgdGhlIHN0b3BwaW5nIHBvaW50IGJldHdlZW4gdGhlIGFjdHVhbFxuICAgICAgICAgICAgICAgICAqIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNvbW1lbnRzIGJ5IGZpbmRpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZVxuICAgICAgICAgICAgICAgICAqIGZpcnN0IGNvbW1lbnQgdGhhdCBjb21lcyBhZnRlciB0aGUgZ2l2ZW4gbm9kZS5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXh0cmEubGVhZGluZ0NvbW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHRyYS5sZWFkaW5nQ29tbWVudHNbaV0ucmFuZ2VbMV0gPiBub2RlLnJhbmdlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogU3BsaXQgdGhlIGFycmF5IGJhc2VkIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgY29tbWVudFxuICAgICAgICAgICAgICAgICAqIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIG5vZGUuIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgY291bGRcbiAgICAgICAgICAgICAgICAgKiByZXN1bHQgaW4gYW4gZW1wdHkgYXJyYXksIGFuZCBpZiBzbywgdGhlIGFycmF5IG11c3QgYmVcbiAgICAgICAgICAgICAgICAgKiBkZWxldGVkLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzLnNsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmxlYWRpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5vZGUubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICogU2ltaWxhcmx5LCB0cmFpbGluZyBjb21tZW50cyBhcmUgYXR0YWNoZWQgbGF0ZXIuIFRoZSB2YXJpYWJsZVxuICAgICAgICAgICAgICAgICAqIG11c3QgYmUgcmVzZXQgdG8gbnVsbCBpZiB0aGVyZSBhcmUgbm8gdHJhaWxpbmcgY29tbWVudHMuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGV4dHJhLmxlYWRpbmdDb21tZW50cy5zbGljZShpKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrLnB1c2gobm9kZSk7XG4gICAgfVxuXG59O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFRoZSBsaXN0IG9mIGZlYXR1cmUgZmxhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBwYXJzZXIgYW5kIHRoZWlyIGRlZmF1bHRcbiAqICAgICAgc2V0dGluZ3MuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTUgRnJlZCBLLiBTY2hvdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBhcnJvdyBmdW5jdGlvbnNcbiAgICBhcnJvd0Z1bmN0aW9uczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBsZXQgYW5kIGNvbnN0XG4gICAgYmxvY2tCaW5kaW5nczogdHJ1ZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGRlc3RydWN0dXJlZCBhcnJheXMgYW5kIG9iamVjdHNcbiAgICBkZXN0cnVjdHVyaW5nOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIHJlZ2V4IHUgZmxhZ1xuICAgIHJlZ2V4VUZsYWc6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgcmVnZXggeSBmbGFnXG4gICAgcmVnZXhZRmxhZzogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiB0ZW1wbGF0ZSBzdHJpbmdzXG4gICAgdGVtcGxhdGVTdHJpbmdzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIGJpbmFyeSBsaXRlcmFsc1xuICAgIGJpbmFyeUxpdGVyYWxzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIEVTNiBvY3RhbCBsaXRlcmFsc1xuICAgIG9jdGFsTGl0ZXJhbHM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgdW5pY29kZSBjb2RlIHBvaW50IGVzY2FwZSBzZXF1ZW5jZXNcbiAgICB1bmljb2RlQ29kZVBvaW50RXNjYXBlczogdHJ1ZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGRlZmF1bHQgcGFyYW1ldGVyc1xuICAgIGRlZmF1bHRQYXJhbXM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2YgcmVzdCBwYXJhbWV0ZXJzXG4gICAgcmVzdFBhcmFtczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBmb3Itb2Ygc3RhdGVtZW50c1xuICAgIGZvck9mOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIGNvbXB1dGVkIG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXNcbiAgICBvYmplY3RMaXRlcmFsQ29tcHV0ZWRQcm9wZXJ0aWVzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIHNob3J0aGFuZCBvYmplY3QgbGl0ZXJhbCBtZXRob2RzXG4gICAgb2JqZWN0TGl0ZXJhbFNob3J0aGFuZE1ldGhvZHM6IGZhbHNlLFxuXG4gICAgLy8gZW5hYmxlIHBhcnNpbmcgb2Ygc2hvcnRoYW5kIG9iamVjdCBsaXRlcmFsIHByb3BlcnRpZXNcbiAgICBvYmplY3RMaXRlcmFsU2hvcnRoYW5kUHJvcGVydGllczogZmFsc2UsXG5cbiAgICAvLyBBbGxvdyBkdXBsaWNhdGUgb2JqZWN0IGxpdGVyYWwgcHJvcGVydGllcyAoZXhjZXB0ICdfX3Byb3RvX18nKVxuICAgIG9iamVjdExpdGVyYWxEdXBsaWNhdGVQcm9wZXJ0aWVzOiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIGdlbmVyYXRvcnMveWllbGRcbiAgICBnZW5lcmF0b3JzOiBmYWxzZSxcblxuICAgIC8vIHN1cHBvcnQgdGhlIHNwcmVhZCBvcGVyYXRvclxuICAgIHNwcmVhZDogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgc3VwZXIgaW4gZnVuY3Rpb25zXG4gICAgc3VwZXJJbkZ1bmN0aW9uczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBjbGFzc2VzXG4gICAgY2xhc3NlczogZmFsc2UsXG5cbiAgICAvLyBlbmFibGUgcGFyc2luZyBvZiBuZXcudGFyZ2V0XG4gICAgbmV3VGFyZ2V0OiBmYWxzZSxcblxuICAgIC8vIGVuYWJsZSBwYXJzaW5nIG9mIG1vZHVsZXNcbiAgICBtb2R1bGVzOiBmYWxzZSxcblxuICAgIC8vIFJlYWN0IEpTWCBwYXJzaW5nXG4gICAganN4OiBmYWxzZSxcblxuICAgIC8vIGFsbG93IHJldHVybiBzdGF0ZW1lbnQgaW4gZ2xvYmFsIHNjb3BlXG4gICAgZ2xvYmFsUmV0dXJuOiBmYWxzZSxcblxuICAgIC8vIGFsbG93IGV4cGVyaW1lbnRhbCBvYmplY3QgcmVzdC9zcHJlYWRcbiAgICBleHBlcmltZW50YWxPYmplY3RSZXN0U3ByZWFkOiBmYWxzZVxufTtcbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBFcnJvciBtZXNzYWdlcyByZXR1cm5lZCBieSB0aGUgcGFyc2VyLlxuICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthc1xuICogQGNvcHlyaWdodCAyMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gZXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIGlkZW50aWNhbCB0byBWOCB3aGVyZSBwb3NzaWJsZVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVW5leHBlY3RlZFRva2VuOiBcIlVuZXhwZWN0ZWQgdG9rZW4gJTBcIixcbiAgICBVbmV4cGVjdGVkTnVtYmVyOiBcIlVuZXhwZWN0ZWQgbnVtYmVyXCIsXG4gICAgVW5leHBlY3RlZFN0cmluZzogXCJVbmV4cGVjdGVkIHN0cmluZ1wiLFxuICAgIFVuZXhwZWN0ZWRJZGVudGlmaWVyOiBcIlVuZXhwZWN0ZWQgaWRlbnRpZmllclwiLFxuICAgIFVuZXhwZWN0ZWRSZXNlcnZlZDogXCJVbmV4cGVjdGVkIHJlc2VydmVkIHdvcmRcIixcbiAgICBVbmV4cGVjdGVkVGVtcGxhdGU6IFwiVW5leHBlY3RlZCBxdWFzaSAlMFwiLFxuICAgIFVuZXhwZWN0ZWRFT1M6IFwiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXRcIixcbiAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogXCJJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3dcIixcbiAgICBJbnZhbGlkUmVnRXhwOiBcIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uXCIsXG4gICAgSW52YWxpZFJlZ0V4cEZsYWc6IFwiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ1wiLFxuICAgIFVudGVybWluYXRlZFJlZ0V4cDogXCJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlzc2luZyAvXCIsXG4gICAgSW52YWxpZExIU0luQXNzaWdubWVudDogXCJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGFzc2lnbm1lbnRcIixcbiAgICBJbnZhbGlkTEhTSW5Gb3JtYWxzTGlzdDogXCJJbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvcm1hbHMgbGlzdFwiLFxuICAgIEludmFsaWRMSFNJbkZvckluOiBcIkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluXCIsXG4gICAgTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiBcIk1vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRlbWVudFwiLFxuICAgIE5vQ2F0Y2hPckZpbmFsbHk6IFwiTWlzc2luZyBjYXRjaCBvciBmaW5hbGx5IGFmdGVyIHRyeVwiLFxuICAgIE5vVW5pbnRpYWxpemVkQ29uc3Q6IFwiQ29uc3QgbXVzdCBiZSBpbml0aWFsaXplZFwiLFxuICAgIFVua25vd25MYWJlbDogXCJVbmRlZmluZWQgbGFiZWwgJyUwJ1wiLFxuICAgIFJlZGVjbGFyYXRpb246IFwiJTAgJyUxJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkXCIsXG4gICAgSWxsZWdhbENvbnRpbnVlOiBcIklsbGVnYWwgY29udGludWUgc3RhdGVtZW50XCIsXG4gICAgSWxsZWdhbEJyZWFrOiBcIklsbGVnYWwgYnJlYWsgc3RhdGVtZW50XCIsXG4gICAgSWxsZWdhbFJldHVybjogXCJJbGxlZ2FsIHJldHVybiBzdGF0ZW1lbnRcIixcbiAgICBJbGxlZ2FsWWllbGQ6IFwiSWxsZWdhbCB5aWVsZCBleHByZXNzaW9uXCIsXG4gICAgSWxsZWdhbFNwcmVhZDogXCJJbGxlZ2FsIHNwcmVhZCBlbGVtZW50XCIsXG4gICAgU3RyaWN0TW9kZVdpdGg6IFwiU3RyaWN0IG1vZGUgY29kZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudFwiLFxuICAgIFN0cmljdENhdGNoVmFyaWFibGU6IFwiQ2F0Y2ggdmFyaWFibGUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFZhck5hbWU6IFwiVmFyaWFibGUgbmFtZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlXCIsXG4gICAgU3RyaWN0UGFyYW1OYW1lOiBcIlBhcmFtZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgU3RyaWN0UGFyYW1EdXBlOiBcIlN0cmljdCBtb2RlIGZ1bmN0aW9uIG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzXCIsXG4gICAgVGVtcGxhdGVPY3RhbExpdGVyYWw6IFwiT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHRlbXBsYXRlIHN0cmluZ3MuXCIsXG4gICAgUGFyYW1ldGVyQWZ0ZXJSZXN0UGFyYW1ldGVyOiBcIlJlc3QgcGFyYW1ldGVyIG11c3QgYmUgbGFzdCBmb3JtYWwgcGFyYW1ldGVyXCIsXG4gICAgRGVmYXVsdFJlc3RQYXJhbWV0ZXI6IFwiUmVzdCBwYXJhbWV0ZXIgY2FuIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZVwiLFxuICAgIEVsZW1lbnRBZnRlclNwcmVhZEVsZW1lbnQ6IFwiU3ByZWFkIG11c3QgYmUgdGhlIGZpbmFsIGVsZW1lbnQgb2YgYW4gZWxlbWVudCBsaXN0XCIsXG4gICAgT2JqZWN0UGF0dGVybkFzUmVzdFBhcmFtZXRlcjogXCJJbnZhbGlkIHJlc3QgcGFyYW1ldGVyXCIsXG4gICAgT2JqZWN0UGF0dGVybkFzU3ByZWFkOiBcIkludmFsaWQgc3ByZWFkIGFyZ3VtZW50XCIsXG4gICAgU3RyaWN0RnVuY3Rpb25OYW1lOiBcIkZ1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdE9jdGFsTGl0ZXJhbDogXCJPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuXCIsXG4gICAgU3RyaWN0RGVsZXRlOiBcIkRlbGV0ZSBvZiBhbiB1bnF1YWxpZmllZCBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlLlwiLFxuICAgIFN0cmljdER1cGxpY2F0ZVByb3BlcnR5OiBcIkR1cGxpY2F0ZSBkYXRhIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlXCIsXG4gICAgRHVwbGljYXRlUHJvdG90eXBlUHJvcGVydHk6IFwiRHVwbGljYXRlICdfX3Byb3RvX18nIHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIGFyZSBub3QgYWxsb3dlZFwiLFxuICAgIENvbnN0cnVjdG9yU3BlY2lhbE1ldGhvZDogXCJDbGFzcyBjb25zdHJ1Y3RvciBtYXkgbm90IGJlIGFuIGFjY2Vzc29yXCIsXG4gICAgRHVwbGljYXRlQ29uc3RydWN0b3I6IFwiQSBjbGFzcyBtYXkgb25seSBoYXZlIG9uZSBjb25zdHJ1Y3RvclwiLFxuICAgIFN0YXRpY1Byb3RvdHlwZTogXCJDbGFzc2VzIG1heSBub3QgaGF2ZSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgcHJvdG90eXBlXCIsXG4gICAgQWNjZXNzb3JEYXRhUHJvcGVydHk6IFwiT2JqZWN0IGxpdGVyYWwgbWF5IG5vdCBoYXZlIGRhdGEgYW5kIGFjY2Vzc29yIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZVwiLFxuICAgIEFjY2Vzc29yR2V0U2V0OiBcIk9iamVjdCBsaXRlcmFsIG1heSBub3QgaGF2ZSBtdWx0aXBsZSBnZXQvc2V0IGFjY2Vzc29ycyB3aXRoIHRoZSBzYW1lIG5hbWVcIixcbiAgICBTdHJpY3RMSFNBc3NpZ25tZW50OiBcIkFzc2lnbm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBTdHJpY3RMSFNQb3N0Zml4OiBcIlBvc3RmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdExIU1ByZWZpeDogXCJQcmVmaXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFuZCBpbiBzdHJpY3QgbW9kZVwiLFxuICAgIFN0cmljdFJlc2VydmVkV29yZDogXCJVc2Ugb2YgZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1vZGVcIixcbiAgICBJbnZhbGlkSlNYQXR0cmlidXRlVmFsdWU6IFwiSlNYIHZhbHVlIHNob3VsZCBiZSBlaXRoZXIgYW4gZXhwcmVzc2lvbiBvciBhIHF1b3RlZCBKU1ggdGV4dFwiLFxuICAgIEV4cGVjdGVkSlNYQ2xvc2luZ1RhZzogXCJFeHBlY3RlZCBjb3JyZXNwb25kaW5nIEpTWCBjbG9zaW5nIHRhZyBmb3IgJTBcIixcbiAgICBBZGphY2VudEpTWEVsZW1lbnRzOiBcIkFkamFjZW50IEpTWCBlbGVtZW50cyBtdXN0IGJlIHdyYXBwZWQgaW4gYW4gZW5jbG9zaW5nIHRhZ1wiLFxuICAgIE1pc3NpbmdGcm9tQ2xhdXNlOiBcIk1pc3NpbmcgZnJvbSBjbGF1c2VcIixcbiAgICBOb0FzQWZ0ZXJJbXBvcnROYW1lc3BhY2U6IFwiTWlzc2luZyBhcyBhZnRlciBpbXBvcnQgKlwiLFxuICAgIEludmFsaWRNb2R1bGVTcGVjaWZpZXI6IFwiSW52YWxpZCBtb2R1bGUgc3BlY2lmaWVyXCIsXG4gICAgSWxsZWdhbEltcG9ydERlY2xhcmF0aW9uOiBcIklsbGVnYWwgaW1wb3J0IGRlY2xhcmF0aW9uXCIsXG4gICAgSWxsZWdhbEV4cG9ydERlY2xhcmF0aW9uOiBcIklsbGVnYWwgZXhwb3J0IGRlY2xhcmF0aW9uXCJcbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQSBzaW1wbGUgbWFwIHRoYXQgaGVscHMgYXZvaWQgY29sbGlzaW9ucyBvbiB0aGUgT2JqZWN0IHByb3RvdHlwZS5cbiAqIEBhdXRob3IgSmFtdW5kIEZlcmd1c29uXG4gKiBAY29weXJpZ2h0IDIwMTUgSmFtdW5kIEZlcmd1c29uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogQGNvcHlyaWdodCAyMDExLTIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gU3RyaW5nTWFwKCkge1xuICAgIHRoaXMuJGRhdGEgPSB7fTtcbn1cblxuU3RyaW5nTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5ID0gXCIkXCIgKyBrZXk7XG4gICAgcmV0dXJuIHRoaXMuJGRhdGFba2V5XTtcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBrZXkgPSBcIiRcIiArIGtleTtcbiAgICB0aGlzLiRkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSA9IFwiJFwiICsga2V5O1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy4kZGF0YSwga2V5KTtcbn07XG5cblN0cmluZ01hcC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSA9IFwiJFwiICsga2V5O1xuICAgIHJldHVybiBkZWxldGUgdGhpcy4kZGF0YVtrZXldO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmdNYXA7XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVmFyaW91cyBzeW50YXgvcGF0dGVybiBjaGVja3MgZm9yIHBhcnNpbmcuXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTEtMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT5cbiAqIEBjb3B5cmlnaHQgMjAxMi0yMDEzIE1hdGhpYXMgQnluZW5zIDxtYXRoaWFzQHFpd2kuYmU+XG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICogICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlcXVpcmVtZW50c1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gTm9uZSFcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByaXZhdGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIFNlZSBhbHNvIHRvb2xzL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXguanMuXG52YXIgUmVnZXggPSB7XG4gICAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6IG5ldyBSZWdFeHAoXCJbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk3N1xcdTA5NzktXFx1MDk3RlxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RUUtXFx1MTZGMFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjk3XFx1QTZBMC1cXHVBNkVGXFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE4MC1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQkMwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdXCIpLFxuICAgIE5vbkFzY2lpSWRlbnRpZmllclBhcnQ6IG5ldyBSZWdFeHAoXCJbXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDgzLVxcdTA0ODdcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDU5MS1cXHUwNUJEXFx1MDVCRlxcdTA1QzFcXHUwNUMyXFx1MDVDNFxcdTA1QzVcXHUwNUM3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYxMC1cXHUwNjFBXFx1MDYyMC1cXHUwNjY5XFx1MDY2RS1cXHUwNkQzXFx1MDZENS1cXHUwNkRDXFx1MDZERi1cXHUwNkU4XFx1MDZFQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTAtXFx1MDc0QVxcdTA3NEQtXFx1MDdCMVxcdTA3QzAtXFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MkRcXHUwODQwLVxcdTA4NUJcXHUwOEEwXFx1MDhBMi1cXHUwOEFDXFx1MDhFNC1cXHUwOEZFXFx1MDkwMC1cXHUwOTYzXFx1MDk2Ni1cXHUwOTZGXFx1MDk3MS1cXHUwOTc3XFx1MDk3OS1cXHUwOTdGXFx1MDk4MS1cXHUwOTgzXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCQy1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0VcXHUwOUQ3XFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTNcXHUwOUU2LVxcdTA5RjFcXHUwQTAxLVxcdTBBMDNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE2Ni1cXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJDLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQUQwXFx1MEFFMC1cXHUwQUUzXFx1MEFFNi1cXHUwQUVGXFx1MEIwMS1cXHUwQjAzXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0MtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NlxcdTBCNTdcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2M1xcdTBCNjYtXFx1MEI2RlxcdTBCNzFcXHUwQjgyXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQwXFx1MEJEN1xcdTBCRTYtXFx1MEJFRlxcdTBDMDEtXFx1MEMwM1xcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzM1xcdTBDMzUtXFx1MEMzOVxcdTBDM0QtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM1OFxcdTBDNTlcXHUwQzYwLVxcdTBDNjNcXHUwQzY2LVxcdTBDNkZcXHUwQzgyXFx1MEM4M1xcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkMtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDRTAtXFx1MENFM1xcdTBDRTYtXFx1MENFRlxcdTBDRjFcXHUwQ0YyXFx1MEQwMlxcdTBEMDNcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNELVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENEVcXHUwRDU3XFx1MEQ2MC1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDZGXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MlxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUI5XFx1MEVCQi1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYyOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y0XFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkYwXFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUNcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5RDlcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0Y2XFx1MUQwMC1cXHUxREU2XFx1MURGQy1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwMENcXHUyMDBEXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMEQwLVxcdTIwRENcXHUyMEUxXFx1MjBFNS1cXHUyMEYwXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNjAtXFx1MjE4OFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEN0YtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJERTAtXFx1MkRGRlxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMkZcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDk5XFx1MzA5QVxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYyQlxcdUE2NDAtXFx1QTY2RlxcdUE2NzQtXFx1QTY3RFxcdUE2N0YtXFx1QTY5N1xcdUE2OUYtXFx1QTZGMVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTc4RVxcdUE3OTAtXFx1QTc5M1xcdUE3QTAtXFx1QTdBQVxcdUE3RjgtXFx1QTgyN1xcdUE4NDAtXFx1QTg3M1xcdUE4ODAtXFx1QThDNFxcdUE4RDAtXFx1QThEOVxcdUE4RTAtXFx1QThGN1xcdUE4RkJcXHVBOTAwLVxcdUE5MkRcXHVBOTMwLVxcdUE5NTNcXHVBOTYwLVxcdUE5N0NcXHVBOTgwLVxcdUE5QzBcXHVBOUNGLVxcdUE5RDlcXHVBQTAwLVxcdUFBMzZcXHVBQTQwLVxcdUFBNERcXHVBQTUwLVxcdUFBNTlcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE3QlxcdUFBODAtXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFRlxcdUFBRjItXFx1QUFGNlxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCQzAtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1QUJGMC1cXHVBQkY5XFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMjZcXHVGRTMzXFx1RkUzNFxcdUZFNEQtXFx1RkU0RlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMTAtXFx1RkYxOVxcdUZGMjEtXFx1RkYzQVxcdUZGM0ZcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdXCIpLFxuICAgIExlYWRpbmdaZXJvczogbmV3IFJlZ0V4cChcIl4wKyg/ISQpXCIpXG59O1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuICAgIFJlZ2V4OiBSZWdleCxcblxuICAgIGlzRGVjaW1hbERpZ2l0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45XG4gICAgfSxcblxuICAgIGlzSGV4RGlnaXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiBcIjAxMjM0NTY3ODlhYmNkZWZBQkNERUZcIi5pbmRleE9mKGNoKSA+PSAwO1xuICAgIH0sXG5cbiAgICBpc09jdGFsRGlnaXQ6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiBcIjAxMjM0NTY3XCIuaW5kZXhPZihjaCkgPj0gMDtcbiAgICB9LFxuXG4gICAgLy8gNy4yIFdoaXRlIFNwYWNlXG5cbiAgICBpc1doaXRlU3BhY2U6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MjApIHx8IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9PT0gMHhBMCkgfHxcbiAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgxODBFLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYsIDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwgMHhGRUZGXS5pbmRleE9mKGNoKSA+PSAwKTtcbiAgICB9LFxuXG4gICAgLy8gNy4zIExpbmUgVGVybWluYXRvcnNcblxuICAgIGlzTGluZVRlcm1pbmF0b3I6IGZ1bmN0aW9uKGNoKSB7XG4gICAgICAgIHJldHVybiAoY2ggPT09IDB4MEEpIHx8IChjaCA9PT0gMHgwRCkgfHwgKGNoID09PSAweDIwMjgpIHx8IChjaCA9PT0gMHgyMDI5KTtcbiAgICB9LFxuXG4gICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMgYW5kIElkZW50aWZpZXJzXG5cbiAgICBpc0lkZW50aWZpZXJTdGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPT09IDB4NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFxcIChiYWNrc2xhc2gpXG4gICAgICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTtcbiAgICB9LFxuXG4gICAgaXNJZGVudGlmaWVyUGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSlcbiAgICAgICAgICAgIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWlxuICAgICAgICAgICAgKGNoID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56XG4gICAgICAgICAgICAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB8fCAgICAgICAgIC8vIDAuLjlcbiAgICAgICAgICAgIChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXFwgKGJhY2tzbGFzaClcbiAgICAgICAgICAgICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7XG4gICAgfSxcblxuICAgIC8vIDcuNi4xLjIgRnV0dXJlIFJlc2VydmVkIFdvcmRzXG5cbiAgICBpc0Z1dHVyZVJlc2VydmVkV29yZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgc3dpdGNoIChpZCkge1xuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgICAgICAgY2FzZSBcImV4cG9ydFwiOlxuICAgICAgICAgICAgY2FzZSBcImV4dGVuZHNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbXBvcnRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzdXBlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkOiBmdW5jdGlvbihpZCwgZWNtYUZlYXR1cmVzKSB7XG4gICAgICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJpbXBsZW1lbnRzXCI6XG4gICAgICAgICAgICBjYXNlIFwiaW50ZXJmYWNlXCI6XG4gICAgICAgICAgICBjYXNlIFwicGFja2FnZVwiOlxuICAgICAgICAgICAgY2FzZSBcInByaXZhdGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwcm90ZWN0ZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwdWJsaWNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzdGF0aWNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ5aWVsZFwiOlxuICAgICAgICAgICAgY2FzZSBcImxldFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgY2FzZSBcImF3YWl0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVjbWFGZWF0dXJlcy5tb2R1bGVzO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNSZXN0cmljdGVkV29yZDogZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkID09PSBcImV2YWxcIiB8fCBpZCA9PT0gXCJhcmd1bWVudHNcIjtcbiAgICB9LFxuXG4gICAgLy8gNy42LjEuMSBLZXl3b3Jkc1xuXG4gICAgaXNLZXl3b3JkOiBmdW5jdGlvbihpZCwgc3RyaWN0LCBlY21hRmVhdHVyZXMpIHtcblxuICAgICAgICBpZiAoc3RyaWN0ICYmIHRoaXMuaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkLCBlY21hRmVhdHVyZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFwiY29uc3RcIiBpcyBzcGVjaWFsaXplZCBhcyBLZXl3b3JkIGluIFY4LlxuICAgICAgICAvLyBcInlpZWxkXCIgYW5kIFwibGV0XCIgYXJlIGZvciBjb21wYXRpYmxpdHkgd2l0aCBTcGlkZXJNb25rZXkgYW5kIEVTLm5leHQuXG4gICAgICAgIC8vIFNvbWUgb3RoZXJzIGFyZSBmcm9tIGZ1dHVyZSByZXNlcnZlZCB3b3Jkcy5cblxuICAgICAgICBzd2l0Y2ggKGlkLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiaWZcIikgfHwgKGlkID09PSBcImluXCIpIHx8IChpZCA9PT0gXCJkb1wiKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcInZhclwiKSB8fCAoaWQgPT09IFwiZm9yXCIpIHx8IChpZCA9PT0gXCJuZXdcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcInRyeVwiKSB8fCAoaWQgPT09IFwibGV0XCIpO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwidGhpc1wiKSB8fCAoaWQgPT09IFwiZWxzZVwiKSB8fCAoaWQgPT09IFwiY2FzZVwiKSB8fFxuICAgICAgICAgICAgICAgICAgICAoaWQgPT09IFwidm9pZFwiKSB8fCAoaWQgPT09IFwid2l0aFwiKSB8fCAoaWQgPT09IFwiZW51bVwiKTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcIndoaWxlXCIpIHx8IChpZCA9PT0gXCJicmVha1wiKSB8fCAoaWQgPT09IFwiY2F0Y2hcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlkID09PSBcInRocm93XCIpIHx8IChpZCA9PT0gXCJjb25zdFwiKSB8fCAoIWVjbWFGZWF0dXJlcy5nZW5lcmF0b3JzICYmIGlkID09PSBcInlpZWxkXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpZCA9PT0gXCJjbGFzc1wiKSB8fCAoaWQgPT09IFwic3VwZXJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gXCJyZXR1cm5cIikgfHwgKGlkID09PSBcInR5cGVvZlwiKSB8fCAoaWQgPT09IFwiZGVsZXRlXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpZCA9PT0gXCJzd2l0Y2hcIikgfHwgKGlkID09PSBcImV4cG9ydFwiKSB8fCAoaWQgPT09IFwiaW1wb3J0XCIpO1xuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiZGVmYXVsdFwiKSB8fCAoaWQgPT09IFwiZmluYWxseVwiKSB8fCAoaWQgPT09IFwiZXh0ZW5kc1wiKTtcbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICByZXR1cm4gKGlkID09PSBcImZ1bmN0aW9uXCIpIHx8IChpZCA9PT0gXCJjb250aW51ZVwiKSB8fCAoaWQgPT09IFwiZGVidWdnZXJcIik7XG4gICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgIHJldHVybiAoaWQgPT09IFwiaW5zdGFuY2VvZlwiKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGlzSlNYSWRlbnRpZmllclN0YXJ0OiBmdW5jdGlvbihjaCkge1xuICAgICAgICAvLyBleGNsdWRlIGJhY2tzbGFzaCAoXFwpXG4gICAgICAgIHJldHVybiAoY2ggIT09IDkyKSAmJiB0aGlzLmlzSWRlbnRpZmllclN0YXJ0KGNoKTtcbiAgICB9LFxuXG4gICAgaXNKU1hJZGVudGlmaWVyUGFydDogZnVuY3Rpb24oY2gpIHtcbiAgICAgICAgLy8gZXhjbHVkZSBiYWNrc2xhc2ggKFxcKSBhbmQgYWRkIGh5cGhlbiAoLSlcbiAgICAgICAgcmV0dXJuIChjaCAhPT0gOTIpICYmIChjaCA9PT0gNDUgfHwgdGhpcy5pc0lkZW50aWZpZXJQYXJ0KGNoKSk7XG4gICAgfVxuXG5cbn07XG4iLCIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgQ29udGFpbnMgdG9rZW4gaW5mb3JtYXRpb24uXG4gKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzXG4gKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBAY29weXJpZ2h0IDIwMTMgVGhhZGRlZSBUeWwgPHRoYWRkZWUudHlsQGdtYWlsLmNvbT5cbiAqIEBjb3B5cmlnaHQgMjAxMS0yMDEzIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAqICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTllcbiAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkRcbiAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXF1aXJlbWVudHNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIE5vbmUhXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcml2YXRlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgVG9rZW4gPSB7XG4gICAgQm9vbGVhbkxpdGVyYWw6IDEsXG4gICAgRU9GOiAyLFxuICAgIElkZW50aWZpZXI6IDMsXG4gICAgS2V5d29yZDogNCxcbiAgICBOdWxsTGl0ZXJhbDogNSxcbiAgICBOdW1lcmljTGl0ZXJhbDogNixcbiAgICBQdW5jdHVhdG9yOiA3LFxuICAgIFN0cmluZ0xpdGVyYWw6IDgsXG4gICAgUmVndWxhckV4cHJlc3Npb246IDksXG4gICAgVGVtcGxhdGU6IDEwLFxuICAgIEpTWElkZW50aWZpZXI6IDExLFxuICAgIEpTWFRleHQ6IDEyXG59O1xuXG52YXIgVG9rZW5OYW1lID0ge307XG5Ub2tlbk5hbWVbVG9rZW4uQm9vbGVhbkxpdGVyYWxdID0gXCJCb29sZWFuXCI7XG5Ub2tlbk5hbWVbVG9rZW4uRU9GXSA9IFwiPGVuZD5cIjtcblRva2VuTmFtZVtUb2tlbi5JZGVudGlmaWVyXSA9IFwiSWRlbnRpZmllclwiO1xuVG9rZW5OYW1lW1Rva2VuLktleXdvcmRdID0gXCJLZXl3b3JkXCI7XG5Ub2tlbk5hbWVbVG9rZW4uTnVsbExpdGVyYWxdID0gXCJOdWxsXCI7XG5Ub2tlbk5hbWVbVG9rZW4uTnVtZXJpY0xpdGVyYWxdID0gXCJOdW1lcmljXCI7XG5Ub2tlbk5hbWVbVG9rZW4uUHVuY3R1YXRvcl0gPSBcIlB1bmN0dWF0b3JcIjtcblRva2VuTmFtZVtUb2tlbi5TdHJpbmdMaXRlcmFsXSA9IFwiU3RyaW5nXCI7XG5Ub2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJlc3Npb25dID0gXCJSZWd1bGFyRXhwcmVzc2lvblwiO1xuVG9rZW5OYW1lW1Rva2VuLlRlbXBsYXRlXSA9IFwiVGVtcGxhdGVcIjtcblRva2VuTmFtZVtUb2tlbi5KU1hJZGVudGlmaWVyXSA9IFwiSlNYSWRlbnRpZmllclwiO1xuVG9rZW5OYW1lW1Rva2VuLkpTWFRleHRdID0gXCJKU1hUZXh0XCI7XG5cbi8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9zZSB0b2tlbnMgaXMgYW4gZXhwcmVzc2lvbi5cbnZhciBGbkV4cHJUb2tlbnMgPSBbXCIoXCIsIFwie1wiLCBcIltcIiwgXCJpblwiLCBcInR5cGVvZlwiLCBcImluc3RhbmNlb2ZcIiwgXCJuZXdcIixcbiAgICAgICAgICAgICAgICBcInJldHVyblwiLCBcImNhc2VcIiwgXCJkZWxldGVcIiwgXCJ0aHJvd1wiLCBcInZvaWRcIixcbiAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50IG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgIFwiPVwiLCBcIis9XCIsIFwiLT1cIiwgXCIqPVwiLCBcIi89XCIsIFwiJT1cIiwgXCI8PD1cIiwgXCI+Pj1cIiwgXCI+Pj49XCIsXG4gICAgICAgICAgICAgICAgXCImPVwiLCBcInw9XCIsIFwiXj1cIiwgXCIsXCIsXG4gICAgICAgICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9yc1xuICAgICAgICAgICAgICAgIFwiK1wiLCBcIi1cIiwgXCIqXCIsIFwiL1wiLCBcIiVcIiwgXCIrK1wiLCBcIi0tXCIsIFwiPDxcIiwgXCI+PlwiLCBcIj4+PlwiLCBcIiZcIixcbiAgICAgICAgICAgICAgICBcInxcIiwgXCJeXCIsIFwiIVwiLCBcIn5cIiwgXCImJlwiLCBcInx8XCIsIFwiP1wiLCBcIjpcIiwgXCI9PT1cIiwgXCI9PVwiLCBcIj49XCIsXG4gICAgICAgICAgICAgICAgXCI8PVwiLCBcIjxcIiwgXCI+XCIsIFwiIT1cIiwgXCIhPT1cIl07XG5cblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpY1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVG9rZW46IFRva2VuLFxuICAgIFRva2VuTmFtZTogVG9rZW5OYW1lLFxuICAgIEZuRXhwclRva2VuczogRm5FeHByVG9rZW5zXG59O1xuIiwiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFRoZSBsaXN0IG9mIFhIVE1MIGVudGl0aWVzIHRoYXQgYXJlIHZhbGlkIGluIEpTWC5cbiAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXNcbiAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFXG4gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTO1xuICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVxdWlyZW1lbnRzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBOb25lIVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBxdW90OiBcIlxcdTAwMjJcIixcbiAgICBhbXA6IFwiJlwiLFxuICAgIGFwb3M6IFwiXFx1MDAyN1wiLFxuICAgIGx0OiBcIjxcIixcbiAgICBndDogXCI+XCIsXG4gICAgbmJzcDogXCJcXHUwMEEwXCIsXG4gICAgaWV4Y2w6IFwiXFx1MDBBMVwiLFxuICAgIGNlbnQ6IFwiXFx1MDBBMlwiLFxuICAgIHBvdW5kOiBcIlxcdTAwQTNcIixcbiAgICBjdXJyZW46IFwiXFx1MDBBNFwiLFxuICAgIHllbjogXCJcXHUwMEE1XCIsXG4gICAgYnJ2YmFyOiBcIlxcdTAwQTZcIixcbiAgICBzZWN0OiBcIlxcdTAwQTdcIixcbiAgICB1bWw6IFwiXFx1MDBBOFwiLFxuICAgIGNvcHk6IFwiXFx1MDBBOVwiLFxuICAgIG9yZGY6IFwiXFx1MDBBQVwiLFxuICAgIGxhcXVvOiBcIlxcdTAwQUJcIixcbiAgICBub3Q6IFwiXFx1MDBBQ1wiLFxuICAgIHNoeTogXCJcXHUwMEFEXCIsXG4gICAgcmVnOiBcIlxcdTAwQUVcIixcbiAgICBtYWNyOiBcIlxcdTAwQUZcIixcbiAgICBkZWc6IFwiXFx1MDBCMFwiLFxuICAgIHBsdXNtbjogXCJcXHUwMEIxXCIsXG4gICAgc3VwMjogXCJcXHUwMEIyXCIsXG4gICAgc3VwMzogXCJcXHUwMEIzXCIsXG4gICAgYWN1dGU6IFwiXFx1MDBCNFwiLFxuICAgIG1pY3JvOiBcIlxcdTAwQjVcIixcbiAgICBwYXJhOiBcIlxcdTAwQjZcIixcbiAgICBtaWRkb3Q6IFwiXFx1MDBCN1wiLFxuICAgIGNlZGlsOiBcIlxcdTAwQjhcIixcbiAgICBzdXAxOiBcIlxcdTAwQjlcIixcbiAgICBvcmRtOiBcIlxcdTAwQkFcIixcbiAgICByYXF1bzogXCJcXHUwMEJCXCIsXG4gICAgZnJhYzE0OiBcIlxcdTAwQkNcIixcbiAgICBmcmFjMTI6IFwiXFx1MDBCRFwiLFxuICAgIGZyYWMzNDogXCJcXHUwMEJFXCIsXG4gICAgaXF1ZXN0OiBcIlxcdTAwQkZcIixcbiAgICBBZ3JhdmU6IFwiXFx1MDBDMFwiLFxuICAgIEFhY3V0ZTogXCJcXHUwMEMxXCIsXG4gICAgQWNpcmM6IFwiXFx1MDBDMlwiLFxuICAgIEF0aWxkZTogXCJcXHUwMEMzXCIsXG4gICAgQXVtbDogXCJcXHUwMEM0XCIsXG4gICAgQXJpbmc6IFwiXFx1MDBDNVwiLFxuICAgIEFFbGlnOiBcIlxcdTAwQzZcIixcbiAgICBDY2VkaWw6IFwiXFx1MDBDN1wiLFxuICAgIEVncmF2ZTogXCJcXHUwMEM4XCIsXG4gICAgRWFjdXRlOiBcIlxcdTAwQzlcIixcbiAgICBFY2lyYzogXCJcXHUwMENBXCIsXG4gICAgRXVtbDogXCJcXHUwMENCXCIsXG4gICAgSWdyYXZlOiBcIlxcdTAwQ0NcIixcbiAgICBJYWN1dGU6IFwiXFx1MDBDRFwiLFxuICAgIEljaXJjOiBcIlxcdTAwQ0VcIixcbiAgICBJdW1sOiBcIlxcdTAwQ0ZcIixcbiAgICBFVEg6IFwiXFx1MDBEMFwiLFxuICAgIE50aWxkZTogXCJcXHUwMEQxXCIsXG4gICAgT2dyYXZlOiBcIlxcdTAwRDJcIixcbiAgICBPYWN1dGU6IFwiXFx1MDBEM1wiLFxuICAgIE9jaXJjOiBcIlxcdTAwRDRcIixcbiAgICBPdGlsZGU6IFwiXFx1MDBENVwiLFxuICAgIE91bWw6IFwiXFx1MDBENlwiLFxuICAgIHRpbWVzOiBcIlxcdTAwRDdcIixcbiAgICBPc2xhc2g6IFwiXFx1MDBEOFwiLFxuICAgIFVncmF2ZTogXCJcXHUwMEQ5XCIsXG4gICAgVWFjdXRlOiBcIlxcdTAwREFcIixcbiAgICBVY2lyYzogXCJcXHUwMERCXCIsXG4gICAgVXVtbDogXCJcXHUwMERDXCIsXG4gICAgWWFjdXRlOiBcIlxcdTAwRERcIixcbiAgICBUSE9STjogXCJcXHUwMERFXCIsXG4gICAgc3psaWc6IFwiXFx1MDBERlwiLFxuICAgIGFncmF2ZTogXCJcXHUwMEUwXCIsXG4gICAgYWFjdXRlOiBcIlxcdTAwRTFcIixcbiAgICBhY2lyYzogXCJcXHUwMEUyXCIsXG4gICAgYXRpbGRlOiBcIlxcdTAwRTNcIixcbiAgICBhdW1sOiBcIlxcdTAwRTRcIixcbiAgICBhcmluZzogXCJcXHUwMEU1XCIsXG4gICAgYWVsaWc6IFwiXFx1MDBFNlwiLFxuICAgIGNjZWRpbDogXCJcXHUwMEU3XCIsXG4gICAgZWdyYXZlOiBcIlxcdTAwRThcIixcbiAgICBlYWN1dGU6IFwiXFx1MDBFOVwiLFxuICAgIGVjaXJjOiBcIlxcdTAwRUFcIixcbiAgICBldW1sOiBcIlxcdTAwRUJcIixcbiAgICBpZ3JhdmU6IFwiXFx1MDBFQ1wiLFxuICAgIGlhY3V0ZTogXCJcXHUwMEVEXCIsXG4gICAgaWNpcmM6IFwiXFx1MDBFRVwiLFxuICAgIGl1bWw6IFwiXFx1MDBFRlwiLFxuICAgIGV0aDogXCJcXHUwMEYwXCIsXG4gICAgbnRpbGRlOiBcIlxcdTAwRjFcIixcbiAgICBvZ3JhdmU6IFwiXFx1MDBGMlwiLFxuICAgIG9hY3V0ZTogXCJcXHUwMEYzXCIsXG4gICAgb2NpcmM6IFwiXFx1MDBGNFwiLFxuICAgIG90aWxkZTogXCJcXHUwMEY1XCIsXG4gICAgb3VtbDogXCJcXHUwMEY2XCIsXG4gICAgZGl2aWRlOiBcIlxcdTAwRjdcIixcbiAgICBvc2xhc2g6IFwiXFx1MDBGOFwiLFxuICAgIHVncmF2ZTogXCJcXHUwMEY5XCIsXG4gICAgdWFjdXRlOiBcIlxcdTAwRkFcIixcbiAgICB1Y2lyYzogXCJcXHUwMEZCXCIsXG4gICAgdXVtbDogXCJcXHUwMEZDXCIsXG4gICAgeWFjdXRlOiBcIlxcdTAwRkRcIixcbiAgICB0aG9ybjogXCJcXHUwMEZFXCIsXG4gICAgeXVtbDogXCJcXHUwMEZGXCIsXG4gICAgT0VsaWc6IFwiXFx1MDE1MlwiLFxuICAgIG9lbGlnOiBcIlxcdTAxNTNcIixcbiAgICBTY2Fyb246IFwiXFx1MDE2MFwiLFxuICAgIHNjYXJvbjogXCJcXHUwMTYxXCIsXG4gICAgWXVtbDogXCJcXHUwMTc4XCIsXG4gICAgZm5vZjogXCJcXHUwMTkyXCIsXG4gICAgY2lyYzogXCJcXHUwMkM2XCIsXG4gICAgdGlsZGU6IFwiXFx1MDJEQ1wiLFxuICAgIEFscGhhOiBcIlxcdTAzOTFcIixcbiAgICBCZXRhOiBcIlxcdTAzOTJcIixcbiAgICBHYW1tYTogXCJcXHUwMzkzXCIsXG4gICAgRGVsdGE6IFwiXFx1MDM5NFwiLFxuICAgIEVwc2lsb246IFwiXFx1MDM5NVwiLFxuICAgIFpldGE6IFwiXFx1MDM5NlwiLFxuICAgIEV0YTogXCJcXHUwMzk3XCIsXG4gICAgVGhldGE6IFwiXFx1MDM5OFwiLFxuICAgIElvdGE6IFwiXFx1MDM5OVwiLFxuICAgIEthcHBhOiBcIlxcdTAzOUFcIixcbiAgICBMYW1iZGE6IFwiXFx1MDM5QlwiLFxuICAgIE11OiBcIlxcdTAzOUNcIixcbiAgICBOdTogXCJcXHUwMzlEXCIsXG4gICAgWGk6IFwiXFx1MDM5RVwiLFxuICAgIE9taWNyb246IFwiXFx1MDM5RlwiLFxuICAgIFBpOiBcIlxcdTAzQTBcIixcbiAgICBSaG86IFwiXFx1MDNBMVwiLFxuICAgIFNpZ21hOiBcIlxcdTAzQTNcIixcbiAgICBUYXU6IFwiXFx1MDNBNFwiLFxuICAgIFVwc2lsb246IFwiXFx1MDNBNVwiLFxuICAgIFBoaTogXCJcXHUwM0E2XCIsXG4gICAgQ2hpOiBcIlxcdTAzQTdcIixcbiAgICBQc2k6IFwiXFx1MDNBOFwiLFxuICAgIE9tZWdhOiBcIlxcdTAzQTlcIixcbiAgICBhbHBoYTogXCJcXHUwM0IxXCIsXG4gICAgYmV0YTogXCJcXHUwM0IyXCIsXG4gICAgZ2FtbWE6IFwiXFx1MDNCM1wiLFxuICAgIGRlbHRhOiBcIlxcdTAzQjRcIixcbiAgICBlcHNpbG9uOiBcIlxcdTAzQjVcIixcbiAgICB6ZXRhOiBcIlxcdTAzQjZcIixcbiAgICBldGE6IFwiXFx1MDNCN1wiLFxuICAgIHRoZXRhOiBcIlxcdTAzQjhcIixcbiAgICBpb3RhOiBcIlxcdTAzQjlcIixcbiAgICBrYXBwYTogXCJcXHUwM0JBXCIsXG4gICAgbGFtYmRhOiBcIlxcdTAzQkJcIixcbiAgICBtdTogXCJcXHUwM0JDXCIsXG4gICAgbnU6IFwiXFx1MDNCRFwiLFxuICAgIHhpOiBcIlxcdTAzQkVcIixcbiAgICBvbWljcm9uOiBcIlxcdTAzQkZcIixcbiAgICBwaTogXCJcXHUwM0MwXCIsXG4gICAgcmhvOiBcIlxcdTAzQzFcIixcbiAgICBzaWdtYWY6IFwiXFx1MDNDMlwiLFxuICAgIHNpZ21hOiBcIlxcdTAzQzNcIixcbiAgICB0YXU6IFwiXFx1MDNDNFwiLFxuICAgIHVwc2lsb246IFwiXFx1MDNDNVwiLFxuICAgIHBoaTogXCJcXHUwM0M2XCIsXG4gICAgY2hpOiBcIlxcdTAzQzdcIixcbiAgICBwc2k6IFwiXFx1MDNDOFwiLFxuICAgIG9tZWdhOiBcIlxcdTAzQzlcIixcbiAgICB0aGV0YXN5bTogXCJcXHUwM0QxXCIsXG4gICAgdXBzaWg6IFwiXFx1MDNEMlwiLFxuICAgIHBpdjogXCJcXHUwM0Q2XCIsXG4gICAgZW5zcDogXCJcXHUyMDAyXCIsXG4gICAgZW1zcDogXCJcXHUyMDAzXCIsXG4gICAgdGhpbnNwOiBcIlxcdTIwMDlcIixcbiAgICB6d25qOiBcIlxcdTIwMENcIixcbiAgICB6d2o6IFwiXFx1MjAwRFwiLFxuICAgIGxybTogXCJcXHUyMDBFXCIsXG4gICAgcmxtOiBcIlxcdTIwMEZcIixcbiAgICBuZGFzaDogXCJcXHUyMDEzXCIsXG4gICAgbWRhc2g6IFwiXFx1MjAxNFwiLFxuICAgIGxzcXVvOiBcIlxcdTIwMThcIixcbiAgICByc3F1bzogXCJcXHUyMDE5XCIsXG4gICAgc2JxdW86IFwiXFx1MjAxQVwiLFxuICAgIGxkcXVvOiBcIlxcdTIwMUNcIixcbiAgICByZHF1bzogXCJcXHUyMDFEXCIsXG4gICAgYmRxdW86IFwiXFx1MjAxRVwiLFxuICAgIGRhZ2dlcjogXCJcXHUyMDIwXCIsXG4gICAgRGFnZ2VyOiBcIlxcdTIwMjFcIixcbiAgICBidWxsOiBcIlxcdTIwMjJcIixcbiAgICBoZWxsaXA6IFwiXFx1MjAyNlwiLFxuICAgIHBlcm1pbDogXCJcXHUyMDMwXCIsXG4gICAgcHJpbWU6IFwiXFx1MjAzMlwiLFxuICAgIFByaW1lOiBcIlxcdTIwMzNcIixcbiAgICBsc2FxdW86IFwiXFx1MjAzOVwiLFxuICAgIHJzYXF1bzogXCJcXHUyMDNBXCIsXG4gICAgb2xpbmU6IFwiXFx1MjAzRVwiLFxuICAgIGZyYXNsOiBcIlxcdTIwNDRcIixcbiAgICBldXJvOiBcIlxcdTIwQUNcIixcbiAgICBpbWFnZTogXCJcXHUyMTExXCIsXG4gICAgd2VpZXJwOiBcIlxcdTIxMThcIixcbiAgICByZWFsOiBcIlxcdTIxMUNcIixcbiAgICB0cmFkZTogXCJcXHUyMTIyXCIsXG4gICAgYWxlZnN5bTogXCJcXHUyMTM1XCIsXG4gICAgbGFycjogXCJcXHUyMTkwXCIsXG4gICAgdWFycjogXCJcXHUyMTkxXCIsXG4gICAgcmFycjogXCJcXHUyMTkyXCIsXG4gICAgZGFycjogXCJcXHUyMTkzXCIsXG4gICAgaGFycjogXCJcXHUyMTk0XCIsXG4gICAgY3JhcnI6IFwiXFx1MjFCNVwiLFxuICAgIGxBcnI6IFwiXFx1MjFEMFwiLFxuICAgIHVBcnI6IFwiXFx1MjFEMVwiLFxuICAgIHJBcnI6IFwiXFx1MjFEMlwiLFxuICAgIGRBcnI6IFwiXFx1MjFEM1wiLFxuICAgIGhBcnI6IFwiXFx1MjFENFwiLFxuICAgIGZvcmFsbDogXCJcXHUyMjAwXCIsXG4gICAgcGFydDogXCJcXHUyMjAyXCIsXG4gICAgZXhpc3Q6IFwiXFx1MjIwM1wiLFxuICAgIGVtcHR5OiBcIlxcdTIyMDVcIixcbiAgICBuYWJsYTogXCJcXHUyMjA3XCIsXG4gICAgaXNpbjogXCJcXHUyMjA4XCIsXG4gICAgbm90aW46IFwiXFx1MjIwOVwiLFxuICAgIG5pOiBcIlxcdTIyMEJcIixcbiAgICBwcm9kOiBcIlxcdTIyMEZcIixcbiAgICBzdW06IFwiXFx1MjIxMVwiLFxuICAgIG1pbnVzOiBcIlxcdTIyMTJcIixcbiAgICBsb3dhc3Q6IFwiXFx1MjIxN1wiLFxuICAgIHJhZGljOiBcIlxcdTIyMUFcIixcbiAgICBwcm9wOiBcIlxcdTIyMURcIixcbiAgICBpbmZpbjogXCJcXHUyMjFFXCIsXG4gICAgYW5nOiBcIlxcdTIyMjBcIixcbiAgICBhbmQ6IFwiXFx1MjIyN1wiLFxuICAgIG9yOiBcIlxcdTIyMjhcIixcbiAgICBjYXA6IFwiXFx1MjIyOVwiLFxuICAgIGN1cDogXCJcXHUyMjJBXCIsXG4gICAgXCJpbnRcIjogXCJcXHUyMjJCXCIsXG4gICAgdGhlcmU0OiBcIlxcdTIyMzRcIixcbiAgICBzaW06IFwiXFx1MjIzQ1wiLFxuICAgIGNvbmc6IFwiXFx1MjI0NVwiLFxuICAgIGFzeW1wOiBcIlxcdTIyNDhcIixcbiAgICBuZTogXCJcXHUyMjYwXCIsXG4gICAgZXF1aXY6IFwiXFx1MjI2MVwiLFxuICAgIGxlOiBcIlxcdTIyNjRcIixcbiAgICBnZTogXCJcXHUyMjY1XCIsXG4gICAgc3ViOiBcIlxcdTIyODJcIixcbiAgICBzdXA6IFwiXFx1MjI4M1wiLFxuICAgIG5zdWI6IFwiXFx1MjI4NFwiLFxuICAgIHN1YmU6IFwiXFx1MjI4NlwiLFxuICAgIHN1cGU6IFwiXFx1MjI4N1wiLFxuICAgIG9wbHVzOiBcIlxcdTIyOTVcIixcbiAgICBvdGltZXM6IFwiXFx1MjI5N1wiLFxuICAgIHBlcnA6IFwiXFx1MjJBNVwiLFxuICAgIHNkb3Q6IFwiXFx1MjJDNVwiLFxuICAgIGxjZWlsOiBcIlxcdTIzMDhcIixcbiAgICByY2VpbDogXCJcXHUyMzA5XCIsXG4gICAgbGZsb29yOiBcIlxcdTIzMEFcIixcbiAgICByZmxvb3I6IFwiXFx1MjMwQlwiLFxuICAgIGxhbmc6IFwiXFx1MjMyOVwiLFxuICAgIHJhbmc6IFwiXFx1MjMyQVwiLFxuICAgIGxvejogXCJcXHUyNUNBXCIsXG4gICAgc3BhZGVzOiBcIlxcdTI2NjBcIixcbiAgICBjbHViczogXCJcXHUyNjYzXCIsXG4gICAgaGVhcnRzOiBcIlxcdTI2NjVcIixcbiAgICBkaWFtczogXCJcXHUyNjY2XCJcbn07XG4iLCJtb2R1bGUuZXhwb3J0cz17XG4gIFwibmFtZVwiOiBcImVzcHJlZVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiQW4gYWN0aXZlbHktbWFpbnRhaW5lZCBmb3JrIG9mIEVzcHJpbWEsIHRoZSBFQ01BU2NyaXB0IHBhcnNpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIG11bHRpcHVycG9zZSBhbmFseXNpc1wiLFxuICBcImF1dGhvclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiTmljaG9sYXMgQy4gWmFrYXNcIixcbiAgICBcImVtYWlsXCI6IFwibmljaG9sYXMrbnBtQG5jemNvbnN1bHRpbmcuY29tXCJcbiAgfSxcbiAgXCJob21lcGFnZVwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNwcmVlXCIsXG4gIFwibWFpblwiOiBcImVzcHJlZS5qc1wiLFxuICBcImJpblwiOiB7XG4gICAgXCJlc3BhcnNlXCI6IFwiLi9iaW4vZXNwYXJzZS5qc1wiLFxuICAgIFwiZXN2YWxpZGF0ZVwiOiBcIi4vYmluL2VzdmFsaWRhdGUuanNcIlxuICB9LFxuICBcInZlcnNpb25cIjogXCIyLjIuNVwiLFxuICBcImZpbGVzXCI6IFtcbiAgICBcImJpblwiLFxuICAgIFwibGliXCIsXG4gICAgXCJ0ZXN0L3J1bi5qc1wiLFxuICAgIFwidGVzdC9ydW5uZXIuanNcIixcbiAgICBcInRlc3QvdGVzdC5qc1wiLFxuICAgIFwidGVzdC9jb21wYXQuanNcIixcbiAgICBcInRlc3QvcmVmbGVjdC5qc1wiLFxuICAgIFwiZXNwcmVlLmpzXCJcbiAgXSxcbiAgXCJlbmdpbmVzXCI6IHtcbiAgICBcIm5vZGVcIjogXCI+PTAuMTAuMFwiXG4gIH0sXG4gIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiZ2l0XCIsXG4gICAgXCJ1cmxcIjogXCJnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vZXNsaW50L2VzcHJlZS5naXRcIlxuICB9LFxuICBcImJ1Z3NcIjoge1xuICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXNsaW50L2VzcHJlZS5naXRcIlxuICB9LFxuICBcImxpY2Vuc2VzXCI6IFtcbiAgICB7XG4gICAgICBcInR5cGVcIjogXCJCU0RcIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vbnpha2FzL2VzcHJlZS9yYXcvbWFzdGVyL0xJQ0VOU0VcIlxuICAgIH1cbiAgXSxcbiAgXCJkZXZEZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiYnJvd3NlcmlmeVwiOiBcIl43LjAuMFwiLFxuICAgIFwiY2hhaVwiOiBcIl4xLjEwLjBcIixcbiAgICBcImNvbXBsZXhpdHktcmVwb3J0XCI6IFwifjAuNi4xXCIsXG4gICAgXCJkYXRlZm9ybWF0XCI6IFwiXjEuMC4xMVwiLFxuICAgIFwiZXNsaW50XCI6IFwiXjAuOS4yXCIsXG4gICAgXCJlc3ByaW1hXCI6IFwiZ2l0Oi8vZ2l0aHViLmNvbS9qcXVlcnkvZXNwcmltYS5naXRcIixcbiAgICBcImVzcHJpbWEtZmJcIjogXCJeODAwMS4yMDAxLjAtZGV2LWhhcm1vbnktZmJcIixcbiAgICBcImlzdGFuYnVsXCI6IFwifjAuMi42XCIsXG4gICAgXCJqc29uLWRpZmZcIjogXCJ+MC4zLjFcIixcbiAgICBcImxlY2hlXCI6IFwiXjEuMC4xXCIsXG4gICAgXCJtb2NoYVwiOiBcIl4yLjAuMVwiLFxuICAgIFwibnBtLWxpY2Vuc2VcIjogXCJeMC4yLjNcIixcbiAgICBcIm9wdGltaXN0XCI6IFwifjAuNi4wXCIsXG4gICAgXCJyZWdlbmVyYXRlXCI6IFwifjAuNS40XCIsXG4gICAgXCJzZW12ZXJcIjogXCJeNC4xLjFcIixcbiAgICBcInNoZWxsanNcIjogXCJeMC4zLjBcIixcbiAgICBcInNoZWxsanMtbm9kZWNsaVwiOiBcIl4wLjEuMVwiLFxuICAgIFwidW5pY29kZS02LjMuMFwiOiBcIn4wLjEuMFwiXG4gIH0sXG4gIFwia2V5d29yZHNcIjogW1xuICAgIFwiYXN0XCIsXG4gICAgXCJlY21hc2NyaXB0XCIsXG4gICAgXCJqYXZhc2NyaXB0XCIsXG4gICAgXCJwYXJzZXJcIixcbiAgICBcInN5bnRheFwiXG4gIF0sXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJnZW5lcmF0ZS1yZWdleFwiOiBcIm5vZGUgdG9vbHMvZ2VuZXJhdGUtaWRlbnRpZmllci1yZWdleC5qc1wiLFxuICAgIFwidGVzdFwiOiBcIm5wbSBydW4tc2NyaXB0IGxpbnQgJiYgbm9kZSBNYWtlZmlsZS5qcyB0ZXN0ICYmIG5vZGUgdGVzdC9ydW4uanNcIixcbiAgICBcImxpbnRcIjogXCJub2RlIE1ha2VmaWxlLmpzIGxpbnRcIixcbiAgICBcInBhdGNoXCI6IFwibm9kZSBNYWtlZmlsZS5qcyBwYXRjaFwiLFxuICAgIFwibWlub3JcIjogXCJub2RlIE1ha2VmaWxlLmpzIG1pbm9yXCIsXG4gICAgXCJtYWpvclwiOiBcIm5vZGUgTWFrZWZpbGUuanMgbWFqb3JcIixcbiAgICBcImJyb3dzZXJpZnlcIjogXCJub2RlIE1ha2VmaWxlLmpzIGJyb3dzZXJpZnlcIixcbiAgICBcImNvdmVyYWdlXCI6IFwibnBtIHJ1bi1zY3JpcHQgYW5hbHl6ZS1jb3ZlcmFnZSAmJiBucG0gcnVuLXNjcmlwdCBjaGVjay1jb3ZlcmFnZVwiLFxuICAgIFwiYW5hbHl6ZS1jb3ZlcmFnZVwiOiBcIm5vZGUgbm9kZV9tb2R1bGVzL2lzdGFuYnVsL2xpYi9jbGkuanMgY292ZXIgdGVzdC9ydW5uZXIuanNcIixcbiAgICBcImNoZWNrLWNvdmVyYWdlXCI6IFwibm9kZSBub2RlX21vZHVsZXMvaXN0YW5idWwvbGliL2NsaS5qcyBjaGVjay1jb3ZlcmFnZSAtLXN0YXRlbWVudCA5OSAtLWJyYW5jaCA5OSAtLWZ1bmN0aW9uIDk5XCIsXG4gICAgXCJjb21wbGV4aXR5XCI6IFwibnBtIHJ1bi1zY3JpcHQgYW5hbHl6ZS1jb21wbGV4aXR5ICYmIG5wbSBydW4tc2NyaXB0IGNoZWNrLWNvbXBsZXhpdHlcIixcbiAgICBcImFuYWx5emUtY29tcGxleGl0eVwiOiBcIm5vZGUgdG9vbHMvbGlzdC1jb21wbGV4aXR5LmpzXCIsXG4gICAgXCJjaGVjay1jb21wbGV4aXR5XCI6IFwibm9kZSBub2RlX21vZHVsZXMvY29tcGxleGl0eS1yZXBvcnQvc3JjL2NsaS5qcyAtLW1heGNjIDE0IC0tc2lsZW50IC1sIC13IGVzcHJlZS5qc1wiLFxuICAgIFwiYmVuY2htYXJrXCI6IFwibm9kZSB0ZXN0L2JlbmNobWFya3MuanNcIixcbiAgICBcImJlbmNobWFyay1xdWlja1wiOiBcIm5vZGUgdGVzdC9iZW5jaG1hcmtzLmpzIHF1aWNrXCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge30sXG4gIFwiZ2l0SGVhZFwiOiBcImVlZWViMDViODc5NzgzOTAxZmYyMzA4ZWZjYmQwY2RhNzY3NTNjYmVcIixcbiAgXCJfaWRcIjogXCJlc3ByZWVAMi4yLjVcIixcbiAgXCJfc2hhc3VtXCI6IFwiZGY2OTFiOTMxMDg4OTQwMmFlYjI5Y2MwNjY3MDhjNTY2OTBiODU0YlwiLFxuICBcIl9mcm9tXCI6IFwiZXNwcmVlQD49Mi4wLjEgPDMuMC4wXCIsXG4gIFwiX25wbVZlcnNpb25cIjogXCIxLjQuMjhcIixcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJuYW1lXCI6IFwibnpha2FzXCIsXG4gICAgXCJlbWFpbFwiOiBcIm5pY2hvbGFzQG5jemNvbnN1bHRpbmcuY29tXCJcbiAgfSxcbiAgXCJtYWludGFpbmVyc1wiOiBbXG4gICAge1xuICAgICAgXCJuYW1lXCI6IFwibnpha2FzXCIsXG4gICAgICBcImVtYWlsXCI6IFwibmljaG9sYXNAbmN6Y29uc3VsdGluZy5jb21cIlxuICAgIH1cbiAgXSxcbiAgXCJkaXN0XCI6IHtcbiAgICBcInNoYXN1bVwiOiBcImRmNjkxYjkzMTA4ODk0MDJhZWIyOWNjMDY2NzA4YzU2NjkwYjg1NGJcIixcbiAgICBcInRhcmJhbGxcIjogXCJodHRwOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJlZS8tL2VzcHJlZS0yLjIuNS50Z3pcIlxuICB9LFxuICBcImRpcmVjdG9yaWVzXCI6IHt9LFxuICBcIl9yZXNvbHZlZFwiOiBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJlZS8tL2VzcHJlZS0yLjIuNS50Z3pcIixcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCJcbn1cbiIsIi8qXG4gIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT5cbiAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG4vKmpzbGludCB2YXJzOmZhbHNlLCBiaXR3aXNlOnRydWUqL1xuLypqc2hpbnQgaW5kZW50OjQqL1xuLypnbG9iYWwgZXhwb3J0czp0cnVlKi9cbihmdW5jdGlvbiBjbG9uZShleHBvcnRzKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIFN5bnRheCxcbiAgICAgICAgaXNBcnJheSxcbiAgICAgICAgVmlzaXRvck9wdGlvbixcbiAgICAgICAgVmlzaXRvcktleXMsXG4gICAgICAgIG9iamVjdENyZWF0ZSxcbiAgICAgICAgb2JqZWN0S2V5cyxcbiAgICAgICAgQlJFQUssXG4gICAgICAgIFNLSVAsXG4gICAgICAgIFJFTU9WRTtcblxuICAgIGZ1bmN0aW9uIGlnbm9yZUpTSGludEVycm9yKCkgeyB9XG5cbiAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbiAgICBpZiAoIWlzQXJyYXkpIHtcbiAgICAgICAgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyYXkpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZXBDb3B5KG9iaikge1xuICAgICAgICB2YXIgcmV0ID0ge30sIGtleSwgdmFsO1xuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIHZhbCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W2tleV0gPSBkZWVwQ29weSh2YWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldFtrZXldID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoYWxsb3dDb3B5KG9iaikge1xuICAgICAgICB2YXIgcmV0ID0ge30sIGtleTtcbiAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXRba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIGlnbm9yZUpTSGludEVycm9yKHNoYWxsb3dDb3B5KTtcblxuICAgIC8vIGJhc2VkIG9uIExMVk0gbGliYysrIHVwcGVyX2JvdW5kIC8gbG93ZXJfYm91bmRcbiAgICAvLyBNSVQgTGljZW5zZVxuXG4gICAgZnVuY3Rpb24gdXBwZXJCb3VuZChhcnJheSwgZnVuYykge1xuICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50O1xuXG4gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGxlbikge1xuICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjtcbiAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG93ZXJCb3VuZChhcnJheSwgZnVuYykge1xuICAgICAgICB2YXIgZGlmZiwgbGVuLCBpLCBjdXJyZW50O1xuXG4gICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgd2hpbGUgKGxlbikge1xuICAgICAgICAgICAgZGlmZiA9IGxlbiA+Pj4gMTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBpICsgZGlmZjtcbiAgICAgICAgICAgIGlmIChmdW5jKGFycmF5W2N1cnJlbnRdKSkge1xuICAgICAgICAgICAgICAgIGkgPSBjdXJyZW50ICsgMTtcbiAgICAgICAgICAgICAgICBsZW4gLT0gZGlmZiArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlbiA9IGRpZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICAgIGlnbm9yZUpTSGludEVycm9yKGxvd2VyQm91bmQpO1xuXG4gICAgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZSB8fCAoZnVuY3Rpb24gKCkge1xuICAgICAgICBmdW5jdGlvbiBGKCkgeyB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICBGLnByb3RvdHlwZSA9IG87XG4gICAgICAgICAgICByZXR1cm4gbmV3IEYoKTtcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgIHZhciBrZXlzID0gW10sIGtleTtcbiAgICAgICAgZm9yIChrZXkgaW4gbykge1xuICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGV4dGVuZCh0bywgZnJvbSkge1xuICAgICAgICB2YXIga2V5cyA9IG9iamVjdEtleXMoZnJvbSksIGtleSwgaSwgbGVuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBrZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgdG9ba2V5XSA9IGZyb21ba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgU3ludGF4ID0ge1xuICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJyxcbiAgICAgICAgQXNzaWdubWVudFBhdHRlcm46ICdBc3NpZ25tZW50UGF0dGVybicsXG4gICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsXG4gICAgICAgIEFycmF5UGF0dGVybjogJ0FycmF5UGF0dGVybicsXG4gICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nLFxuICAgICAgICBBd2FpdEV4cHJlc3Npb246ICdBd2FpdEV4cHJlc3Npb24nLCAvLyBDQVVUSU9OOiBJdCdzIGRlZmVycmVkIHRvIEVTNy5cbiAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsXG4gICAgICAgIEJpbmFyeUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNzaW9uJyxcbiAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcsXG4gICAgICAgIENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Npb24nLFxuICAgICAgICBDYXRjaENsYXVzZTogJ0NhdGNoQ2xhdXNlJyxcbiAgICAgICAgQ2xhc3NCb2R5OiAnQ2xhc3NCb2R5JyxcbiAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogJ0NsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgICBDbGFzc0V4cHJlc3Npb246ICdDbGFzc0V4cHJlc3Npb24nLFxuICAgICAgICBDb21wcmVoZW5zaW9uQmxvY2s6ICdDb21wcmVoZW5zaW9uQmxvY2snLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbXByZWhlbnNpb25FeHByZXNzaW9uOiAnQ29tcHJlaGVuc2lvbkV4cHJlc3Npb24nLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsXG4gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLFxuICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JyxcbiAgICAgICAgRGlyZWN0aXZlU3RhdGVtZW50OiAnRGlyZWN0aXZlU3RhdGVtZW50JyxcbiAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLFxuICAgICAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JyxcbiAgICAgICAgRXhwb3J0QWxsRGVjbGFyYXRpb246ICdFeHBvcnRBbGxEZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydERlZmF1bHREZWNsYXJhdGlvbjogJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicsXG4gICAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJyxcbiAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiAnRXhwb3J0U3BlY2lmaWVyJyxcbiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Npb25TdGF0ZW1lbnQnLFxuICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLFxuICAgICAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JyxcbiAgICAgICAgRm9yT2ZTdGF0ZW1lbnQ6ICdGb3JPZlN0YXRlbWVudCcsXG4gICAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJyxcbiAgICAgICAgRnVuY3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJyxcbiAgICAgICAgR2VuZXJhdG9yRXhwcmVzc2lvbjogJ0dlbmVyYXRvckV4cHJlc3Npb24nLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJyxcbiAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVudCcsXG4gICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiAnSW1wb3J0RGVjbGFyYXRpb24nLFxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicsXG4gICAgICAgIEltcG9ydFNwZWNpZmllcjogJ0ltcG9ydFNwZWNpZmllcicsXG4gICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJyxcbiAgICAgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLFxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxFeHByZXNzaW9uJyxcbiAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLFxuICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlvbicsXG4gICAgICAgIE1vZHVsZVNwZWNpZmllcjogJ01vZHVsZVNwZWNpZmllcicsXG4gICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJyxcbiAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLFxuICAgICAgICBPYmplY3RQYXR0ZXJuOiAnT2JqZWN0UGF0dGVybicsXG4gICAgICAgIFByb2dyYW06ICdQcm9ncmFtJyxcbiAgICAgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsXG4gICAgICAgIFJlc3RFbGVtZW50OiAnUmVzdEVsZW1lbnQnLFxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1lbnQnLFxuICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLFxuICAgICAgICBTcHJlYWRFbGVtZW50OiAnU3ByZWFkRWxlbWVudCcsXG4gICAgICAgIFN1cGVyRXhwcmVzc2lvbjogJ1N1cGVyRXhwcmVzc2lvbicsXG4gICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsXG4gICAgICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJyxcbiAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiAnVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uJyxcbiAgICAgICAgVGVtcGxhdGVFbGVtZW50OiAnVGVtcGxhdGVFbGVtZW50JyxcbiAgICAgICAgVGVtcGxhdGVMaXRlcmFsOiAnVGVtcGxhdGVMaXRlcmFsJyxcbiAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lvbicsXG4gICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLFxuICAgICAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLFxuICAgICAgICBVbmFyeUV4cHJlc3Npb246ICdVbmFyeUV4cHJlc3Npb24nLFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVzc2lvbicsXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0aW9uJyxcbiAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJyxcbiAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsXG4gICAgICAgIFdpdGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JyxcbiAgICAgICAgWWllbGRFeHByZXNzaW9uOiAnWWllbGRFeHByZXNzaW9uJ1xuICAgIH07XG5cbiAgICBWaXNpdG9yS2V5cyA9IHtcbiAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBBc3NpZ25tZW50UGF0dGVybjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIEFycmF5RXhwcmVzc2lvbjogWydlbGVtZW50cyddLFxuICAgICAgICBBcnJheVBhdHRlcm46IFsnZWxlbWVudHMnXSxcbiAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IFsncGFyYW1zJywgJ2JvZHknXSxcbiAgICAgICAgQXdhaXRFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBCbG9ja1N0YXRlbWVudDogWydib2R5J10sXG4gICAgICAgIEJpbmFyeUV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLFxuICAgICAgICBCcmVha1N0YXRlbWVudDogWydsYWJlbCddLFxuICAgICAgICBDYWxsRXhwcmVzc2lvbjogWydjYWxsZWUnLCAnYXJndW1lbnRzJ10sXG4gICAgICAgIENhdGNoQ2xhdXNlOiBbJ3BhcmFtJywgJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NCb2R5OiBbJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogWydpZCcsICdzdXBlckNsYXNzJywgJ2JvZHknXSxcbiAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiBbJ2lkJywgJ3N1cGVyQ2xhc3MnLCAnYm9keSddLFxuICAgICAgICBDb21wcmVoZW5zaW9uQmxvY2s6IFsnbGVmdCcsICdyaWdodCddLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbXByZWhlbnNpb25FeHByZXNzaW9uOiBbJ2Jsb2NrcycsICdmaWx0ZXInLCAnYm9keSddLCAgLy8gQ0FVVElPTjogSXQncyBkZWZlcnJlZCB0byBFUzcuXG4gICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnLCAnYWx0ZXJuYXRlJ10sXG4gICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiBbJ2xhYmVsJ10sXG4gICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiBbXSxcbiAgICAgICAgRGlyZWN0aXZlU3RhdGVtZW50OiBbXSxcbiAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogWydib2R5JywgJ3Rlc3QnXSxcbiAgICAgICAgRW1wdHlTdGF0ZW1lbnQ6IFtdLFxuICAgICAgICBFeHBvcnRBbGxEZWNsYXJhdGlvbjogWydzb3VyY2UnXSxcbiAgICAgICAgRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9uJ10sXG4gICAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb24nLCAnc3BlY2lmaWVycycsICdzb3VyY2UnXSxcbiAgICAgICAgRXhwb3J0U3BlY2lmaWVyOiBbJ2V4cG9ydGVkJywgJ2xvY2FsJ10sXG4gICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6IFsnZXhwcmVzc2lvbiddLFxuICAgICAgICBGb3JTdGF0ZW1lbnQ6IFsnaW5pdCcsICd0ZXN0JywgJ3VwZGF0ZScsICdib2R5J10sXG4gICAgICAgIEZvckluU3RhdGVtZW50OiBbJ2xlZnQnLCAncmlnaHQnLCAnYm9keSddLFxuICAgICAgICBGb3JPZlN0YXRlbWVudDogWydsZWZ0JywgJ3JpZ2h0JywgJ2JvZHknXSxcbiAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogWydpZCcsICdwYXJhbXMnLCAnYm9keSddLFxuICAgICAgICBGdW5jdGlvbkV4cHJlc3Npb246IFsnaWQnLCAncGFyYW1zJywgJ2JvZHknXSxcbiAgICAgICAgR2VuZXJhdG9yRXhwcmVzc2lvbjogWydibG9ja3MnLCAnZmlsdGVyJywgJ2JvZHknXSwgIC8vIENBVVRJT046IEl0J3MgZGVmZXJyZWQgdG8gRVM3LlxuICAgICAgICBJZGVudGlmaWVyOiBbXSxcbiAgICAgICAgSWZTdGF0ZW1lbnQ6IFsndGVzdCcsICdjb25zZXF1ZW50JywgJ2FsdGVybmF0ZSddLFxuICAgICAgICBJbXBvcnREZWNsYXJhdGlvbjogWydzcGVjaWZpZXJzJywgJ3NvdXJjZSddLFxuICAgICAgICBJbXBvcnREZWZhdWx0U3BlY2lmaWVyOiBbJ2xvY2FsJ10sXG4gICAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjogWydsb2NhbCddLFxuICAgICAgICBJbXBvcnRTcGVjaWZpZXI6IFsnaW1wb3J0ZWQnLCAnbG9jYWwnXSxcbiAgICAgICAgTGl0ZXJhbDogW10sXG4gICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6IFsnbGFiZWwnLCAnYm9keSddLFxuICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sXG4gICAgICAgIE1lbWJlckV4cHJlc3Npb246IFsnb2JqZWN0JywgJ3Byb3BlcnR5J10sXG4gICAgICAgIE1ldGhvZERlZmluaXRpb246IFsna2V5JywgJ3ZhbHVlJ10sXG4gICAgICAgIE1vZHVsZVNwZWNpZmllcjogW10sXG4gICAgICAgIE5ld0V4cHJlc3Npb246IFsnY2FsbGVlJywgJ2FyZ3VtZW50cyddLFxuICAgICAgICBPYmplY3RFeHByZXNzaW9uOiBbJ3Byb3BlcnRpZXMnXSxcbiAgICAgICAgT2JqZWN0UGF0dGVybjogWydwcm9wZXJ0aWVzJ10sXG4gICAgICAgIFByb2dyYW06IFsnYm9keSddLFxuICAgICAgICBQcm9wZXJ0eTogWydrZXknLCAndmFsdWUnXSxcbiAgICAgICAgUmVzdEVsZW1lbnQ6IFsgJ2FyZ3VtZW50JyBdLFxuICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiBbJ2V4cHJlc3Npb25zJ10sXG4gICAgICAgIFNwcmVhZEVsZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgU3VwZXJFeHByZXNzaW9uOiBbJ3N1cGVyJ10sXG4gICAgICAgIFN3aXRjaFN0YXRlbWVudDogWydkaXNjcmltaW5hbnQnLCAnY2FzZXMnXSxcbiAgICAgICAgU3dpdGNoQ2FzZTogWyd0ZXN0JywgJ2NvbnNlcXVlbnQnXSxcbiAgICAgICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiBbJ3RhZycsICdxdWFzaSddLFxuICAgICAgICBUZW1wbGF0ZUVsZW1lbnQ6IFtdLFxuICAgICAgICBUZW1wbGF0ZUxpdGVyYWw6IFsncXVhc2lzJywgJ2V4cHJlc3Npb25zJ10sXG4gICAgICAgIFRoaXNFeHByZXNzaW9uOiBbXSxcbiAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6IFsnYXJndW1lbnQnXSxcbiAgICAgICAgVHJ5U3RhdGVtZW50OiBbJ2Jsb2NrJywgJ2hhbmRsZXInLCAnZmluYWxpemVyJ10sXG4gICAgICAgIFVuYXJ5RXhwcmVzc2lvbjogWydhcmd1bWVudCddLFxuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246IFsnZGVjbGFyYXRpb25zJ10sXG4gICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogWydpZCcsICdpbml0J10sXG4gICAgICAgIFdoaWxlU3RhdGVtZW50OiBbJ3Rlc3QnLCAnYm9keSddLFxuICAgICAgICBXaXRoU3RhdGVtZW50OiBbJ29iamVjdCcsICdib2R5J10sXG4gICAgICAgIFlpZWxkRXhwcmVzc2lvbjogWydhcmd1bWVudCddXG4gICAgfTtcblxuICAgIC8vIHVuaXF1ZSBpZFxuICAgIEJSRUFLID0ge307XG4gICAgU0tJUCA9IHt9O1xuICAgIFJFTU9WRSA9IHt9O1xuXG4gICAgVmlzaXRvck9wdGlvbiA9IHtcbiAgICAgICAgQnJlYWs6IEJSRUFLLFxuICAgICAgICBTa2lwOiBTS0lQLFxuICAgICAgICBSZW1vdmU6IFJFTU9WRVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBSZWZlcmVuY2UocGFyZW50LCBrZXkpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIH1cblxuICAgIFJlZmVyZW5jZS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uobm9kZSkge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLmtleV0gPSBub2RlO1xuICAgIH07XG5cbiAgICBSZWZlcmVuY2UucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodGhpcy5wYXJlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5zcGxpY2UodGhpcy5rZXksIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2UobnVsbCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gRWxlbWVudChub2RlLCBwYXRoLCB3cmFwLCByZWYpIHtcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgdGhpcy5yZWYgPSByZWY7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gQ29udHJvbGxlcigpIHsgfVxuXG4gICAgLy8gQVBJOlxuICAgIC8vIHJldHVybiBwcm9wZXJ0eSBwYXRoIGFycmF5IGZyb20gcm9vdCB0byBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24gcGF0aCgpIHtcbiAgICAgICAgdmFyIGksIGl6LCBqLCBqeiwgcmVzdWx0LCBlbGVtZW50O1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZFRvUGF0aChyZXN1bHQsIHBhdGgpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHBhdGgpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMCwganogPSBwYXRoLmxlbmd0aDsgaiA8IGp6OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aFtqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJvb3Qgbm9kZVxuICAgICAgICBpZiAoIXRoaXMuX19jdXJyZW50LnBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmlyc3Qgbm9kZSBpcyBzZW50aW5lbCwgc2Vjb25kIG5vZGUgaXMgcm9vdCBlbGVtZW50XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAyLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMuX19sZWF2ZWxpc3RbaV07XG4gICAgICAgICAgICBhZGRUb1BhdGgocmVzdWx0LCBlbGVtZW50LnBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRvUGF0aChyZXN1bHQsIHRoaXMuX19jdXJyZW50LnBhdGgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIHR5cGUgb2YgY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUudHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmN1cnJlbnQoKTtcbiAgICAgICAgcmV0dXJuIG5vZGUudHlwZSB8fCB0aGlzLl9fY3VycmVudC53cmFwO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmV0dXJuIGFycmF5IG9mIHBhcmVudCBlbGVtZW50c1xuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnBhcmVudHMgPSBmdW5jdGlvbiBwYXJlbnRzKCkge1xuICAgICAgICB2YXIgaSwgaXosIHJlc3VsdDtcblxuICAgICAgICAvLyBmaXJzdCBub2RlIGlzIHNlbnRpbmVsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAxLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5fX2xlYXZlbGlzdFtpXS5ub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyByZXR1cm4gY3VycmVudCBub2RlXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIGN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fY3VycmVudC5ub2RlO1xuICAgIH07XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5fX2V4ZWN1dGUgPSBmdW5jdGlvbiBfX2V4ZWN1dGUoY2FsbGJhY2ssIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzLCByZXN1bHQ7XG5cbiAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHByZXZpb3VzICA9IHRoaXMuX19jdXJyZW50O1xuICAgICAgICB0aGlzLl9fY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX19zdGF0ZSA9IG51bGw7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2suY2FsbCh0aGlzLCBlbGVtZW50Lm5vZGUsIHRoaXMuX19sZWF2ZWxpc3RbdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGggLSAxXS5ub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9fY3VycmVudCA9IHByZXZpb3VzO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIC8vIEFQSTpcbiAgICAvLyBub3RpZnkgY29udHJvbCBza2lwIC8gYnJlYWtcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoZmxhZykge1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBmbGFnO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gc2tpcCBjaGlsZCBub2RlcyBvZiBjdXJyZW50IG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5vdGlmeShTS0lQKTtcbiAgICB9O1xuXG4gICAgLy8gQVBJOlxuICAgIC8vIGJyZWFrIHRyYXZlcnNhbHNcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZVsnYnJlYWsnXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoQlJFQUspO1xuICAgIH07XG5cbiAgICAvLyBBUEk6XG4gICAgLy8gcmVtb3ZlIG5vZGVcbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KFJFTU9WRSk7XG4gICAgfTtcblxuICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9faW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdGhpcy52aXNpdG9yID0gdmlzaXRvcjtcbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgdGhpcy5fX3dvcmtsaXN0ID0gW107XG4gICAgICAgIHRoaXMuX19sZWF2ZWxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5fX2N1cnJlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLl9fc3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9fZmFsbGJhY2sgPSB2aXNpdG9yLmZhbGxiYWNrID09PSAnaXRlcmF0aW9uJztcbiAgICAgICAgdGhpcy5fX2tleXMgPSBWaXNpdG9yS2V5cztcbiAgICAgICAgaWYgKHZpc2l0b3Iua2V5cykge1xuICAgICAgICAgICAgdGhpcy5fX2tleXMgPSBleHRlbmQob2JqZWN0Q3JlYXRlKHRoaXMuX19rZXlzKSwgdmlzaXRvci5rZXlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBpc05vZGUobm9kZSkge1xuICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZS50eXBlID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Byb3BlcnR5KG5vZGVUeXBlLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIChub2RlVHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RQYXR0ZXJuKSAmJiAncHJvcGVydGllcycgPT09IGtleTtcbiAgICB9XG5cbiAgICBDb250cm9sbGVyLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIHdvcmtsaXN0LFxuICAgICAgICAgICAgbGVhdmVsaXN0LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBjdXJyZW50MixcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICAgICAgICBjYW5kaWRhdGUsXG4gICAgICAgICAgICBzZW50aW5lbDtcblxuICAgICAgICB0aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNpdG9yKTtcblxuICAgICAgICBzZW50aW5lbCA9IHt9O1xuXG4gICAgICAgIC8vIHJlZmVyZW5jZVxuICAgICAgICB3b3JrbGlzdCA9IHRoaXMuX193b3JrbGlzdDtcbiAgICAgICAgbGVhdmVsaXN0ID0gdGhpcy5fX2xlYXZlbGlzdDtcblxuICAgICAgICAvLyBpbml0aWFsaXplXG4gICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQocm9vdCwgbnVsbCwgbnVsbCwgbnVsbCkpO1xuICAgICAgICBsZWF2ZWxpc3QucHVzaChuZXcgRWxlbWVudChudWxsLCBudWxsLCBudWxsLCBudWxsKSk7XG5cbiAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gc2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gbGVhdmVsaXN0LnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5sZWF2ZSwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCByZXQgPT09IEJSRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGUpIHtcblxuICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IuZW50ZXIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgcmV0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7XG4gICAgICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBTS0lQIHx8IHJldCA9PT0gU0tJUCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlID0gZWxlbWVudC5ub2RlO1xuICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5vZGUudHlwZTtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gdGhpcy5fX2tleXNbbm9kZVR5cGVdO1xuICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gb2JqZWN0S2V5cyhub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub2RlIHR5cGUgJyArIG5vZGVUeXBlICsgJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBjYW5kaWRhdGVzW2N1cnJlbnRdO1xuICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQyID0gY2FuZGlkYXRlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlW2N1cnJlbnQyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvcGVydHkobm9kZVR5cGUsIGNhbmRpZGF0ZXNbY3VycmVudF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sICdQcm9wZXJ0eScsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZVtjdXJyZW50Ml0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9kZShjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG5ldyBFbGVtZW50KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBudWxsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQ29udHJvbGxlci5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2Uocm9vdCwgdmlzaXRvcikge1xuICAgICAgICBmdW5jdGlvbiByZW1vdmVFbGVtKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBuZXh0RWxlbSxcbiAgICAgICAgICAgICAgICBwYXJlbnQ7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnJlZi5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIHJlZmVyZW5jZSBpcyBhbiBlbGVtZW50IG9mIGFuIGFycmF5LlxuICAgICAgICAgICAgICAgIGtleSA9IGVsZW1lbnQucmVmLmtleTtcbiAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtZW50LnJlZi5wYXJlbnQ7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiByZW1vdmVkIGZyb20gYXJyYXksIHRoZW4gZGVjcmVhc2UgZm9sbG93aW5nIGl0ZW1zJyBrZXlzLlxuICAgICAgICAgICAgICAgIGkgPSB3b3JrbGlzdC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0RWxlbSA9IHdvcmtsaXN0W2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW0ucmVmICYmIG5leHRFbGVtLnJlZi5wYXJlbnQgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgIChuZXh0RWxlbS5yZWYua2V5IDwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAtLW5leHRFbGVtLnJlZi5rZXk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd29ya2xpc3QsXG4gICAgICAgICAgICBsZWF2ZWxpc3QsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbm9kZVR5cGUsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIGN1cnJlbnQyLFxuICAgICAgICAgICAgY2FuZGlkYXRlcyxcbiAgICAgICAgICAgIGNhbmRpZGF0ZSxcbiAgICAgICAgICAgIHNlbnRpbmVsLFxuICAgICAgICAgICAgb3V0ZXIsXG4gICAgICAgICAgICBrZXk7XG5cbiAgICAgICAgdGhpcy5fX2luaXRpYWxpemUocm9vdCwgdmlzaXRvcik7XG5cbiAgICAgICAgc2VudGluZWwgPSB7fTtcblxuICAgICAgICAvLyByZWZlcmVuY2VcbiAgICAgICAgd29ya2xpc3QgPSB0aGlzLl9fd29ya2xpc3Q7XG4gICAgICAgIGxlYXZlbGlzdCA9IHRoaXMuX19sZWF2ZWxpc3Q7XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZVxuICAgICAgICBvdXRlciA9IHtcbiAgICAgICAgICAgIHJvb3Q6IHJvb3RcbiAgICAgICAgfTtcbiAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KHJvb3QsIG51bGwsIG51bGwsIG5ldyBSZWZlcmVuY2Uob3V0ZXIsICdyb290JykpO1xuICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICBsZWF2ZWxpc3QucHVzaChlbGVtZW50KTtcblxuICAgICAgICB3aGlsZSAod29ya2xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gd29ya2xpc3QucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50ID09PSBzZW50aW5lbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBsZWF2ZWxpc3QucG9wKCk7XG5cbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmxlYXZlLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCxcbiAgICAgICAgICAgICAgICAvLyBzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuZGVmaW5lZCBhbmQgbnVsbCBpbiB0aGlzIHBsYWNlXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQICYmIHRhcmdldCAhPT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWYucmVwbGFjZSh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFJFTU9WRSB8fCB0YXJnZXQgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFbGVtKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8IHRhcmdldCA9PT0gQlJFQUspIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmVudGVyLCBlbGVtZW50KTtcblxuICAgICAgICAgICAgLy8gbm9kZSBtYXkgYmUgcmVwbGFjZWQgd2l0aCBudWxsLFxuICAgICAgICAgICAgLy8gc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmRlZmluZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZVxuICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldCAhPT0gQlJFQUsgJiYgdGFyZ2V0ICE9PSBTS0lQICYmIHRhcmdldCAhPT0gUkVNT1ZFKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjZVxuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmLnJlcGxhY2UodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBlbGVtZW50Lm5vZGUgPSB0YXJnZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFJFTU9WRSB8fCB0YXJnZXQgPT09IFJFTU9WRSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUVsZW0oZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5ub2RlID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgdGFyZ2V0ID09PSBCUkVBSykge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBub2RlIG1heSBiZSBudWxsXG4gICAgICAgICAgICBub2RlID0gZWxlbWVudC5ub2RlO1xuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc2VudGluZWwpO1xuICAgICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IFNLSVAgfHwgdGFyZ2V0ID09PSBTS0lQKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFwIHx8IG5vZGUudHlwZTtcbiAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSB0aGlzLl9fa2V5c1tub2RlVHlwZV07XG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fX2ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBvYmplY3RLZXlzKG5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub2RlIHR5cGUgJyArIG5vZGVUeXBlICsgJy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAtPSAxKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gY2FuZGlkYXRlc1tjdXJyZW50XTtcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50MiA9IGNhbmRpZGF0ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVbY3VycmVudDJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcm9wZXJ0eShub2RlVHlwZSwgY2FuZGlkYXRlc1tjdXJyZW50XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHknLCBuZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVudDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZVtjdXJyZW50Ml0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgbnVsbCwgbmV3IFJlZmVyZW5jZShjYW5kaWRhdGUsIGN1cnJlbnQyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChuZXcgRWxlbWVudChjYW5kaWRhdGUsIGtleSwgbnVsbCwgbmV3IFJlZmVyZW5jZShub2RlLCBrZXkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICByZXR1cm4gY29udHJvbGxlci50cmF2ZXJzZShyb290LCB2aXNpdG9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYWNlKHJvb3QsIHZpc2l0b3IpIHtcbiAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICByZXR1cm4gY29udHJvbGxlci5yZXBsYWNlKHJvb3QsIHZpc2l0b3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZENvbW1lbnRSYW5nZShjb21tZW50LCB0b2tlbnMpIHtcbiAgICAgICAgdmFyIHRhcmdldDtcblxuICAgICAgICB0YXJnZXQgPSB1cHBlckJvdW5kKHRva2VucywgZnVuY3Rpb24gc2VhcmNoKHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW4ucmFuZ2VbMF0gPiBjb21tZW50LnJhbmdlWzBdO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbY29tbWVudC5yYW5nZVswXSwgY29tbWVudC5yYW5nZVsxXV07XG5cbiAgICAgICAgaWYgKHRhcmdldCAhPT0gdG9rZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID0gdG9rZW5zW3RhcmdldF0ucmFuZ2VbMF07XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXQgLT0gMTtcbiAgICAgICAgaWYgKHRhcmdldCA+PSAwKSB7XG4gICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0gPSB0b2tlbnNbdGFyZ2V0XS5yYW5nZVsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21tZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGF0dGFjaENvbW1lbnRzKHRyZWUsIHByb3ZpZGVkQ29tbWVudHMsIHRva2Vucykge1xuICAgICAgICAvLyBBdCBmaXJzdCwgd2Ugc2hvdWxkIGNhbGN1bGF0ZSBleHRlbmRlZCBjb21tZW50IHJhbmdlcy5cbiAgICAgICAgdmFyIGNvbW1lbnRzID0gW10sIGNvbW1lbnQsIGxlbiwgaSwgY3Vyc29yO1xuXG4gICAgICAgIGlmICghdHJlZS5yYW5nZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRhY2hDb21tZW50cyBuZWVkcyByYW5nZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG9rZW5zIGFycmF5IGlzIGVtcHR5LCB3ZSBhdHRhY2ggY29tbWVudHMgdG8gdHJlZSBhcyAnbGVhZGluZ0NvbW1lbnRzJ1xuICAgICAgICBpZiAoIXRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChwcm92aWRlZENvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbMCwgdHJlZS5yYW5nZVswXV07XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyZWUubGVhZGluZ0NvbW1lbnRzID0gY29tbWVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJlZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbW1lbnRzLnB1c2goZXh0ZW5kQ29tbWVudFJhbmdlKGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pLCB0b2tlbnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgaXMgYmFzZWQgb24gSm9obiBGcmVlbWFuJ3MgaW1wbGVtZW50YXRpb24uXG4gICAgICAgIGN1cnNvciA9IDA7XG4gICAgICAgIHRyYXZlcnNlKHRyZWUsIHtcbiAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb21tZW50O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA+IG5vZGUucmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9PT0gbm9kZS5yYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmxlYWRpbmdDb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGVcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnNvciA9IDA7XG4gICAgICAgIHRyYXZlcnNlKHRyZWUsIHtcbiAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHZhciBjb21tZW50O1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPCBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPT09IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLnRyYWlsaW5nQ29tbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGVcbiAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0cmVlO1xuICAgIH1cblxuICAgIGV4cG9ydHMudmVyc2lvbiA9IHJlcXVpcmUoJy4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbiAgICBleHBvcnRzLlN5bnRheCA9IFN5bnRheDtcbiAgICBleHBvcnRzLnRyYXZlcnNlID0gdHJhdmVyc2U7XG4gICAgZXhwb3J0cy5yZXBsYWNlID0gcmVwbGFjZTtcbiAgICBleHBvcnRzLmF0dGFjaENvbW1lbnRzID0gYXR0YWNoQ29tbWVudHM7XG4gICAgZXhwb3J0cy5WaXNpdG9yS2V5cyA9IFZpc2l0b3JLZXlzO1xuICAgIGV4cG9ydHMuVmlzaXRvck9wdGlvbiA9IFZpc2l0b3JPcHRpb247XG4gICAgZXhwb3J0cy5Db250cm9sbGVyID0gQ29udHJvbGxlcjtcbiAgICBleHBvcnRzLmNsb25lRW52aXJvbm1lbnQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjbG9uZSh7fSk7IH07XG5cbiAgICByZXR1cm4gZXhwb3J0cztcbn0oZXhwb3J0cykpO1xuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiIsIm1vZHVsZS5leHBvcnRzPXtcbiAgXCJuYW1lXCI6IFwiZXN0cmF2ZXJzZVwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiRUNNQVNjcmlwdCBKUyBBU1QgdHJhdmVyc2FsIGZ1bmN0aW9uc1wiLFxuICBcImhvbWVwYWdlXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2VzdG9vbHMvZXN0cmF2ZXJzZVwiLFxuICBcIm1haW5cIjogXCJlc3RyYXZlcnNlLmpzXCIsXG4gIFwidmVyc2lvblwiOiBcIjMuMS4wXCIsXG4gIFwiZW5naW5lc1wiOiB7XG4gICAgXCJub2RlXCI6IFwiPj0wLjEwLjBcIlxuICB9LFxuICBcIm1haW50YWluZXJzXCI6IFtcbiAgICB7XG4gICAgICBcIm5hbWVcIjogXCJjb25zdGVsbGF0aW9uXCIsXG4gICAgICBcImVtYWlsXCI6IFwidXRhdGFuZS50ZWFAZ21haWwuY29tXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwibmFtZVwiOiBcIm1pY2hhZWxmaWNhcnJhXCIsXG4gICAgICBcImVtYWlsXCI6IFwibnBtQG1pY2hhZWwuZmljYXJyYS5tZVwiXG4gICAgfVxuICBdLFxuICBcInJlcG9zaXRvcnlcIjoge1xuICAgIFwidHlwZVwiOiBcImdpdFwiLFxuICAgIFwidXJsXCI6IFwiZ2l0K3NzaDovL2dpdEBnaXRodWIuY29tL2VzdG9vbHMvZXN0cmF2ZXJzZS5naXRcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJjaGFpXCI6IFwiXjIuMS4xXCIsXG4gICAgXCJjb2ZmZWUtc2NyaXB0XCI6IFwiXjEuOC4wXCIsXG4gICAgXCJlc3ByZWVcIjogXCJeMS4xMS4wXCIsXG4gICAgXCJndWxwXCI6IFwiXjMuOC4xMFwiLFxuICAgIFwiZ3VscC1idW1wXCI6IFwiXjAuMi4yXCIsXG4gICAgXCJndWxwLWZpbHRlclwiOiBcIl4yLjAuMFwiLFxuICAgIFwiZ3VscC1naXRcIjogXCJeMS4wLjFcIixcbiAgICBcImd1bHAtdGFnLXZlcnNpb25cIjogXCJeMS4yLjFcIixcbiAgICBcImpzaGludFwiOiBcIl4yLjUuNlwiLFxuICAgIFwibW9jaGFcIjogXCJeMi4xLjBcIlxuICB9LFxuICBcImxpY2Vuc2VzXCI6IFtcbiAgICB7XG4gICAgICBcInR5cGVcIjogXCJCU0RcIixcbiAgICAgIFwidXJsXCI6IFwiaHR0cDovL2dpdGh1Yi5jb20vZXN0b29scy9lc3RyYXZlcnNlL3Jhdy9tYXN0ZXIvTElDRU5TRS5CU0RcIlxuICAgIH1cbiAgXSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcInRlc3RcIjogXCJucG0gcnVuLXNjcmlwdCBsaW50ICYmIG5wbSBydW4tc2NyaXB0IHVuaXQtdGVzdFwiLFxuICAgIFwibGludFwiOiBcImpzaGludCBlc3RyYXZlcnNlLmpzXCIsXG4gICAgXCJ1bml0LXRlc3RcIjogXCJtb2NoYSAtLWNvbXBpbGVycyBjb2ZmZWU6Y29mZmVlLXNjcmlwdC9yZWdpc3RlclwiXG4gIH0sXG4gIFwiZ2l0SGVhZFwiOiBcIjE2NmViYmUwYThkNDVjZWIyMzkxYjZmNWVmNWQxYmFiNmJmYjI2N2FcIixcbiAgXCJidWdzXCI6IHtcbiAgICBcInVybFwiOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9lc3Rvb2xzL2VzdHJhdmVyc2UvaXNzdWVzXCJcbiAgfSxcbiAgXCJfaWRcIjogXCJlc3RyYXZlcnNlQDMuMS4wXCIsXG4gIFwiX3NoYXN1bVwiOiBcIjE1ZTI4YTQ0NmI4YjgyYmM3MDBjY2M4Yjk2Yzc4YWY0ZGEwZDZjYmFcIixcbiAgXCJfZnJvbVwiOiBcImVzdHJhdmVyc2VAPj0zLjEuMCA8NC4wLjBcIixcbiAgXCJfbnBtVmVyc2lvblwiOiBcIjIuMC4wLWFscGhhLTVcIixcbiAgXCJfbnBtVXNlclwiOiB7XG4gICAgXCJuYW1lXCI6IFwiY29uc3RlbGxhdGlvblwiLFxuICAgIFwiZW1haWxcIjogXCJ1dGF0YW5lLnRlYUBnbWFpbC5jb21cIlxuICB9LFxuICBcImRpc3RcIjoge1xuICAgIFwic2hhc3VtXCI6IFwiMTVlMjhhNDQ2YjhiODJiYzcwMGNjYzhiOTZjNzhhZjRkYTBkNmNiYVwiLFxuICAgIFwidGFyYmFsbFwiOiBcImh0dHA6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN0cmF2ZXJzZS8tL2VzdHJhdmVyc2UtMy4xLjAudGd6XCJcbiAgfSxcbiAgXCJkaXJlY3Rvcmllc1wiOiB7fSxcbiAgXCJfcmVzb2x2ZWRcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyYXZlcnNlLy0vZXN0cmF2ZXJzZS0zLjEuMC50Z3pcIixcbiAgXCJyZWFkbWVcIjogXCJFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhXCJcbn1cbiIsIihmdW5jdGlvbiAocHJvY2Vzcyl7XG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIHBvc2l4KHBhdGgpIHtcblx0cmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59O1xuXG5mdW5jdGlvbiB3aW4zMihwYXRoKSB7XG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9ibG9iL2IzZmNjMjQ1ZmIyNTUzOTkwOWVmMWQ1ZWFhMDFkYmY5MmUxNjg2MzMvbGliL3BhdGguanMjTDU2XG5cdHZhciBzcGxpdERldmljZVJlID0gL14oW2EtekEtWl06fFtcXFxcXFwvXXsyfVteXFxcXFxcL10rW1xcXFxcXC9dK1teXFxcXFxcL10rKT8oW1xcXFxcXC9dKT8oW1xcc1xcU10qPykkLztcblx0dmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcblx0dmFyIGRldmljZSA9IHJlc3VsdFsxXSB8fCAnJztcblx0dmFyIGlzVW5jID0gISFkZXZpY2UgJiYgZGV2aWNlLmNoYXJBdCgxKSAhPT0gJzonO1xuXG5cdC8vIFVOQyBwYXRocyBhcmUgYWx3YXlzIGFic29sdXRlXG5cdHJldHVybiAhIXJlc3VsdFsyXSB8fCBpc1VuYztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHdpbjMyIDogcG9zaXg7XG5tb2R1bGUuZXhwb3J0cy5wb3NpeCA9IHBvc2l4O1xubW9kdWxlLmV4cG9ydHMud2luMzIgPSB3aW4zMjtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5d1lYUm9MV2x6TFdGaWMyOXNkWFJsTDJsdVpHVjRMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWlkMWMyVWdjM1J5YVdOMEp6dGNibHh1Wm5WdVkzUnBiMjRnY0c5emFYZ29jR0YwYUNrZ2UxeHVYSFJ5WlhSMWNtNGdjR0YwYUM1amFHRnlRWFFvTUNrZ1BUMDlJQ2N2Snp0Y2JuMDdYRzVjYm1aMWJtTjBhVzl1SUhkcGJqTXlLSEJoZEdncElIdGNibHgwTHk4Z2FIUjBjSE02THk5bmFYUm9kV0l1WTI5dEwycHZlV1Z1ZEM5dWIyUmxMMkpzYjJJdllqTm1ZMk15TkRWbVlqSTFOVE01T1RBNVpXWXhaRFZsWVdFd01XUmlaamt5WlRFMk9EWXpNeTlzYVdJdmNHRjBhQzVxY3lOTU5UWmNibHgwZG1GeUlITndiR2wwUkdWMmFXTmxVbVVnUFNBdlhpaGJZUzE2UVMxYVhUcDhXMXhjWEZ4Y1hDOWRleko5VzE1Y1hGeGNYRnd2WFN0YlhGeGNYRnhjTDEwclcxNWNYRnhjWEZ3dlhTc3BQeWhiWEZ4Y1hGeGNMMTBwUHloYlhGeHpYRnhUWFNvL0tTUXZPMXh1WEhSMllYSWdjbVZ6ZFd4MElEMGdjM0JzYVhSRVpYWnBZMlZTWlM1bGVHVmpLSEJoZEdncE8xeHVYSFIyWVhJZ1pHVjJhV05sSUQwZ2NtVnpkV3gwV3pGZElIeDhJQ2NuTzF4dVhIUjJZWElnYVhOVmJtTWdQU0FoSVdSbGRtbGpaU0FtSmlCa1pYWnBZMlV1WTJoaGNrRjBLREVwSUNFOVBTQW5PaWM3WEc1Y2JseDBMeThnVlU1RElIQmhkR2h6SUdGeVpTQmhiSGRoZVhNZ1lXSnpiMngxZEdWY2JseDBjbVYwZFhKdUlDRWhjbVZ6ZFd4MFd6SmRJSHg4SUdselZXNWpPMXh1ZlR0Y2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQndjbTlqWlhOekxuQnNZWFJtYjNKdElEMDlQU0FuZDJsdU16SW5JRDhnZDJsdU16SWdPaUJ3YjNOcGVEdGNibTF2WkhWc1pTNWxlSEJ2Y25SekxuQnZjMmw0SUQwZ2NHOXphWGc3WEc1dGIyUjFiR1V1Wlhod2IzSjBjeTUzYVc0ek1pQTlJSGRwYmpNeU8xeHVJbDE5IiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG4gLypqc2xpbnQgbm9kZTogdHJ1ZSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN0YXRpYyBhbmFseXNpcyBmb3IgUG9seW1lci5cbiAqIEBuYW1lc3BhY2UgaHlkcm9seXNpc1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQW5hbHl6ZXI6ICAgICAgICAgIHJlcXVpcmUoJy4vbGliL2FuYWx5emVyJyksXG4gIGRvY3M6ICAgICAgICAgICAgICByZXF1aXJlKCcuL2xpYi9hc3QtdXRpbHMvZG9jcycpLFxuICBGU1Jlc29sdmVyOiAgICAgICAgcmVxdWlyZSgnLi9saWIvbG9hZGVyL2ZzLXJlc29sdmVyJyksXG4gIGpzZG9jOiAgICAgICAgICAgICByZXF1aXJlKCcuL2xpYi9hc3QtdXRpbHMvanNkb2MnKSxcbiAgTG9hZGVyOiAgICAgICAgICAgIHJlcXVpcmUoJy4vbGliL2xvYWRlci9maWxlLWxvYWRlcicpLFxuICBOb29wUmVzb2x2ZXI6ICAgICAgcmVxdWlyZSgnLi9saWIvbG9hZGVyL25vb3AtcmVzb2x2ZXInKSxcbiAgUmVkaXJlY3RSZXNvbHZlcjogIHJlcXVpcmUoJy4vbGliL2xvYWRlci9yZWRpcmVjdC1yZXNvbHZlcicpLFxuICBYSFJSZXNvbHZlcjogICAgICAgcmVxdWlyZSgnLi9saWIvbG9hZGVyL3hoci1yZXNvbHZlcicpLFxuICBfanNQYXJzZTogICAgICAgICAgcmVxdWlyZSgnLi9saWIvYXN0LXV0aWxzL2pzLXBhcnNlJyksXG4gIF9pbXBvcnRQYXJzZTogICAgICByZXF1aXJlKCcuL2xpYi9hc3QtdXRpbHMvaW1wb3J0LXBhcnNlJyksXG59O1xuIl19
... ...
bower_components/hydrolysis/index.js 100755 → 100644
bower_components/iron-a11y-keys-behavior/.bower.json 100755 → 100644
1 1 {
2 2 "name": "iron-a11y-keys-behavior",
3   - "version": "1.0.6",
  3 + "version": "1.0.7",
4 4 "description": "A behavior that enables keybindings for greater a11y.",
5 5 "keywords": [
6 6 "web-components",
... ... @@ -29,14 +29,14 @@
29 29 "web-component-tester": "*",
30 30 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
31 31 },
32   - "homepage": "https://github.com/PolymerElements/iron-a11y-keys-behavior",
33   - "_release": "1.0.6",
  32 + "homepage": "https://github.com/polymerelements/iron-a11y-keys-behavior",
  33 + "_release": "1.0.7",
34 34 "_resolution": {
35 35 "type": "version",
36   - "tag": "v1.0.6",
37   - "commit": "af5c98b1cf9b3d180a6326c99ac9c7057eee647f"
  36 + "tag": "v1.0.7",
  37 + "commit": "4dfdd8cca76eabe12245e86deb9d5da3cd717460"
38 38 },
39   - "_source": "git://github.com/PolymerElements/iron-a11y-keys-behavior.git",
  39 + "_source": "git://github.com/polymerelements/iron-a11y-keys-behavior.git",
40 40 "_target": "^1.0.0",
41   - "_originalSource": "PolymerElements/iron-a11y-keys-behavior"
  41 + "_originalSource": "polymerelements/iron-a11y-keys-behavior"
42 42 }
43 43 \ No newline at end of file
... ...
bower_components/iron-a11y-keys-behavior/.gitignore 100755 → 100644
bower_components/iron-a11y-keys-behavior/README.md 100755 → 100644
bower_components/iron-a11y-keys-behavior/bower.json 100755 → 100644
1 1 {
2 2 "name": "iron-a11y-keys-behavior",
3   - "version": "1.0.6",
  3 + "version": "1.0.7",
4 4 "description": "A behavior that enables keybindings for greater a11y.",
5 5 "keywords": [
6 6 "web-components",
... ...
bower_components/iron-a11y-keys-behavior/demo/index.html 100755 → 100644
bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html 100755 → 100644
bower_components/iron-a11y-keys-behavior/index.html 100755 → 100644
bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html 100755 → 100644
... ... @@ -255,6 +255,15 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
255 255 }
256 256 },
257 257  
  258 + /**
  259 + * If true, this property will cause the implementing element to
  260 + * automatically stop propagation on any handled KeyboardEvents.
  261 + */
  262 + stopKeyboardEventPropagation: {
  263 + type: Boolean,
  264 + value: false
  265 + },
  266 +
258 267 _boundKeyHandlers: {
259 268 type: Array,
260 269 value: function() {
... ... @@ -398,6 +407,10 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
398 407 },
399 408  
400 409 _onKeyBindingEvent: function(keyBindings, event) {
  410 + if (this.stopKeyboardEventPropagation) {
  411 + event.stopPropagation();
  412 + }
  413 +
401 414 keyBindings.forEach(function(keyBinding) {
402 415 var keyCombo = keyBinding[0];
403 416 var handlerName = keyBinding[1];
... ...
bower_components/iron-a11y-keys-behavior/test/basic-test.html 100755 → 100644
... ... @@ -30,6 +30,12 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
30 30 </template>
31 31 </test-fixture>
32 32  
  33 + <test-fixture id="NonPropagatingKeys">
  34 + <template>
  35 + <x-a11y-basic-keys stop-keyboard-event-propagation></x-a11y-basic-keys>
  36 + </template>
  37 + </test-fixture>
  38 +
33 39 <test-fixture id="ComboKeys">
34 40 <template>
35 41 <x-a11y-combo-keys></x-a11y-combo-keys>
... ... @@ -161,6 +167,15 @@ suite(&#39;Polymer.IronA11yKeysBehavior&#39;, function() {
161 167 expect(keys.keyCount).to.be.equal(1);
162 168 });
163 169  
  170 + test('allows propagation beyond the key combo handler', function() {
  171 + var keySpy = sinon.spy();
  172 + document.addEventListener('keydown', keySpy);
  173 +
  174 + MockInteractions.pressEnter(keys);
  175 +
  176 + expect(keySpy.callCount).to.be.equal(1);
  177 + });
  178 +
164 179 suite('edge cases', function() {
165 180 test('knows that `spacebar` is the same as `space`', function() {
166 181 var event = new CustomEvent('keydown');
... ... @@ -242,6 +257,22 @@ suite(&#39;Polymer.IronA11yKeysBehavior&#39;, function() {
242 257 });
243 258 });
244 259  
  260 + suite('stopping propagation automatically', function() {
  261 + setup(function() {
  262 + keys = fixture('NonPropagatingKeys');
  263 + });
  264 +
  265 + test('does not propagate key events beyond the combo handler', function() {
  266 + var keySpy = sinon.spy();
  267 +
  268 + document.addEventListener('keydown', keySpy);
  269 +
  270 + MockInteractions.pressEnter(keys);
  271 +
  272 + expect(keySpy.callCount).to.be.equal(0);
  273 + });
  274 + });
  275 +
245 276 });
246 277 </script>
247 278 </body>
... ...
bower_components/iron-ajax/.bower.json 100755 → 100644
1 1 {
2 2 "name": "iron-ajax",
3   - "version": "1.0.5",
  3 + "version": "1.0.6",
4 4 "description": "Makes it easy to make ajax calls and parse the response",
5 5 "private": true,
6 6 "authors": [
... ... @@ -32,11 +32,11 @@
32 32 "web-component-tester": "*",
33 33 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
34 34 },
35   - "_release": "1.0.5",
  35 + "_release": "1.0.6",
36 36 "_resolution": {
37 37 "type": "version",
38   - "tag": "v1.0.5",
39   - "commit": "ce7e3e4cbac6b3d9aebae626021498882326b3bc"
  38 + "tag": "v1.0.6",
  39 + "commit": "72f463a166013e12880bb881d680adf386520c49"
40 40 },
41 41 "_source": "git://github.com/PolymerElements/iron-ajax.git",
42 42 "_target": "^1.0.0",
... ...
bower_components/iron-ajax/.gitignore 100755 → 100644
bower_components/iron-ajax/README.md 100755 → 100644
bower_components/iron-ajax/bower.json 100755 → 100644
1 1 {
2 2 "name": "iron-ajax",
3   - "version": "1.0.5",
  3 + "version": "1.0.6",
4 4 "description": "Makes it easy to make ajax calls and parse the response",
5 5 "private": true,
6 6 "authors": [
... ...
bower_components/iron-ajax/demo/index.html 100755 → 100644
bower_components/iron-ajax/hero.svg 100755 → 100644
bower_components/iron-ajax/index.html 100755 → 100644
bower_components/iron-ajax/iron-ajax.html 100755 → 100644
... ... @@ -191,6 +191,14 @@ element.
191 191 },
192 192  
193 193 /**
  194 + * Set the timeout flag on the request.
  195 + */
  196 + timeout: {
  197 + type: Number,
  198 + value: 0
  199 + },
  200 +
  201 + /**
194 202 * If true, automatically performs an Ajax request when either `url` or
195 203 * `params` changes.
196 204 */
... ... @@ -282,7 +290,7 @@ element.
282 290  
283 291 observers: [
284 292 '_requestOptionsChanged(url, method, params.*, headers,' +
285   - 'contentType, body, sync, handleAs, withCredentials, auto)'
  293 + 'contentType, body, sync, handleAs, withCredentials, timeout, auto)'
286 294 ],
287 295  
288 296 /**
... ... @@ -300,11 +308,15 @@ element.
300 308 value = this.params[param];
301 309 param = window.encodeURIComponent(param);
302 310  
303   - if (value !== null) {
304   - param += '=' + window.encodeURIComponent(value);
  311 + if (Array.isArray(value)) {
  312 + for (var i = 0; i < value.length; i++) {
  313 + queryParts.push(param + '=' + window.encodeURIComponent(value[i]));
  314 + }
  315 + } else if (value !== null) {
  316 + queryParts.push(param + '=' + window.encodeURIComponent(value));
  317 + } else {
  318 + queryParts.push(param);
305 319 }
306   -
307   - queryParts.push(param);
308 320 }
309 321  
310 322 return queryParts.join('&');
... ... @@ -320,7 +332,8 @@ element.
320 332 var queryString = this.queryString;
321 333  
322 334 if (queryString) {
323   - return this.url + '?' + queryString;
  335 + var bindingChar = this.url.indexOf('?') >= 0 ? '&' : '?';
  336 + return this.url + bindingChar + queryString;
324 337 }
325 338  
326 339 return this.url;
... ... @@ -374,7 +387,8 @@ element.
374 387 body: this.body,
375 388 async: !this.sync,
376 389 handleAs: this.handleAs,
377   - withCredentials: this.withCredentials
  390 + withCredentials: this.withCredentials,
  391 + timeout: this.timeout
378 392 };
379 393 },
380 394  
... ...
bower_components/iron-ajax/iron-request.html 100755 → 100644
... ... @@ -33,9 +33,7 @@ iron-request can be used to perform XMLHttpRequests.
33 33 * A reference to the XMLHttpRequest instance used to generate the
34 34 * network request.
35 35 *
36   - * @attribute xhr
37   - * @type XMLHttpRequest
38   - * @default `new XMLHttpRequest`
  36 + * @type {XMLHttpRequest}
39 37 */
40 38 xhr: {
41 39 type: Object,
... ... @@ -50,7 +48,6 @@ iron-request can be used to perform XMLHttpRequests.
50 48 * A reference to the parsed response body, if the `xhr` has completely
51 49 * resolved.
52 50 *
53   - * @attribute response
54 51 * @type {*}
55 52 * @default null
56 53 */
... ... @@ -65,9 +62,6 @@ iron-request can be used to perform XMLHttpRequests.
65 62  
66 63 /**
67 64 * A reference to the status code, if the `xhr` has completely resolved.
68   - *
69   - * @attribute status
70   - * @default 0
71 65 */
72 66 status: {
73 67 type: Number,
... ... @@ -78,9 +72,6 @@ iron-request can be used to perform XMLHttpRequests.
78 72  
79 73 /**
80 74 * A reference to the status text, if the `xhr` has completely resolved.
81   - *
82   - * @attribute statusText
83   - * @default ""
84 75 */
85 76 statusText: {
86 77 type: String,
... ... @@ -93,9 +84,7 @@ iron-request can be used to perform XMLHttpRequests.
93 84 * A promise that resolves when the `xhr` response comes back, or rejects
94 85 * if there is an error before the `xhr` completes.
95 86 *
96   - * @attribute completes
97   - * @type Promise
98   - * @default `new Promise`
  87 + * @type {Promise}
99 88 */
100 89 completes: {
101 90 type: Object,
... ... @@ -113,8 +102,6 @@ iron-request can be used to perform XMLHttpRequests.
113 102 * An object that contains progress information emitted by the XHR if
114 103 * available.
115 104 *
116   - * @attribute progress
117   - * @type Object
118 105 * @default {}
119 106 */
120 107 progress: {
... ... @@ -128,28 +115,50 @@ iron-request can be used to perform XMLHttpRequests.
128 115  
129 116 /**
130 117 * Aborted will be true if an abort of the request is attempted.
131   - *
132   - * @attribute aborted
133   - * @type boolean
134   - * @default false
135 118 */
136 119 aborted: {
137 120 type: Boolean,
138 121 notify: true,
139 122 readOnly: true,
140 123 value: false,
  124 + },
  125 +
  126 + /**
  127 + * Errored will be true if the browser fired an error event from the
  128 + * XHR object (mainly network errors).
  129 + */
  130 + errored: {
  131 + type: Boolean,
  132 + notify: true,
  133 + readOnly: true,
  134 + value: false
  135 + },
  136 +
  137 + /**
  138 + * TimedOut will be true if the XHR threw a timeout event.
  139 + */
  140 + timedOut: {
  141 + type: Boolean,
  142 + notify: true,
  143 + readOnly: true,
  144 + value: false
141 145 }
142 146 },
143 147  
144 148 /**
145   - * Succeeded is true if the request succeeded. The request succeeded if the
146   - * status code is greater-than-or-equal-to 200, and less-than 300. Also,
147   - * the status code 0 is accepted as a success even though the outcome may
148   - * be ambiguous.
  149 + * Succeeded is true if the request succeeded. The request succeeded if it
  150 + * loaded without error, wasn't aborted, and the status code is ≥ 200, and
  151 + * < 300, or if the status code is 0.
  152 + *
  153 + * The status code 0 is accepted as a success because some schemes - e.g.
  154 + * file:// - don't provide status codes.
149 155 *
150 156 * @return {boolean}
151 157 */
152 158 get succeeded() {
  159 + if (this.errored || this.aborted || this.timedOut) {
  160 + return false;
  161 + }
153 162 var status = this.xhr.status || 0;
154 163  
155 164 // Note: if we are using the file:// protocol, the status code will be 0
... ... @@ -177,6 +186,7 @@ iron-request can be used to perform XMLHttpRequests.
177 186 * headers HTTP request headers.
178 187 * handleAs The response type. Default is 'text'.
179 188 * withCredentials Whether or not to send credentials on the request. Default is false.
  189 + * timeout: (Number|undefined)
180 190 * @return {Promise}
181 191 */
182 192 send: function (options) {
... ... @@ -186,20 +196,6 @@ iron-request can be used to perform XMLHttpRequests.
186 196 return null;
187 197 }
188 198  
189   - xhr.addEventListener('readystatechange', function () {
190   - if (xhr.readyState === 4 && !this.aborted) {
191   - this._updateStatus();
192   -
193   - if (!this.succeeded) {
194   - this.rejectCompletes(new Error('The request failed with status code: ' + this.xhr.status));
195   - return;
196   - }
197   -
198   - this._setResponse(this.parseResponse());
199   - this.resolveCompletes(this);
200   - }
201   - }.bind(this));
202   -
203 199 xhr.addEventListener('progress', function (progress) {
204 200 this._setProgress({
205 201 lengthComputable: progress.lengthComputable,
... ... @@ -209,6 +205,13 @@ iron-request can be used to perform XMLHttpRequests.
209 205 }.bind(this))
210 206  
211 207 xhr.addEventListener('error', function (error) {
  208 + this._setErrored(true);
  209 + this._updateStatus();
  210 + this.rejectCompletes(error);
  211 + }.bind(this));
  212 +
  213 + xhr.addEventListener('timeout', function (error) {
  214 + this._setTimedOut(true);
212 215 this._updateStatus();
213 216 this.rejectCompletes(error);
214 217 }.bind(this));
... ... @@ -218,6 +221,20 @@ iron-request can be used to perform XMLHttpRequests.
218 221 this.rejectCompletes(new Error('Request aborted.'));
219 222 }.bind(this));
220 223  
  224 + // Called after all of the above.
  225 + xhr.addEventListener('loadend', function () {
  226 + this._updateStatus();
  227 +
  228 + if (!this.succeeded) {
  229 + this.rejectCompletes(new Error('The request failed with status code: ' + this.xhr.status));
  230 + return;
  231 + }
  232 +
  233 + this._setResponse(this.parseResponse());
  234 + this.resolveCompletes(this);
  235 + }.bind(this));
  236 +
  237 + this.url = options.url;
221 238 xhr.open(
222 239 options.method || 'GET',
223 240 options.url,
... ... @@ -241,8 +258,11 @@ iron-request can be used to perform XMLHttpRequests.
241 258  
242 259 // In IE, `xhr.responseType` is an empty string when the response
243 260 // returns. Hence, caching it as `xhr._responseType`.
244   - xhr.responseType = xhr._responseType = (options.handleAs || 'text');
  261 + if (options.async !== false) {
  262 + xhr.responseType = xhr._responseType = (options.handleAs || 'text');
  263 + }
245 264 xhr.withCredentials = !!options.withCredentials;
  265 + xhr.timeout = options.timeout;
246 266  
247 267  
248 268  
... ... @@ -264,29 +284,25 @@ iron-request can be used to perform XMLHttpRequests.
264 284 */
265 285 parseResponse: function () {
266 286 var xhr = this.xhr;
267   - var responseType = this.xhr.responseType ||
268   - this.xhr._responseType;
269   - // If we don't have a natural `xhr.responseType`, we prefer parsing
270   - // `xhr.responseText` over returning `xhr.response`..
  287 + var responseType = xhr.responseType || xhr._responseType;
271 288 var preferResponseText = !this.xhr.responseType;
272 289  
273 290 try {
274 291 switch (responseType) {
275 292 case 'json':
276   - // If xhr.response is undefined, responseType `json` may
277   - // not be supported.
  293 + // If the xhr object doesn't have a natural `xhr.responseType`,
  294 + // we can assume that the browser hasn't parsed the response for us,
  295 + // and so parsing is our responsibility. Likewise if response is
  296 + // undefined, as there's no way to encode undefined in JSON.
278 297 if (preferResponseText || xhr.response === undefined) {
279   - // If accessing `xhr.responseText` throws, responseType `json`
280   - // is supported and the result is rightly `undefined`.
  298 + // Try to emulate the JSON section of the response body section of
  299 + // the spec: https://xhr.spec.whatwg.org/#response-body
  300 + // That is to say, we try to parse as JSON, but if anything goes
  301 + // wrong return null.
281 302 try {
282   - /** @suppress {suspiciousCode} */ xhr.responseText;
283   - } catch (e) {
284   - return xhr.response;
285   - }
286   -
287   - // Otherwise, attempt to parse `xhr.responseText` as JSON.
288   - if (xhr.responseText) {
289   - return JSON.parse(xhr.responseText);
  303 + return JSON.parse(xhr.responseText);;
  304 + } catch (_) {
  305 + return null;
290 306 }
291 307 }
292 308  
... ...
bower_components/iron-ajax/test/index.html 100755 → 100644
bower_components/iron-ajax/test/iron-ajax.html 100755 → 100644
... ... @@ -66,7 +66,13 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
66 66 <iron-ajax method="POST" url="http://httpbin.org/post"></iron-ajax>
67 67 </template>
68 68 </test-fixture>
  69 + <test-fixture id="Delay">
  70 + <template>
  71 + <iron-ajax url="http://httpbin.org/delay/1"></iron-ajax>
  72 + </template>
  73 + </test-fixture>
69 74 <script>
  75 + 'use strict';
70 76 suite('<iron-ajax>', function () {
71 77 var responseHeaders = {
72 78 json: { 'Content-Type': 'application/json' },
... ... @@ -126,6 +132,16 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
126 132 ]
127 133 );
128 134  
  135 + server.respondWith(
  136 + 'GET',
  137 + '/responds_to_get_with_502_error_json',
  138 + [
  139 + 502,
  140 + responseHeaders.json,
  141 + '{"message": "an error has occurred"}'
  142 + ]
  143 + );
  144 +
129 145 ajax = fixture('TrivialGet');
130 146 });
131 147  
... ... @@ -203,6 +219,24 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
203 219 expect(ajax.generateRequest()).to.be.instanceOf(IronRequest);
204 220 });
205 221  
  222 + test('correctly adds params to a URL that already has some', function() {
  223 + ajax.url += '?a=b';
  224 + ajax.params = {'c': 'd'};
  225 + expect(ajax.requestUrl).to.be.equal('/responds_to_get_with_json?a=b&c=d')
  226 + })
  227 +
  228 + test('encodes params properly', function() {
  229 + ajax.params = {'a b,c': 'd e f'};
  230 +
  231 + expect(ajax.queryString).to.be.equal('a%20b%2Cc=d%20e%20f');
  232 + });
  233 +
  234 + test('encodes array params properly', function() {
  235 + ajax.params = {'a b': ['c','d e', 'f']};
  236 +
  237 + expect(ajax.queryString).to.be.equal('a%20b=c&a%20b=d%20e&a%20b=f');
  238 + });
  239 +
206 240 test('reflects the loading state in the `loading` property', function() {
207 241 var request = ajax.generateRequest();
208 242  
... ... @@ -363,18 +397,18 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
363 397 ajax.headers = { 'X-Foo': 'Bar' };
364 398 });
365 399 });
366   -
  400 +
367 401 test('automatically generates new request when a sub-property of params is changed', function(done) {
368 402 ajax.addEventListener('request', function() {
369 403 server.respond();
370 404 });
371   -
  405 +
372 406 ajax.params = { foo: 'bar' };
373 407 ajax.addEventListener('response', function() {
374 408 ajax.addEventListener('request', function() {
375 409 done();
376 410 });
377   -
  411 +
378 412 ajax.set('params.foo', 'xyz');
379 413 });
380 414 });
... ... @@ -565,7 +599,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
565 599  
566 600 suite('when a request fails', function() {
567 601 test('we give an error with useful details', function() {
568   - ajax.url = '/responds_to_get_with_text';
  602 + ajax.url = '/responds_to_get_with_502_error_json';
569 603 ajax.handleAs = 'json';
570 604 var eventFired = false;
571 605 ajax.addEventListener('error', function(event) {
... ... @@ -573,13 +607,42 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
573 607 expect(event.detail.error).to.be.okay;
574 608 eventFired = true;
575 609 });
576   - var promise = ajax.generateRequest().completes.then(function() {
  610 + var request = ajax.generateRequest();
  611 + var promise = request.completes.then(function() {
577 612 throw new Error('Expected the request to fail!');
578 613 }, function(error) {
579 614 expect(error).to.be.instanceof(Error);
  615 + expect(request.succeeded).to.be.eq(false);
580 616 return timePasses(100);
581 617 }).then(function() {
582 618 expect(eventFired).to.be.eq(true);
  619 + expect(ajax.lastError).to.not.be.eq(null);
  620 + });
  621 +
  622 + server.respond();
  623 +
  624 + return promise;
  625 + });
  626 +
  627 + test('we give a useful error even when the domain doesn\'t resolve', function() {
  628 + ajax.url = 'http://nonexistant.example.com/';
  629 + server.restore();
  630 + var eventFired = false;
  631 + ajax.addEventListener('error', function(event) {
  632 + expect(event.detail.request).to.be.okay;
  633 + expect(event.detail.error).to.be.okay;
  634 + eventFired = true;
  635 + });
  636 + var request = ajax.generateRequest();
  637 + var promise = request.completes.then(function() {
  638 + throw new Error('Expected the request to fail!');
  639 + }, function(error) {
  640 + expect(request.succeeded).to.be.eq(false);
  641 + expect(error).to.not.be.eq(null);
  642 + return timePasses(100);
  643 + }).then(function() {
  644 + expect(eventFired).to.be.eq(true);
  645 + expect(ajax.lastError).to.not.be.eq(null);
583 646 });
584 647  
585 648 server.respond();
... ... @@ -668,6 +731,40 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
668 731 });
669 732 });
670 733 });
  734 +
  735 + suite('when setting timeout', function() {
  736 + setup(function() {
  737 + server.restore();
  738 + });
  739 +
  740 + test('it is present in the request xhr object', function () {
  741 + ajax.url = '/responds_to_get_with_json';
  742 + ajax.timeout = 5000; // 5 Seconds
  743 +
  744 + request = ajax.generateRequest();
  745 + expect(request.xhr.timeout).to.be.equal(5000); // 5 Seconds
  746 + });
  747 +
  748 + test('it fails once that timeout is reached', function () {
  749 + var ajax = fixture('Delay');
  750 + ajax.timeout = 1; // 1 Millisecond
  751 +
  752 + request = ajax.generateRequest();
  753 + return request.completes.then(function () {
  754 + throw new Error('Expected the request to throw an error.');
  755 + }, function() {
  756 + expect(request.succeeded).to.be.equal(false);
  757 + expect(request.xhr.status).to.be.equal(0);
  758 + expect(request.timedOut).to.be.equal(true);
  759 + return timePasses(1);
  760 + }).then(function() {
  761 + expect(ajax.loading).to.be.equal(false);
  762 + expect(ajax.lastResponse).to.be.equal(null);
  763 + expect(ajax.lastError).to.not.be.equal(null);
  764 + });
  765 + });
  766 + });
  767 +
671 768 });
672 769 </script>
673 770  
... ...
bower_components/iron-ajax/test/iron-request.html 100755 → 100644
... ... @@ -109,6 +109,18 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
109 109 });
110 110 });
111 111  
  112 + test('default responseType of text is not applied, when async is false', function () {
  113 + var options = Object.create(successfulRequestOptions);
  114 + options.async = false;
  115 +
  116 + request.send(options);
  117 + server.respond();
  118 +
  119 + return request.completes.then(function() {
  120 + expect(request.xhr.responseType).to.be.empty;
  121 + });
  122 + });
  123 +
112 124 test('responseType can be configured via handleAs option', function () {
113 125 var options = Object.create(successfulRequestOptions);
114 126 options.handleAs = 'json';
... ... @@ -121,6 +133,19 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
121 133 });
122 134 });
123 135  
  136 + test('responseType cannot be configured via handleAs option, when async is false', function () {
  137 + var options = Object.create(successfulRequestOptions);
  138 + options.handleAs = 'json';
  139 + options.async = false;
  140 +
  141 + request.send(options);
  142 + server.respond();
  143 +
  144 + return request.completes.then(function() {
  145 + expect(request.response).to.be.a('string');
  146 + });
  147 + });
  148 +
124 149 });
125 150  
126 151 suite('special cases', function() {
... ...
bower_components/iron-autogrow-textarea/.bower.json 100755 → 100644
1 1 {
2 2 "name": "iron-autogrow-textarea",
3   - "version": "1.0.6",
  3 + "version": "1.0.7",
4 4 "description": "A textarea element that automatically grows with input",
5 5 "authors": [
6 6 "The Polymer Authors"
... ... @@ -37,11 +37,11 @@
37 37 "paper-styles": "PolymerElements/paper-styles#^1.0.0",
38 38 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
39 39 },
40   - "_release": "1.0.6",
  40 + "_release": "1.0.7",
41 41 "_resolution": {
42 42 "type": "version",
43   - "tag": "v1.0.6",
44   - "commit": "e0465d41019cf03827f4820a254ce80e56266e99"
  43 + "tag": "v1.0.7",
  44 + "commit": "f31131a9c45af7845780f94ec7e69816929ac6cc"
45 45 },
46 46 "_source": "git://github.com/PolymerElements/iron-autogrow-textarea.git",
47 47 "_target": "^1.0.0",
... ...
bower_components/iron-autogrow-textarea/.gitignore 100755 → 100644
bower_components/iron-autogrow-textarea/README.md 100755 → 100644
... ... @@ -9,4 +9,4 @@ Example:
9 9 <iron-autogrow-textarea></iron-autogrow-textarea>
10 10  
11 11 Because the `textarea`'s `value` property is not observable, you should use
12 12 -this element's `bind-value` instead for imperative updates.
  13 +this element's `bind-value` instead for imperative updates.
13 14 \ No newline at end of file
... ...
bower_components/iron-autogrow-textarea/bower.json 100755 → 100644
1 1 {
2 2 "name": "iron-autogrow-textarea",
3   - "version": "1.0.6",
  3 + "version": "1.0.7",
4 4 "description": "A textarea element that automatically grows with input",
5 5 "authors": [
6 6 "The Polymer Authors"
... ...
bower_components/iron-autogrow-textarea/demo/index.html 100755 → 100644
bower_components/iron-autogrow-textarea/index.html 100755 → 100644
bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html 100755 → 100644
... ... @@ -26,6 +26,12 @@ Example:
26 26 Because the `textarea`'s `value` property is not observable, you should use
27 27 this element's `bind-value` instead for imperative updates.
28 28  
  29 +### Styling
  30 +The following custom properties and mixins are available for styling:
  31 +Custom property | Description | Default
  32 +----------------|-------------|----------
  33 +`--iron-autogrow-textarea` | Mixin applied to the textarea | `{}`
  34 +
29 35 @group Iron Elements
30 36 @hero hero.svg
31 37 @demo demo/index.html
... ... @@ -62,6 +68,7 @@ this element&#39;s `bind-value` instead for imperative updates.
62 68 font-size: inherit;
63 69 font-family: inherit;
64 70 line-height: inherit;
  71 + @apply(--iron-autogrow-textarea);
65 72 }
66 73  
67 74 ::content textarea:invalid {
... ... @@ -82,6 +89,7 @@ this element&#39;s `bind-value` instead for imperative updates.
82 89 placeholder$="[[placeholder]]"
83 90 readonly$="[[readonly]]"
84 91 required$="[[required]]"
  92 + disabled$="[[disabled]]"
85 93 rows$="[[rows]]"
86 94 maxlength$="[[maxlength]]"></textarea>
87 95 </div>
... ... @@ -278,7 +286,14 @@ this element&#39;s `bind-value` instead for imperative updates.
278 286 return;
279 287 }
280 288  
281   - textarea.value = this.bindValue;
  289 + // If the bindValue changed manually, then we need to also update
  290 + // the underlying textarea's value. Otherwise this change was probably
  291 + // generated from the _onInput handler, and the two values are already
  292 + // the same.
  293 + if (textarea.value !== this.bindValue) {
  294 + textarea.value = !(this.bindValue || this.bindValue === 0) ? '' : this.bindValue;
  295 + }
  296 +
282 297 this.$.mirror.innerHTML = this._valueForMirror();
283 298 // manually notify because we don't want to notify until after setting value
284 299 this.fire('bind-value-changed', {value: this.bindValue});
... ...
bower_components/iron-autogrow-textarea/test/basic.html 100755 → 100644
... ... @@ -88,6 +88,19 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
88 88 assert.isTrue(finalHeight < initialHeight);
89 89 });
90 90  
  91 + test('an undefined bindValue is the empty string', function() {
  92 + var autogrow = fixture('basic');
  93 + var initialHeight = autogrow.offsetHeight;
  94 +
  95 + autogrow.bindValue = 'batman\nand\nrobin';
  96 + var finalHeight = autogrow.offsetHeight;
  97 + assert.isTrue(finalHeight > initialHeight);
  98 +
  99 + autogrow.bindValue = undefined;
  100 + assert.equal(autogrow.offsetHeight, initialHeight);
  101 + assert.equal(autogrow.textarea.value, '');
  102 + });
  103 +
91 104 test('textarea selection works', function() {
92 105 var autogrow = fixture('basic');
93 106 var textarea = autogrow.textarea;
... ...
bower_components/iron-autogrow-textarea/test/index.html 100755 → 100644
bower_components/iron-behaviors/.bower.json 100755 → 100644
1 1 {
2 2 "name": "iron-behaviors",
3   - "version": "1.0.8",
  3 + "version": "1.0.9",
4 4 "description": "Provides a set of behaviors for the iron elements",
5 5 "private": true,
6 6 "authors": [
... ... @@ -28,11 +28,11 @@
28 28 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
29 29 },
30 30 "homepage": "https://github.com/PolymerElements/iron-behaviors",
31   - "_release": "1.0.8",
  31 + "_release": "1.0.9",
32 32 "_resolution": {
33 33 "type": "version",
34   - "tag": "v1.0.8",
35   - "commit": "663ad706b43989f4961d945b8116cf4db346532f"
  34 + "tag": "v1.0.9",
  35 + "commit": "4b8cab62a4916cc4b1dbd262cbb7eb1eec624b6f"
36 36 },
37 37 "_source": "git://github.com/PolymerElements/iron-behaviors.git",
38 38 "_target": "^1.0.0",
... ...
bower_components/iron-behaviors/.gitignore 100755 → 100644
bower_components/iron-behaviors/README.md 100755 → 100644
bower_components/iron-behaviors/bower.json 100755 → 100644
1 1 {
2 2 "name": "iron-behaviors",
3   - "version": "1.0.8",
  3 + "version": "1.0.9",
4 4 "description": "Provides a set of behaviors for the iron elements",
5 5 "private": true,
6 6 "authors": [
... ...
bower_components/iron-behaviors/demo/index.html 100755 → 100644
bower_components/iron-behaviors/demo/simple-button.html 100755 → 100644
bower_components/iron-behaviors/index.html 100755 → 100644
bower_components/iron-behaviors/iron-button-state.html 100755 → 100644
... ... @@ -125,33 +125,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
125 125 }
126 126 },
127 127  
128   - _eventSourceIsPrimaryInput: function(event) {
129   - event = event.detail.sourceEvent || event;
130   -
131   - // Always true for non-mouse events....
132   - if (!this._mouseEventRe.test(event.type)) {
133   - return true;
134   - }
135   -
136   - // http://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons
137   - if ('buttons' in event) {
138   - return event.buttons === 1;
139   - }
140   -
141   - // http://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which
142   - if (typeof event.which === 'number') {
143   - return event.which < 2;
144   - }
145   -
146   - // http://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button
147   - return event.button < 1;
148   - },
149   -
150 128 _downHandler: function(event) {
151   - if (!this._eventSourceIsPrimaryInput(event)) {
152   - return;
153   - }
154   -
155 129 this._setPointerDown(true);
156 130 this._setPressed(true);
157 131 this._setReceivedFocusFromKeyboard(false);
... ...
bower_components/iron-behaviors/iron-control-state.html 100755 → 100644
bower_components/iron-behaviors/test/active-state.html 100755 → 100644
... ... @@ -41,20 +41,18 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
41 41 activeTarget = fixture('TrivialActiveState');
42 42 });
43 43  
44   - suite('non-primary pointer input source', function() {
45   - test('does not cause state to change', function() {
46   - var rightClickMouseEvent = new CustomEvent('mousedown');
47   - rightClickMouseEvent.buttons = 2;
48   - activeTarget.dispatchEvent(rightClickMouseEvent);
49   - expect(activeTarget.pressed).to.be.equal(false);
50   - });
51   - });
52   -
53 44 suite('active state with toggles attribute', function() {
54 45 setup(function() {
55 46 activeTarget = fixture('ToggleActiveState');
56 47 });
57 48  
  49 + suite('when down', function() {
  50 + test('is pressed', function() {
  51 + MockInteractions.down(activeTarget);
  52 + expect(activeTarget.hasAttribute('pressed')).to.be.eql(true);
  53 + });
  54 + });
  55 +
58 56 suite('when clicked', function() {
59 57 test('is activated', function(done) {
60 58 MockInteractions.downAndUp(activeTarget, function() {
... ...
bower_components/iron-behaviors/test/disabled-state.html 100755 → 100644
bower_components/iron-behaviors/test/focused-state.html 100755 → 100644
bower_components/iron-behaviors/test/index.html 100755 → 100644
bower_components/iron-behaviors/test/test-elements.html 100755 → 100644
bower_components/iron-collapse/.bower.json 100755 → 100644
1 1 {
2 2 "name": "iron-collapse",
3   - "version": "1.0.3",
  3 + "version": "1.0.4",
4 4 "description": "Provides a collapsable container",
5 5 "authors": [
6 6 "The Polymer Authors"
... ... @@ -28,11 +28,11 @@
28 28 "paper-styles": "PolymerElements/paper-styles#^1.0.0",
29 29 "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
30 30 },
31   - "_release": "1.0.3",
  31 + "_release": "1.0.4",
32 32 "_resolution": {
33 33 "type": "version",
34   - "tag": "v1.0.3",
35   - "commit": "08716fe08adec031ecbcfffd1811d27fea2f82ad"
  34 + "tag": "v1.0.4",
  35 + "commit": "10cd9980f7198b39bec7aa5bb7f9c7c6357bb467"
36 36 },
37 37 "_source": "git://github.com/PolymerElements/iron-collapse.git",
38 38 "_target": "^1.0.0",
... ...
bower_components/iron-collapse/.gitignore 100755 → 100644
bower_components/iron-collapse/README.md 100755 → 100644
bower_components/iron-collapse/bower.json 100755 → 100644
1 1 {
2 2 "name": "iron-collapse",
3   - "version": "1.0.3",
  3 + "version": "1.0.4",
4 4 "description": "Provides a collapsable container",
5 5 "authors": [
6 6 "The Polymer Authors"
... ...
bower_components/iron-collapse/demo/index.html 100755 → 100644
... ... @@ -48,27 +48,43 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
48 48  
49 49 </head>
50 50 <body unresolved>
  51 + <template is="dom-bind">
  52 +
  53 + <button class="heading" aria-expanded$="[[isExpanded(opened1)]]" aria-controls="collapse1" onclick="toggle('#collapse1')">Collapse #1</button>
51 54  
52   - <button class="heading" onclick="document.querySelector('#collapse1').toggle();">Collapse #1</button>
53   - <iron-collapse id="collapse1">
  55 + <iron-collapse id="collapse1" tabindex="0" opened="{{opened1}}">
54 56 <div class="content">
55 57 <div>Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea, id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum eu tempor populo, graece sententiae constituam vim ex. Cu torquatos reprimique neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus. Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea, id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum eu tempor populo, graece sententiae constituam vim ex. Cu torquatos reprimique neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus.</div>
56 58 </div>
57 59 </iron-collapse>
58 60  
59   - <button class="heading" onclick="document.querySelector('#collapse2').toggle();">Collapse #2</button>
60   - <iron-collapse id="collapse2">
  61 + <button class="heading" aria-expanded$="[[isExpanded(opened2)]]" aria-controls="collapse2" onclick="toggle('#collapse2')">Collapse #2</button>
  62 +
  63 + <iron-collapse id="collapse2" tabindex="0" opened="{{opened2}}">
61 64 <div class="content">
62 65 <div>Pro saepe pertinax ei, ad pri animal labores suscipiantur. Modus commodo minimum eum te, vero utinam assueverit per eu, zril oportere suscipiantur pri te. Partem percipitur deterruisset ad sea, at eam suas luptatum dissentiunt. No error alienum pro, erant senserit ex mei, pri semper alterum no. Ut habemus menandri vulputate mea. Feugiat verterem ut sed. Dolores maiestatis id per. Pro saepe pertinax ei, ad pri animal labores suscipiantur. Modus commodo minimum eum te, vero utinam assueverit per eu, zril oportere suscipiantur pri te. Partem percipitur deterruisset ad sea, at eam suas luptatum dissentiunt. No error alienum pro, erant senserit ex mei, pri semper alterum no. Ut habemus menandri vulputate mea. Feugiat verterem ut sed. Dolores maiestatis id per.</div>
63 66  
64   - <button class="heading" onclick="document.querySelector('#collapse3').toggle();">Collapse #3</button>
65   - <iron-collapse id="collapse3">
  67 + <button class="heading" aria-expanded$="[[isExpanded(opened3)]]" aria-controls="collapse3" onclick="toggle('#collapse3')">Collapse #3</button>
  68 +
  69 + <iron-collapse id="collapse3" tabindex="0" opened="{{opened3}}">
66 70 <div class="content">
67 71 <div>Iisque perfecto dissentiet cum et, sit ut quot mandamus, ut vim tibique splendide instructior. Id nam odio natum malorum, tibique copiosae expetenda mel ea. Mea melius malorum ut. Ut nec tollit vocent timeam. Facer nonumy numquam id his, munere salutatus consequuntur eum et, eum cotidieque definitionem signiferumque id. Ei oblique graecis patrioque vis, et probatus dignissim inciderint vel. Sed id paulo erroribus, autem semper accusamus in mel. Iisque perfecto dissentiet cum et, sit ut quot mandamus, ut vim tibique splendide instructior. Id nam odio natum malorum, tibique copiosae expetenda mel ea. Mea melius malorum ut. Ut nec tollit vocent timeam. Facer nonumy numquam id his, munere salutatus consequuntur eum et, eum cotidieque definitionem signiferumque id. Ei oblique graecis patrioque vis, et probatus dignissim inciderint vel. Sed id paulo erroribus, autem semper accusamus in mel.</div>
68 72 </div>
69 73 </iron-collapse>
70 74 </div>
71 75 </iron-collapse>
  76 +</template>
  77 +
  78 +<script>
  79 +
  80 + function toggle(selector) {
  81 + document.querySelector(selector).toggle();
  82 + }
  83 +
  84 + document.querySelector('template[is=dom-bind]').isExpanded = function(opened) {
  85 + return String(opened);
  86 + };
72 87  
  88 +</script>
73 89 </body>
74 90 </html>
... ...
bower_components/iron-collapse/index.html 100755 → 100644
bower_components/iron-collapse/iron-collapse.html 100755 → 100644
... ... @@ -162,6 +162,9 @@ and instead put a div inside and style that.
162 162  
163 163 _openedChanged: function() {
164 164 if (this.opened) {
  165 + this.setAttribute('aria-expanded', 'true');
  166 + this.setAttribute('aria-hidden', 'false');
  167 +
165 168 this.toggleClass('iron-collapse-closed', false);
166 169 this.updateSize('auto', false);
167 170 var s = this._calcSize();
... ... @@ -169,16 +172,18 @@ and instead put a div inside and style that.
169 172 // force layout to ensure transition will go
170 173 /** @suppress {suspiciousCode} */ this.offsetHeight;
171 174 this.updateSize(s, true);
172   - }
173   - else {
  175 + // focus the current collapse
  176 + this.focus();
  177 + } else {
  178 + this.setAttribute('aria-expanded', 'false');
  179 + this.setAttribute('aria-hidden', 'true');
  180 +
174 181 this.toggleClass('iron-collapse-opened', false);
175 182 this.updateSize(this._calcSize(), false);
176 183 // force layout to ensure transition will go
177 184 /** @suppress {suspiciousCode} */ this.offsetHeight;
178 185 this.updateSize('0px', true);
179 186 }
180   - this.setAttribute('aria-expanded', this.opened ? 'true' : 'false');
181   -
182 187 },
183 188  
184 189 _transitionEnd: function() {
... ...
bower_components/iron-collapse/test/a11y.html 0 → 100644
  1 +<!doctype html>
  2 +<!--
  3 +Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
  4 +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
  5 +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
  6 +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
  7 +Code distributed by Google as part of the polymer project is also
  8 +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
  9 +-->
  10 +
  11 +<html>
  12 + <head>
  13 +
  14 + <title>iron-collapse-a11y</title>
  15 + <meta charset="utf-8">
  16 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
  17 +
  18 + <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
  19 + <script src="../../web-component-tester/browser.js"></script>
  20 + <script src="../../test-fixture/test-fixture-mocha.js"></script>
  21 +
  22 + <link rel="import" href="../../test-fixture/test-fixture.html">
  23 + <link rel="import" href="../iron-collapse.html">
  24 +
  25 + </head>
  26 + <body>
  27 +
  28 + <test-fixture id="trivialCollapse">
  29 + <template>
  30 + <iron-collapse id="collapse" tabindex="0">
  31 + <div>
  32 + Forma temperiemque cornua sidera dissociata cornua recessit innabilis ligavit: solidumque coeptis nullus caelum sponte phoebe di regat mentisque tanta austro capacius amphitrite sui quin postquam semina fossae liquidum umor galeae coeptis caligine liberioris quin liquidum matutinis invasit posset: flexi glomeravit radiis certis invasit oppida postquam onerosior inclusum dominari opifex terris pace finxit quam aquae nunc sine altae auroram quam habentem homo totidemque scythiam in pondus ensis tegit caecoque poena lapidosos humanas coeperunt poena aetas totidem nec natura aethera locavit caelumque distinxit animalibus phoebe cingebant moderantum porrexerat terrae possedit sua sole diu summaque obliquis melioris orbem
  33 + </div>
  34 + </iron-collapse>
  35 + </template>
  36 + </test-fixture>
  37 +
  38 + <script>
  39 +
  40 + suite('a11y', function() {
  41 + var collapse;
  42 +
  43 + setup(function () {
  44 + collapse = fixture('trivialCollapse');
  45 + });
  46 +
  47 + test('aria attributes', function() {
  48 + assert.equal(collapse.getAttribute('role'), 'group');
  49 + assert.equal(collapse.getAttribute('aria-expanded'), 'false');
  50 + assert.equal(collapse.getAttribute('aria-hidden'), 'true');
  51 + });
  52 +
  53 + test('set opened to true', function() {
  54 + collapse.opened = true;
  55 + assert.equal(collapse.getAttribute('aria-expanded'), 'true');
  56 + assert.equal(collapse.getAttribute('aria-hidden'), 'false');
  57 + });
  58 +
  59 + test('focus the collapse when opened', function() {
  60 + assert.notEqual(document.activeElement, collapse);
  61 + collapse.opened = true;
  62 + assert.equal(document.activeElement, collapse);
  63 + });
  64 +
  65 + a11ySuite('trivialCollapse');
  66 +
  67 + });
  68 +
  69 + </script>
  70 +
  71 + </body>
  72 +</html>
  73 +
... ...
bower_components/iron-collapse/test/basic.html 100755 → 100644
bower_components/iron-collapse/test/horizontal.html 100755 → 100644
bower_components/iron-collapse/test/index.html 100755 → 100644
... ... @@ -22,7 +22,8 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
22 22  
23 23 WCT.loadSuites([
24 24 'basic.html',
25   - 'horizontal.html'
  25 + 'horizontal.html',
  26 + 'a11y.html'
26 27 ]);
27 28  
28 29 </script>
... ...
bower_components/iron-component-page/.bower.json 100755 → 100644
1   -{
2   - "name": "iron-component-page",
3   - "description": "Turns a raw element definition into beautiful documentation",
4   - "authors": [
5   - "The Polymer Authors"
6   - ],
7   - "keywords": [
8   - "web-components",
9   - "polymer",
10   - "docs"
11   - ],
12   - "repository": {
13   - "type": "git",
14   - "url": "git://github.com/PolymerElements/iron-component-page.git"
15   - },
16   - "version": "1.0.5",
17   - "private": true,
18   - "license": "http://polymer.github.io/LICENSE.txt",
19   - "dependencies": {
20   - "polymer": "Polymer/polymer#^1.0.0",
21   - "iron-doc-viewer": "PolymerElements/iron-doc-viewer#^1.0.1",
22   - "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
23   - "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0",
24   - "iron-ajax": "PolymerElements/iron-ajax#^1.0.0",
25   - "hydrolysis": "Polymer/hydrolysis#^1.11",
26   - "paper-header-panel": "PolymerElements/paper-header-panel#^1.0.0",
27   - "iron-icons": "PolymerElements/iron-icons#^1.0.0",
28   - "iron-selector": "PolymerElements/iron-selector#^1.0.0",
29   - "paper-styles": "PolymerElements/paper-styles#^1.0.0"
30   - },
31   - "devDependencies": {
32   - "test-fixture": "PolymerElements/test-fixture#^1.0.0",
33   - "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
34   - "web-component-tester": "*"
35   - },
36   - "homepage": "https://github.com/PolymerElements/iron-component-page",
37   - "_release": "1.0.5",
38   - "_resolution": {
39   - "type": "version",
40   - "tag": "v1.0.5",
41   - "commit": "2bc588824d9ddbbb042ec59f00cd379876137c99"
42   - },
43   - "_source": "git://github.com/PolymerElements/iron-component-page.git",
44   - "_target": "^1.0.0",
45   - "_originalSource": "PolymerElements/iron-component-page"
  1 +{
  2 + "name": "iron-component-page",
  3 + "description": "Turns a raw element definition into beautiful documentation",
  4 + "authors": [
  5 + "The Polymer Authors"
  6 + ],
  7 + "keywords": [
  8 + "web-components",
  9 + "polymer",
  10 + "docs"
  11 + ],
  12 + "repository": {
  13 + "type": "git",
  14 + "url": "git://github.com/PolymerElements/iron-component-page.git"
  15 + },
  16 + "version": "1.0.7",
  17 + "private": true,
  18 + "license": "http://polymer.github.io/LICENSE.txt",
  19 + "dependencies": {
  20 + "polymer": "Polymer/polymer#^1.0.0",
  21 + "iron-doc-viewer": "PolymerElements/iron-doc-viewer#^1.0.1",
  22 + "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
  23 + "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0",
  24 + "iron-ajax": "PolymerElements/iron-ajax#^1.0.0",
  25 + "hydrolysis": "Polymer/hydrolysis#^1.18",
  26 + "paper-header-panel": "PolymerElements/paper-header-panel#^1.0.0",
  27 + "iron-icons": "PolymerElements/iron-icons#^1.0.0",
  28 + "iron-selector": "PolymerElements/iron-selector#^1.0.0",
  29 + "paper-styles": "PolymerElements/paper-styles#^1.0.0"
  30 + },
  31 + "devDependencies": {
  32 + "test-fixture": "PolymerElements/test-fixture#^1.0.0",
  33 + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
  34 + "web-component-tester": "*"
  35 + },
  36 + "homepage": "https://github.com/PolymerElements/iron-component-page",
  37 + "_release": "1.0.7",
  38 + "_resolution": {
  39 + "type": "version",
  40 + "tag": "v1.0.7",
  41 + "commit": "77a463d00fcf0f00a764dd01fd01a6f21bd40745"
  42 + },
  43 + "_source": "git://github.com/PolymerElements/iron-component-page.git",
  44 + "_target": "^1.0.0",
  45 + "_originalSource": "PolymerElements/iron-component-page"
46 46 }
47 47 \ No newline at end of file
... ...
bower_components/iron-component-page/.gitignore 100755 → 100644
1   -bower_components
  1 +bower_components
... ...
bower_components/iron-component-page/README.md 100755 → 100644
1   -iron-component-page
2   -===================
3   -
4   -Loads Polymer element and behavior documentation using
5   -[Hydrolysis](https://github.com/PolymerLabs/hydrolysis) and renders a complete
6   -documentation page including demos (if available).
  1 +iron-component-page
  2 +===================
  3 +
  4 +Loads Polymer element and behavior documentation using
  5 +[Hydrolysis](https://github.com/PolymerLabs/hydrolysis) and renders a complete
  6 +documentation page including demos (if available).
... ...
bower_components/iron-component-page/bower.json 100755 → 100644
1   -{
2   - "name": "iron-component-page",
3   - "description": "Turns a raw element definition into beautiful documentation",
4   - "authors": [
5   - "The Polymer Authors"
6   - ],
7   - "keywords": [
8   - "web-components",
9   - "polymer",
10   - "docs"
11   - ],
12   - "repository": {
13   - "type": "git",
14   - "url": "git://github.com/PolymerElements/iron-component-page.git"
15   - },
16   - "version": "1.0.5",
17   - "private": true,
18   - "license": "http://polymer.github.io/LICENSE.txt",
19   - "dependencies": {
20   - "polymer": "Polymer/polymer#^1.0.0",
21   - "iron-doc-viewer": "PolymerElements/iron-doc-viewer#^1.0.1",
22   - "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
23   - "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0",
24   - "iron-ajax": "PolymerElements/iron-ajax#^1.0.0",
25   - "hydrolysis": "Polymer/hydrolysis#^1.11",
26   - "paper-header-panel": "PolymerElements/paper-header-panel#^1.0.0",
27   - "iron-icons": "PolymerElements/iron-icons#^1.0.0",
28   - "iron-selector": "PolymerElements/iron-selector#^1.0.0",
29   - "paper-styles": "PolymerElements/paper-styles#^1.0.0"
30   - },
31   - "devDependencies": {
32   - "test-fixture": "PolymerElements/test-fixture#^1.0.0",
33   - "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
34   - "web-component-tester": "*"
35   - }
36   -}
  1 +{
  2 + "name": "iron-component-page",
  3 + "description": "Turns a raw element definition into beautiful documentation",
  4 + "authors": [
  5 + "The Polymer Authors"
  6 + ],
  7 + "keywords": [
  8 + "web-components",
  9 + "polymer",
  10 + "docs"
  11 + ],
  12 + "repository": {
  13 + "type": "git",
  14 + "url": "git://github.com/PolymerElements/iron-component-page.git"
  15 + },
  16 + "version": "1.0.7",
  17 + "private": true,
  18 + "license": "http://polymer.github.io/LICENSE.txt",
  19 + "dependencies": {
  20 + "polymer": "Polymer/polymer#^1.0.0",
  21 + "iron-doc-viewer": "PolymerElements/iron-doc-viewer#^1.0.1",
  22 + "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
  23 + "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0",
  24 + "iron-ajax": "PolymerElements/iron-ajax#^1.0.0",
  25 + "hydrolysis": "Polymer/hydrolysis#^1.18",
  26 + "paper-header-panel": "PolymerElements/paper-header-panel#^1.0.0",
  27 + "iron-icons": "PolymerElements/iron-icons#^1.0.0",
  28 + "iron-selector": "PolymerElements/iron-selector#^1.0.0",
  29 + "paper-styles": "PolymerElements/paper-styles#^1.0.0"
  30 + },
  31 + "devDependencies": {
  32 + "test-fixture": "PolymerElements/test-fixture#^1.0.0",
  33 + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
  34 + "web-component-tester": "*"
  35 + }
  36 +}
... ...
bower_components/iron-component-page/demo/index.html 100755 → 100644
1   -<!doctype html>
2   -<!--
3   -@license
4   -Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
5   -This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
6   -The complete set of authors may be found at http://polymer.github.io/AUTHORS
7   -The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
8   -Code distributed by Google as part of the polymer project is also
9   -subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
10   --->
11   -<html>
12   -<head>
13   -
14   - <meta charset="utf-8">
15   - <meta name="viewport" content="width=device-width, initial-scale=1.0">
16   -
17   - <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
18   - <link rel="import" href="../../iron-component-page/iron-component-page.html">
19   -
20   -</head>
21   -<body>
22   -
23   - <h2>iron-component-page</h2>
24   - <iron-component-page doc-src="json-descriptor.json"></iron-component-page>
25   -
26   -</body>
27   -</html>
  1 +<!doctype html>
  2 +<!--
  3 +@license
  4 +Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
  5 +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
  6 +The complete set of authors may be found at http://polymer.github.io/AUTHORS
  7 +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
  8 +Code distributed by Google as part of the polymer project is also
  9 +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
  10 +-->
  11 +<html>
  12 +<head>
  13 +
  14 + <meta charset="utf-8">
  15 + <meta name="viewport" content="width=device-width, initial-scale=1.0">
  16 +
  17 + <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
  18 + <link rel="import" href="../../iron-component-page/iron-component-page.html">
  19 +
  20 +</head>
  21 +<body>
  22 +
  23 + <h2>iron-component-page</h2>
  24 + <iron-component-page doc-src="json-descriptor.json"></iron-component-page>
  25 +
  26 +</body>
  27 +</html>
... ...