react-resize-detector-context 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +208 -69
  2. package/dist/index.js +1 -1
  3. package/package.json +3 -5
package/README.md CHANGED
@@ -1,31 +1,50 @@
1
-
2
- # React Resize Detector Context
1
+ # ⚛️ React Resize Detector Context
3
2
 
4
3
  ![Demo GIF](/doc/assets/demo.gif)
5
4
 
6
- A lightweight React context that leverages [react-resize-detector](https://github.com/maslianok/react-resize-detector) to detect the current breakpoint based on an element's width. It provides utility functions and helper components to conditionally render content based on responsive breakpoints.
5
+ A lightweight React context that leverages [react-resize-detector](https://github.com/maslianok/react-resize-detector) to dynamically detect the
6
+ current breakpoint based on an element's width. It provides utility functions and helper components to conditionally render content based on
7
+ responsive breakpoints – all fully typed in TypeScript for excellent IDE support. 😎
7
8
 
8
9
  ---
9
10
 
10
- ## Features
11
+ ## Table of Contents 📚
12
+
13
+ - [Features](#features)
14
+ - [Requirements](#requirements)
15
+ - [Installation](#installation)
16
+ - [Usage](#usage)
17
+ - [Basic Usage](#basic-usage)
18
+ - [Conditional Rendering with BreakpointConditional](#conditional-rendering-with-breakpointconditional)
19
+ - [Custom Breakpoints Example](#custom-breakpoints-example)
20
+ - [API Documentation](#api-documentation)
21
+ - [BreakpointProvider](#breakpointprovider)
22
+ - [BreakpointConditional](#breakpointconditional)
23
+ - [useBreakpoint Hook](#usebreakpoint-hook)
24
+ - [Available Scripts](#available-scripts)
25
+ - [Contribution Guidelines](#contribution-guidelines)
26
+ - [License](#license)
27
+
28
+ ---
11
29
 
12
- - Dynamically detects the current breakpoint based on element width.
13
- - Supports custom breakpoint names (e.g., "XS", "SM", "MD", "LG", "XL" or any arbitrary names like "Smart", "Mini", etc.).
14
- - Utility functions:
15
- - `isAtLeast(breakpoint)`: Returns `true` if the current breakpoint is greater than or equal to the provided one.
16
- - `isBelow(breakpoint)`: Returns `true` if the current breakpoint is less than the provided one.
17
- - `valueByBreakpoint(mapping)`: Returns a value from the provided mapping based on the current breakpoint.
18
- - Helper component `BreakpointConditional` for conditional rendering.
19
- - Error logging for invalid configurations (e.g. duplicate values, width not set, etc.).
20
- - Fully typed in TypeScript with comprehensive IDE support.
30
+ ## Features
31
+
32
+ - **Responsive Breakpoint Detection:** Dynamically calculates the active breakpoint from an element’s width.
33
+ - **Custom Breakpoints:** Define standard breakpoints like "XS", "SM", "MD", "LG", "XL" or any custom names (e.g. "Smart", "Mini", etc.).
34
+ - **Utility Methods:**
35
+ - `isAtLeast(breakpoint)`: Returns `true` if the active breakpoint is greater than or equal to the specified breakpoint.
36
+ - `isBelow(breakpoint)`: Returns `true` if the active breakpoint is lower than the specified breakpoint.
37
+ - `valueByBreakpoint(mapping)`: Retrieves a value from a mapping object based on the active breakpoint.
38
+ - **Conditional Rendering:** The `BreakpointConditional` component conditionally renders content based on breakpoint conditions.
39
+ - **Full TypeScript Support:** Enjoy robust type definitions and IDE hints for a seamless development experience.
21
40
 
22
41
  ---
23
42
 
24
43
  ## Requirements
25
44
 
26
- - **Node.js**: >= 18.0.0
27
- - **React**: >= 17
28
- - **React-DOM**: >= 17
45
+ - **Node.js:** >= 18.0.0
46
+ - **React:** >= 17
47
+ - **React-DOM:** >= 17
29
48
 
30
49
  ---
31
50
 
@@ -33,8 +52,8 @@ A lightweight React context that leverages [react-resize-detector](https://githu
33
52
 
34
53
  Install via npm:
35
54
 
36
- ```
37
- npm install react-resize-detector-context
55
+ ``` bash
56
+ npm install my-breakpoint-package
38
57
  ```
39
58
 
40
59
  ---
@@ -43,11 +62,12 @@ npm install react-resize-detector-context
43
62
 
44
63
  ### Basic Usage
45
64
 
46
- Wrap your component tree with the `BreakpointProvider` and provide a breakpoint configuration. Then, access the current breakpoint and utility functions via the `useBreakpoint` hook.
65
+ Wrap your component tree with the `BreakpointProvider` and supply your breakpoint configuration. Then, use the `useBreakpoint` hook to access context
66
+ values.
47
67
 
48
68
  ```typescript
49
69
  import React from 'react';
50
- import { BreakpointProvider, useBreakpoint } from 'react-resize-detector-context';
70
+ import { BreakpointProvider, useBreakpoint } from 'my-breakpoint-package';
51
71
 
52
72
  const breakpoints = {
53
73
  XS: 0,
@@ -62,25 +82,25 @@ const ResponsiveComponent = () => {
62
82
  return (
63
83
  <div>
64
84
  <p>Current width: {width}px</p>
65
- <p>Current breakpoint: {breakpoint}</p>
66
- <p>Is at least MD: {isAtLeast('MD') ? '✅' : '❌'}</p>
67
- <p>
68
- Mapping: {valueByBreakpoint({
69
- XS: 'Extra Small',
70
- SM: 'Small',
71
- MD: 'Medium',
72
- LG: 'Large',
73
- XL: 'Extra Large'
74
- })}
75
- </p>
76
- </div>
77
- );
85
+ <p>Active breakpoint: {breakpoint}</p>
86
+ <p>Is at least MD: {isAtLeast('MD') ? '✅' : '❌'}</p>
87
+ <p>
88
+ Mapping: {valueByBreakpoint({
89
+ XS: 'Extra Small',
90
+ SM: 'Small',
91
+ MD: 'Medium',
92
+ LG: 'Large',
93
+ XL: 'Extra Large'
94
+ })}
95
+ </p>
96
+ </div>
97
+ );
78
98
  };
79
99
 
80
100
  const App = () => (
81
101
  <BreakpointProvider breakpoints={breakpoints}>
82
102
  <ResponsiveComponent />
83
- </BreakpointProvider>
103
+ </BreakpointProvider>
84
104
  );
85
105
 
86
106
  export default App;
@@ -90,11 +110,11 @@ export default App;
90
110
 
91
111
  ### Conditional Rendering with BreakpointConditional
92
112
 
93
- Use `BreakpointConditional` to render content only when certain breakpoint conditions are met.
113
+ Render content only when specific breakpoint conditions are met.
94
114
 
95
115
  ```typescript
96
116
  import React from 'react';
97
- import { BreakpointProvider, BreakpointConditional } from 'react-resize-detector-context';
117
+ import { BreakpointProvider, BreakpointConditional } from 'my-breakpoint-package';
98
118
 
99
119
  const breakpoints = {
100
120
  XS: 0,
@@ -107,18 +127,18 @@ const breakpoints = {
107
127
  const ConditionalComponent = () => (
108
128
  <div>
109
129
  <BreakpointConditional isAtLeast="MD">
110
- <p>😊 This content is visible from MD and up.</p>
111
- </BreakpointConditional>
112
- <BreakpointConditional isBelow="LG">
113
- <p>🚀 This content is visible for breakpoints below LG.</p>
114
- </BreakpointConditional>
115
- </div>
130
+ <p>😊 This content is visible from MD and up.</p>
131
+ </BreakpointConditional>
132
+ <BreakpointConditional isBelow="LG">
133
+ <p>🚀 This content is visible for breakpoints below LG.</p>
134
+ </BreakpointConditional>
135
+ </div>
116
136
  );
117
137
 
118
138
  const App = () => (
119
139
  <BreakpointProvider breakpoints={breakpoints}>
120
140
  <ConditionalComponent />
121
- </BreakpointProvider>
141
+ </BreakpointProvider>
122
142
  );
123
143
 
124
144
  export default App;
@@ -128,11 +148,11 @@ export default App;
128
148
 
129
149
  ### Custom Breakpoints Example
130
150
 
131
- You can define your own custom breakpoints with any names. For instance, using car sizes:
151
+ Define your own custom breakpoints for example, using car sizes:
132
152
 
133
153
  ```typescript
134
154
  import React from 'react';
135
- import { BreakpointProvider, useBreakpoint } from 'react-resize-detector-context';
155
+ import { BreakpointProvider, useBreakpoint } from 'my-breakpoint-package';
136
156
 
137
157
  const carBreakpoints = {
138
158
  Smart: 0,
@@ -147,24 +167,116 @@ const CarComponent = () => {
147
167
  return (
148
168
  <div>
149
169
  <p>Current width: {width}px</p>
150
- <p>Current car size: {breakpoint}</p>
151
- <p>
152
- Mapping: {valueByBreakpoint({
153
- Smart: '🚗 Smart',
154
- Mini: '🚙 Mini',
155
- Sedan: '🚘 Sedan',
156
- SUV: '🚐 SUV',
157
- Ram: '🚚 Ram'
158
- })}
159
- </p>
160
- </div>
161
- );
170
+ <p>Active car size: {breakpoint}</p>
171
+ <p>
172
+ Mapping: {valueByBreakpoint({
173
+ Smart: '🚗 Smart',
174
+ Mini: '🚙 Mini',
175
+ Sedan: '🚘 Sedan',
176
+ SUV: '🚐 SUV',
177
+ Ram: '🚚 Ram'
178
+ })}
179
+ </p>
180
+ </div>
181
+ );
182
+ };
183
+
184
+ const App = () => ( <BreakpointProvider breakpoints={carBreakpoints}>
185
+ <CarComponent />
186
+ </BreakpointProvider>
187
+ );
188
+
189
+ export default App;
190
+ ```
191
+
192
+ ---
193
+
194
+ ## API Documentation
195
+
196
+ ### BreakpointProvider
197
+
198
+ The `BreakpointProvider` sets up the responsive context by measuring the width of an element and determining the active breakpoint based on the
199
+ provided configuration.
200
+
201
+ | Property | Type | Description | Default |
202
+ |-------------|-----------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------|
203
+ | breakpoints | `Record<Breakpoint, number>` | An object defining your breakpoints. The keys are the breakpoint names (e.g., "XS", "SM", "MD", etc.), and the values are the minimum widths (in pixels). | **Required** |
204
+ | children | `React.ReactNode` | Child components that consume the breakpoint context. | **Required** |
205
+ | targetRef | `{ current: HTMLElement \| null }` (optional) | A reference to the element whose width is observed. If not provided, an internal `<div>` is rendered to attach the ref. | Internal `<div>` is used |
206
+
207
+ **Notes:**
208
+
209
+ - If the measured width is `undefined` or `0`, an error is logged in the console.
210
+ - If duplicate breakpoint values are detected, a warning is logged.
211
+
212
+ ---
213
+
214
+ ### BreakpointConditional
215
+
216
+ The `BreakpointConditional` component conditionally renders its children based on the active breakpoint.
217
+
218
+ | Property | Type | Description | Default |
219
+ |-----------|-------------------|------------------------------------------------------------------------------------------------------------------|--------------|
220
+ | show | `Breakpoint[]` | An array of breakpoint names. The children are rendered only if the active breakpoint is included in this array. | Not set |
221
+ | isAtLeast | `Breakpoint` | The children are rendered only if the active breakpoint is greater than or equal to this value. | Not set |
222
+ | isBelow | `Breakpoint` | The children are rendered only if the active breakpoint is lower than this value. | Not set |
223
+ | children | `React.ReactNode` | The content to render if the condition is met. | **Required** |
224
+
225
+ *Note:* Multiple conditions can be combined; all specified conditions must be met for the children to render.
226
+
227
+ ---
228
+
229
+ ### useBreakpoint Hook
230
+
231
+ The `useBreakpoint` hook provides access to the responsive context. It returns an object with the following properties and methods:
232
+
233
+ | Property/Method | Type | Description |
234
+ |----------------------------------------------------------------------------------|-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|
235
+ | **width** | `number` | The current width (in pixels) of the observed element. |
236
+ | **breakpoint** | `Breakpoint \| null` | The active breakpoint based on the current width. Returns `null` if no breakpoint is determined or if width is undefined. |
237
+ | **breakpoints** | `Record<Breakpoint, number>` | The breakpoint configuration provided to the `BreakpointProvider`. |
238
+ | **isAtLeast(breakpoint: Breakpoint): boolean** | `(breakpoint: Breakpoint) => boolean` | Returns `true` if the active breakpoint is greater than or equal to the specified breakpoint. |
239
+ | **isBelow(breakpoint: Breakpoint): boolean** | `(breakpoint: Breakpoint) => boolean` | Returns `true` if the active breakpoint is lower than the specified breakpoint. |
240
+ | **valueByBreakpoint<T>(values: Partial<Record<Breakpoint, T>>): T \| undefined** | `<T>(values: Partial<Record<Breakpoint, T>>) => T \| undefined` | Returns a value from the provided mapping based on the active breakpoint. If no value is mapped for the current breakpoint, returns `undefined`. |
241
+
242
+ #### Example Usage of `useBreakpoint`
243
+
244
+ ```typescript
245
+ import React from 'react';
246
+ import { BreakpointProvider, useBreakpoint } from 'my-breakpoint-package';
247
+
248
+ const breakpoints = {
249
+ XS: 0,
250
+ SM: 500,
251
+ MD: 700,
252
+ LG: 900,
253
+ XL: 1100,
254
+ };
255
+
256
+ const ResponsiveComponent = () => {
257
+ const { width, breakpoint, isAtLeast, valueByBreakpoint } = useBreakpoint();
258
+ return (
259
+ <div>
260
+ <p>Current width: {width}px</p>
261
+ <p>Active breakpoint: {breakpoint}</p>
262
+ <p>Is at least MD: {isAtLeast('MD') ? '✅' : '❌'}</p>
263
+ <p>
264
+ Mapping: {valueByBreakpoint({
265
+ XS: 'Extra Small',
266
+ SM: 'Small',
267
+ MD: 'Medium',
268
+ LG: 'Large',
269
+ XL: 'Extra Large',
270
+ })}
271
+ </p>
272
+ </div>
273
+ );
162
274
  };
163
275
 
164
276
  const App = () => (
165
- <BreakpointProvider breakpoints={carBreakpoints}>
166
- <CarComponent />
167
- </BreakpointProvider>
277
+ <BreakpointProvider breakpoints={breakpoints}>
278
+ <ResponsiveComponent />
279
+ </BreakpointProvider>
168
280
  );
169
281
 
170
282
  export default App;
@@ -172,18 +284,21 @@ export default App;
172
284
 
173
285
  ---
174
286
 
175
- ## Available Scripts
287
+ ## Available Scripts 🚀
176
288
 
177
- You can use the following scripts from your command line:
289
+ The following scripts are available in this package:
178
290
 
179
291
  - **`npm run build`**
180
- Builds the package (using [tsup](https://github.com/egoist/tsup)).
292
+ Builds the package using `tsup` (bundles and compiles your source code).
181
293
 
182
294
  - **`npm run dev`**
183
295
  Runs development mode concurrently with build watch, Storybook, and tests.
184
296
 
185
297
  - **`npm run storybook`**
186
- Launches Storybook for interactive component demos on port 6006.
298
+ Launches Storybook on port 6006 for interactive component demos.
299
+
300
+ - **`npm run storybook:build`**
301
+ Builds the Storybook static site.
187
302
 
188
303
  - **`npm run test`**
189
304
  Runs tests using Vitest.
@@ -192,15 +307,39 @@ You can use the following scripts from your command line:
192
307
  Runs tests with coverage.
193
308
 
194
309
  - **`npm run lint`**
195
- Runs biome check with auto-fix.
310
+ Runs biome to check (and optionally fix) your code style.
196
311
 
197
312
  - **`npm run release`**
198
- Builds and triggers the release process.
313
+ Builds the package and triggers the release process.
314
+
315
+ - **`npm run link:self`**
316
+ Creates a global link for local development/testing.
199
317
 
200
318
  ---
201
319
 
202
- ## License
320
+ ## Contribution Guidelines 🤝
321
+
322
+ Contributions are very welcome! If you would like to help improve this package, please follow these guidelines:
323
+
324
+ 1. **Fork the Repository:**
325
+ Fork this repository to your own GitHub account.
203
326
 
204
- This project is licensed under the MIT License.
327
+ 2. **Create a Branch:**
328
+ Create a new branch for your feature or bug fix (e.g., `feature/awesome-improvement`).
329
+
330
+ 3. **Make Your Changes:**
331
+ Ensure that your changes follow the coding style and that all tests pass.
332
+
333
+ 4. **Submit a Pull Request:**
334
+ Once your changes are ready, open a pull request with a clear description of your modifications and the rationale behind them.
335
+
336
+ 5. **Issues:**
337
+ If you find bugs or have suggestions, please open an issue to discuss before starting work on a pull request.
338
+
339
+ Let's build something awesome together! 🚀✨
340
+
341
+ ---
342
+
343
+ ## License
205
344
 
206
- ---
345
+ This project is licensed under the MIT License.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  "use strict";var k=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var R=(e,r)=>{for(var d in r)k(e,d,{get:r[d],enumerable:!0})},T=(e,r,d,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let p of w(r))!C.call(e,p)&&p!==d&&k(e,p,{get:()=>r[p],enumerable:!(t=P(r,p))||t.enumerable});return e};var g=e=>T(k({},"__esModule",{value:!0}),e);var A={};R(A,{BreakpointConditional:()=>L,BreakpointProvider:()=>y,useBreakpoint:()=>h});module.exports=g(A);var s=require("react"),B=require("react-resize-detector"),u=require("react/jsx-runtime"),f=(0,s.createContext)(void 0),y=({breakpoints:e,children:r,targetRef:d})=>{let{width:t,ref:p}=(0,B.useResizeDetector)({targetRef:d}),n=(0,s.useMemo)(()=>Object.entries(e).map(([o,l])=>[o,l]).sort(([,o],[,l])=>o-l),[e]);(0,s.useEffect)(()=>{n.filter(([,l],c)=>n.findIndex(([,m])=>m===l)!==c).length>0&&console.error("BreakpointProvider: Duplicate breakpoint values detected. This may lead to unexpected behavior.")},[n]);let a=(0,s.useMemo)(()=>{if(t===void 0)return null;let o=null;return n.forEach(([l,c])=>{t>=c&&(o=l)}),o},[t,n]);(0,s.useEffect)(()=>{t===void 0?console.error("BreakpointProvider: width is undefined. Ensure the target element is mounted and visible."):t===0&&console.error("BreakpointProvider: width is 0. The target element might be hidden or not mounted correctly.")},[t]),(0,s.useEffect)(()=>{t!==void 0&&t>0&&a===null&&(n.length>0&&t<n[0][1]?console.error(`BreakpointProvider: The current width (${t}px) is less than the smallest breakpoint value (${n[0][1]}px). Consider including a breakpoint with a value of 0 to cover all cases.`):console.error("BreakpointProvider: No breakpoint could be determined from the provided configuration. Check your breakpoints object."))},[t,a,n]);let i=o=>n.findIndex(([l])=>l===o),v=o=>a?i(a)>=i(o):!1,b=o=>a?i(a)<i(o):!1;function x(o){if(a)return o[a]}return(0,u.jsx)(f.Provider,{value:{width:t??0,breakpoint:a,breakpoints:e,isAtLeast:v,isBelow:b,valueByBreakpoint:x},children:d?r:(0,u.jsx)("div",{ref:p,children:r})})},h=()=>{let e=(0,s.useContext)(f);if(!e)throw new Error("useBreakpoint must be used within a BreakpointProvider");return e},L=({show:e,isAtLeast:r,isBelow:d,children:t})=>{let{breakpoint:p,isAtLeast:n,isBelow:a}=h(),i=!0;return e&&p&&(i=i&&e.includes(p)),r&&(i=i&&n(r)),d&&(i=i&&a(d)),i?(0,u.jsx)(u.Fragment,{children:t}):null};0&&(module.exports={BreakpointConditional,BreakpointProvider,useBreakpoint});
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9CcmVha3BvaW50Q29udGV4dC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL0JyZWFrcG9pbnRDb250ZXh0XCI7IiwgImltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZXNpemVEZXRlY3RvciB9IGZyb20gJ3JlYWN0LXJlc2l6ZS1kZXRlY3Rvcic7XG5cbmV4cG9ydCB0eXBlIEJyZWFrcG9pbnQgPSBzdHJpbmc7IC8vIEFsbG93IGFyYml0cmFyeSBicmVha3BvaW50IG5hbWVzXG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWtwb2ludENvbnRleHRUeXBlIHtcbiAgLyoqIEN1cnJlbnQgd2lkdGggb2YgdGhlIG9ic2VydmVkIGVsZW1lbnQgKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgLyoqIEN1cnJlbnRseSBhY3RpdmUgYnJlYWtwb2ludCAqL1xuICBicmVha3BvaW50OiBCcmVha3BvaW50IHwgbnVsbDtcbiAgLyoqIERlZmluZWQgYnJlYWtwb2ludHMsIGUuZy4sIHsgWFM6IDAsIFNNOiA1MDAsIE1EOiA3MDAsIExHOiA5MDAsIFhMOiAxMTAwIH0gKi9cbiAgYnJlYWtwb2ludHM6IFJlY29yZDxCcmVha3BvaW50LCBudW1iZXI+O1xuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHByb3ZpZGVkIG9uZS5cbiAgICogRS5nLjogaXNBdExlYXN0KCdNRCcpIHJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBicmVha3BvaW50IGlzIE1ELCBMRywgb3IgWEwuXG4gICAqL1xuICBpc0F0TGVhc3Q6IChzaXplOiBCcmVha3BvaW50KSA9PiBib29sZWFuO1xuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBpcyBsZXNzIHRoYW4gdGhlIHByb3ZpZGVkIG9uZS5cbiAgICovXG4gIGlzQmVsb3c6IChzaXplOiBCcmVha3BvaW50KSA9PiBib29sZWFuO1xuICAvKipcbiAgICogUmV0dXJucyBhIHZhbHVlIGZyb20gdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIGN1cnJlbnQgYnJlYWtwb2ludC5cbiAgICogRS5nLjogdmFsdWVCeUJyZWFrcG9pbnQoeyBNRDogMywgTEc6IDIgfSkgcmV0dXJucyAzIGZvciBNRCBhbmQgMiBmb3IgTEcuXG4gICAqL1xuICB2YWx1ZUJ5QnJlYWtwb2ludDogPFQ+KHZhbHVlczogUGFydGlhbDxSZWNvcmQ8QnJlYWtwb2ludCwgVD4+KSA9PiBUIHwgdW5kZWZpbmVkO1xufVxuXG5jb25zdCBCcmVha3BvaW50Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8QnJlYWtwb2ludENvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4vKipcbiAqIEluc3RlYWQgb2YgdXNpbmcgUmVhY3QuUmVmT2JqZWN0PEhUTUxFbGVtZW50PiAod2hpY2ggaXMgaW52YXJpYW50KSxcbiAqIHdlIHVzZSBhIHN0cnVjdHVyYWwgdHlwZSB0aGF0IGFjY2VwdHMgYW55IG9iamVjdCB3aXRoIGEgYGN1cnJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbGAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWtwb2ludFByb3ZpZGVyUHJvcHMge1xuICAvKiogRGVmaW5lZCBicmVha3BvaW50cyAqL1xuICBicmVha3BvaW50czogUmVjb3JkPEJyZWFrcG9pbnQsIG51bWJlcj47XG4gIC8qKiBDaGlsZCBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBjb250ZXh0ICovXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIC8qKlxuICAgKiBPcHRpb25hbDogUHJvdmlkZSBhIHJlZiB0byB0aGUgZWxlbWVudCB0byBiZSBvYnNlcnZlZC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbiBpbnRlcm5hbCA8ZGl2IHJlZj17Li4ufT4gd2lsbCBiZSByZW5kZXJlZC5cbiAgICovXG4gIHRhcmdldFJlZj86IHsgY3VycmVudDogSFRNTEVsZW1lbnQgfCBudWxsIH07XG59XG5cbi8qKlxuICogQnJlYWtwb2ludFByb3ZpZGVyIFx1RDgzRFx1REU4MFxuICpcbiAqIFVzZXMgcmVhY3QtcmVzaXplLWRldGVjdG9yIHRvIG1lYXN1cmUgdGhlIHdpZHRoIG9mIGFuIGVsZW1lbnQgYW5kIGRldGVybWluZSB0aGUgY3VycmVudCBicmVha3BvaW50XG4gKiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYnJlYWtwb2ludHMuIEFkZGl0aW9uYWxseSwgaXQgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgKGlzQXRMZWFzdCwgaXNCZWxvdylcbiAqIGFuZCB2YWx1ZUJ5QnJlYWtwb2ludC5cbiAqXG4gKiBcdTI2QTBcdUZFMEYgKipFZGdlIENhc2VzIC8gV2FybmluZ3M6KipcbiAqIC0gSWYgdGhlIG1lYXN1cmVkIHdpZHRoIGlzIHVuZGVmaW5lZCBvciAwLCBhbiBlcnJvciBpcyBsb2dnZWQgaW4gdGhlIGNvbnNvbGUuXG4gKiAtIElmIHRoZSBjdXJyZW50IHdpZHRoIGlzIGxlc3MgdGhhbiB0aGUgc21hbGxlc3QgYnJlYWtwb2ludCAoYW5kIHdpZHRoID4gMCksIGFuIGVycm9yIGlzIGxvZ2dlZC5cbiAqIC0gSWYgZHVwbGljYXRlIGJyZWFrcG9pbnQgdmFsdWVzIGFyZSBkZXRlY3RlZCwgYW4gZXJyb3IgaXMgbG9nZ2VkLlxuICovXG5leHBvcnQgY29uc3QgQnJlYWtwb2ludFByb3ZpZGVyOiBSZWFjdC5GQzxCcmVha3BvaW50UHJvdmlkZXJQcm9wcz4gPSAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA9PiB7XG4gIC8vIElmIGEgdGFyZ2V0UmVmIGlzIHByb3ZpZGVkLCB1c2VSZXNpemVEZXRlY3RvciBvYnNlcnZlcyB0aGF0IGVsZW1lbnQ7IG90aGVyd2lzZSwgYW4gaW50ZXJuYWwgcmVmIGlzIGNyZWF0ZWQuXG4gIGNvbnN0IHsgd2lkdGgsIHJlZiB9ID0gdXNlUmVzaXplRGV0ZWN0b3IoeyB0YXJnZXRSZWYgfSk7XG5cbiAgLy8gU29ydCB0aGUgYnJlYWtwb2ludHMgaW4gYXNjZW5kaW5nIG9yZGVyIGJhc2VkIG9uIHRoZWlyIG51bWVyaWMgdmFsdWVzLiBcdUQ4M0RcdUREMjJcbiAgY29uc3Qgc29ydGVkQnJlYWtwb2ludHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnJlYWtwb2ludHMpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IFtrZXksIHZhbHVlXSBhcyBbQnJlYWtwb2ludCwgbnVtYmVyXSlcbiAgICAgIC5zb3J0KChbLCBhXSwgWywgYl0pID0+IGEgLSBiKTtcbiAgfSwgW2JyZWFrcG9pbnRzXSk7XG5cbiAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBicmVha3BvaW50IHZhbHVlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSBzb3J0ZWRCcmVha3BvaW50cy5maWx0ZXIoXG4gICAgICAoWywgdmFsdWVdLCBpbmRleCkgPT5cbiAgICAgICAgc29ydGVkQnJlYWtwb2ludHMuZmluZEluZGV4KChbLCB2XSkgPT4gdiA9PT0gdmFsdWUpICE9PSBpbmRleFxuICAgICk7XG4gICAgaWYgKGR1cGxpY2F0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0JyZWFrcG9pbnRQcm92aWRlcjogRHVwbGljYXRlIGJyZWFrcG9pbnQgdmFsdWVzIGRldGVjdGVkLiBUaGlzIG1heSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuJ1xuICAgICAgKTtcbiAgICB9XG4gIH0sIFtzb3J0ZWRCcmVha3BvaW50c10pO1xuXG4gIC8vIERldGVybWluZSB0aGUgY3VycmVudCBicmVha3BvaW50IGJhc2VkIG9uIHRoZSBtZWFzdXJlZCB3aWR0aC4gXHVEODNEXHVEQ0NGXG4gIGNvbnN0IGN1cnJlbnRCcmVha3BvaW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICAgIGxldCBhY3RpdmU6IEJyZWFrcG9pbnQgfCBudWxsID0gbnVsbDtcbiAgICBzb3J0ZWRCcmVha3BvaW50cy5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICh3aWR0aCA+PSB2YWx1ZSkge1xuICAgICAgICBhY3RpdmUgPSBrZXk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZTtcbiAgfSwgW3dpZHRoLCBzb3J0ZWRCcmVha3BvaW50c10pO1xuXG4gIC8vIExvZyBlcnJvciBpZiB3aWR0aCBpcyB1bmRlZmluZWQgb3IgMFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnQnJlYWtwb2ludFByb3ZpZGVyOiB3aWR0aCBpcyB1bmRlZmluZWQuIEVuc3VyZSB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgbW91bnRlZCBhbmQgdmlzaWJsZS4nXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAod2lkdGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdCcmVha3BvaW50UHJvdmlkZXI6IHdpZHRoIGlzIDAuIFRoZSB0YXJnZXQgZWxlbWVudCBtaWdodCBiZSBoaWRkZW4gb3Igbm90IG1vdW50ZWQgY29ycmVjdGx5LidcbiAgICAgICk7XG4gICAgfVxuICB9LCBbd2lkdGhdKTtcblxuICAvLyBMb2cgZXJyb3IgaWYgd2lkdGggPiAwIGJ1dCBubyBicmVha3BvaW50IGNvdWxkIGJlIGRldGVybWluZWRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2lkdGggIT09IHVuZGVmaW5lZCAmJiB3aWR0aCA+IDAgJiYgY3VycmVudEJyZWFrcG9pbnQgPT09IG51bGwpIHtcbiAgICAgIGlmIChzb3J0ZWRCcmVha3BvaW50cy5sZW5ndGggPiAwICYmIHdpZHRoIDwgc29ydGVkQnJlYWtwb2ludHNbMF1bMV0pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgQnJlYWtwb2ludFByb3ZpZGVyOiBUaGUgY3VycmVudCB3aWR0aCAoJHt3aWR0aH1weCkgaXMgbGVzcyB0aGFuIHRoZSBzbWFsbGVzdCBicmVha3BvaW50IHZhbHVlICgke3NvcnRlZEJyZWFrcG9pbnRzWzBdWzFdfXB4KS4gQ29uc2lkZXIgaW5jbHVkaW5nIGEgYnJlYWtwb2ludCB3aXRoIGEgdmFsdWUgb2YgMCB0byBjb3ZlciBhbGwgY2FzZXMuYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnQnJlYWtwb2ludFByb3ZpZGVyOiBObyBicmVha3BvaW50IGNvdWxkIGJlIGRldGVybWluZWQgZnJvbSB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi4gQ2hlY2sgeW91ciBicmVha3BvaW50cyBvYmplY3QuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3dpZHRoLCBjdXJyZW50QnJlYWtwb2ludCwgc29ydGVkQnJlYWtwb2ludHNdKTtcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBpbmRleCBvZiBhIGJyZWFrcG9pbnQgaW4gdGhlIHNvcnRlZCBhcnJheS4gXHVEODNEXHVERDBEXG4gIGNvbnN0IGdldEJyZWFrcG9pbnRJbmRleCA9IChzaXplOiBCcmVha3BvaW50KTogbnVtYmVyID0+IHtcbiAgICByZXR1cm4gc29ydGVkQnJlYWtwb2ludHMuZmluZEluZGV4KChba2V5XSkgPT4ga2V5ID09PSBzaXplKTtcbiAgfTtcblxuICBjb25zdCBpc0F0TGVhc3QgPSAoc2l6ZTogQnJlYWtwb2ludCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghY3VycmVudEJyZWFrcG9pbnQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZ2V0QnJlYWtwb2ludEluZGV4KGN1cnJlbnRCcmVha3BvaW50KSA+PSBnZXRCcmVha3BvaW50SW5kZXgoc2l6ZSk7XG4gIH07XG5cbiAgY29uc3QgaXNCZWxvdyA9IChzaXplOiBCcmVha3BvaW50KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFjdXJyZW50QnJlYWtwb2ludCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBnZXRCcmVha3BvaW50SW5kZXgoY3VycmVudEJyZWFrcG9pbnQpIDwgZ2V0QnJlYWtwb2ludEluZGV4KHNpemUpO1xuICB9O1xuXG4gIC8vIERlZmluZSB2YWx1ZUJ5QnJlYWtwb2ludCBhcyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHRvIGF2b2lkIEpTWCBwYXJzaW5nIGlzc3VlcyBpbiBUU1ggZmlsZXMuIFx1RDgzQ1x1REZBOFxuICBmdW5jdGlvbiB2YWx1ZUJ5QnJlYWtwb2ludDxUPih2YWx1ZXM6IFBhcnRpYWw8UmVjb3JkPEJyZWFrcG9pbnQsIFQ+Pik6IFQgfCB1bmRlZmluZWQge1xuICAgIGlmICghY3VycmVudEJyZWFrcG9pbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHZhbHVlc1tjdXJyZW50QnJlYWtwb2ludF07XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxCcmVha3BvaW50Q29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgd2lkdGg6IHdpZHRoID8/IDAsXG4gICAgICAgIGJyZWFrcG9pbnQ6IGN1cnJlbnRCcmVha3BvaW50LFxuICAgICAgICBicmVha3BvaW50cyxcbiAgICAgICAgaXNBdExlYXN0LFxuICAgICAgICBpc0JlbG93LFxuICAgICAgICB2YWx1ZUJ5QnJlYWtwb2ludCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgey8qIElmIGEgdGFyZ2V0UmVmIGlzIHByb3ZpZGVkLCB0aGF0IHJlZiBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGFuIGV4dGVybmFsIGVsZW1lbnQuXG4gICAgICAgICAgT3RoZXJ3aXNlLCByZW5kZXIgYSA8ZGl2IHJlZj17cmVmfT4gdG8gb2JzZXJ2ZSBpdHMgc2l6ZS4gXHVEODNEXHVEQ0QwICovfVxuICAgICAge3RhcmdldFJlZiA/IGNoaWxkcmVuIDogPGRpdiByZWY9e3JlZn0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L0JyZWFrcG9pbnRDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuLyoqXG4gKiBIb29rIGZvciBhY2Nlc3NpbmcgdGhlIEJyZWFrcG9pbnRDb250ZXh0LlxuICogVGhyb3dzIGFuIGVycm9yIGlmIHVzZWQgb3V0c2lkZSBvZiBhIEJyZWFrcG9pbnRQcm92aWRlci4gXHUyNkEwXHVGRTBGXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VCcmVha3BvaW50ID0gKCk6IEJyZWFrcG9pbnRDb250ZXh0VHlwZSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEJyZWFrcG9pbnRDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VCcmVha3BvaW50IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBCcmVha3BvaW50UHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmludGVyZmFjZSBCcmVha3BvaW50Q29uZGl0aW9uYWxQcm9wcyB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBicmVha3BvaW50cyBhdCB3aGljaCB0aGUgY2hpbGRyZW4gc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICogRS5nLjogWydNRCcsICdMRyddIHJlbmRlcnMgY2hpbGRyZW4gb25seSBpZiB0aGUgY3VycmVudCBicmVha3BvaW50IGlzIE1EIG9yIExHLlxuICAgKi9cbiAgc2hvdz86IEJyZWFrcG9pbnRbXTtcbiAgLyoqXG4gICAqIFRoZSBjaGlsZHJlbiBhcmUgZGlzcGxheWVkIG9ubHkgaWYgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBpcyBhdCBsZWFzdCB0aGlzIHZhbHVlLlxuICAgKiBFLmcuOiBpc0F0TGVhc3Q9XCJNRFwiIHJlbmRlcnMgY2hpbGRyZW4gZm9yIE1ELCBMRywgb3IgWEwuXG4gICAqL1xuICBpc0F0TGVhc3Q/OiBCcmVha3BvaW50O1xuICAvKipcbiAgICogVGhlIGNoaWxkcmVuIGFyZSBkaXNwbGF5ZWQgb25seSBpZiB0aGUgY3VycmVudCBicmVha3BvaW50IGlzIGJlbG93IHRoaXMgdmFsdWUuXG4gICAqL1xuICBpc0JlbG93PzogQnJlYWtwb2ludDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuLyoqXG4gKiBCcmVha3BvaW50Q29uZGl0aW9uYWwgXHVEODNDXHVERkE4XG4gKlxuICogUmVuZGVycyBpdHMgY2hpbGRyZW4gb25seSBpZiBhbGwgcHJvdmlkZWQgY29uZGl0aW9ucyByZWdhcmRpbmcgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBhcmUgbWV0LlxuICovXG5leHBvcnQgY29uc3QgQnJlYWtwb2ludENvbmRpdGlvbmFsOiBSZWFjdC5GQzxCcmVha3BvaW50Q29uZGl0aW9uYWxQcm9wcz4gPSAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXRMZWFzdDogbWluU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQmVsb3c6IG1heFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA9PiB7XG4gIGNvbnN0IHsgYnJlYWtwb2ludCwgaXNBdExlYXN0OiBjb250ZXh0SXNBdExlYXN0LCBpc0JlbG93OiBjb250ZXh0SXNCZWxvdyB9ID0gdXNlQnJlYWtwb2ludCgpO1xuXG4gIGxldCBzaG91bGRSZW5kZXIgPSB0cnVlO1xuXG4gIGlmIChzaG93ICYmIGJyZWFrcG9pbnQpIHtcbiAgICBzaG91bGRSZW5kZXIgPSBzaG91bGRSZW5kZXIgJiYgc2hvdy5pbmNsdWRlcyhicmVha3BvaW50KTtcbiAgfVxuICBpZiAobWluU2l6ZSkge1xuICAgIHNob3VsZFJlbmRlciA9IHNob3VsZFJlbmRlciAmJiBjb250ZXh0SXNBdExlYXN0KG1pblNpemUpO1xuICB9XG4gIGlmIChtYXhTaXplKSB7XG4gICAgc2hvdWxkUmVuZGVyID0gc2hvdWxkUmVuZGVyICYmIGNvbnRleHRJc0JlbG93KG1heFNpemUpO1xuICB9XG5cbiAgcmV0dXJuIHNob3VsZFJlbmRlciA/IDw+e2NoaWxkcmVufTwvPiA6IG51bGw7XG59OyJdLAogICJtYXBwaW5ncyI6ICJ5YUFBQSxJQUFBQSxFQUFBLEdBQUFDLEVBQUFELEVBQUEsMkJBQUFFLEVBQUEsdUJBQUFDLEVBQUEsa0JBQUFDLElBQUEsZUFBQUMsRUFBQUwsR0NBQSxJQUFBTSxFQUFxRSxpQkFDckVDLEVBQWtDLGlDQStKSkMsRUFBQSw2QkFwSXhCQyxLQUFvQixpQkFBaUQsTUFBUyxFQThCdkVDLEVBQXdELENBQUMsQ0FDRSxZQUFBQyxFQUNBLFNBQUFDLEVBQ0EsVUFBQUMsQ0FDRixJQUFNLENBRTFFLEdBQU0sQ0FBRSxNQUFBQyxFQUFPLElBQUFDLENBQUksS0FBSSxxQkFBa0IsQ0FBRSxVQUFBRixDQUFVLENBQUMsRUFHaERHLEtBQW9CLFdBQVEsSUFDekIsT0FBTyxRQUFRTCxDQUFXLEVBQzlCLElBQUksQ0FBQyxDQUFDTSxFQUFLQyxDQUFLLElBQU0sQ0FBQ0QsRUFBS0MsQ0FBSyxDQUF5QixFQUMxRCxLQUFLLENBQUMsQ0FBQyxDQUFFQyxDQUFDLEVBQUcsQ0FBQyxDQUFFQyxDQUFDLElBQU1ELEVBQUlDLENBQUMsRUFDOUIsQ0FBQ1QsQ0FBVyxDQUFDLEtBR2hCLGFBQVUsSUFBTSxDQUNLSyxFQUFrQixPQUNuQyxDQUFDLENBQUMsQ0FBRUUsQ0FBSyxFQUFHRyxJQUNWTCxFQUFrQixVQUFVLENBQUMsQ0FBQyxDQUFFTSxDQUFDLElBQU1BLElBQU1KLENBQUssSUFBTUcsQ0FDNUQsRUFDZSxPQUFTLEdBQ3RCLFFBQVEsTUFDTixpR0FDRixDQUVKLEVBQUcsQ0FBQ0wsQ0FBaUIsQ0FBQyxFQUd0QixJQUFNTyxLQUFvQixXQUFRLElBQU0sQ0FDdEMsR0FBSVQsSUFBVSxPQUFXLE9BQU8sS0FDaEMsSUFBSVUsRUFBNEIsS0FDaEMsT0FBQVIsRUFBa0IsUUFBUSxDQUFDLENBQUNDLEVBQUtDLENBQUssSUFBTSxDQUN0Q0osR0FBU0ksSUFDWE0sRUFBU1AsRUFFYixDQUFDLEVBQ01PLENBQ1QsRUFBRyxDQUFDVixFQUFPRSxDQUFpQixDQUFDLEtBRzdCLGFBQVUsSUFBTSxDQUNWRixJQUFVLE9BQ1osUUFBUSxNQUNOLDJGQUNGLEVBQ1NBLElBQVUsR0FDbkIsUUFBUSxNQUNOLDhGQUNGLENBRUosRUFBRyxDQUFDQSxDQUFLLENBQUMsS0FHVixhQUFVLElBQU0sQ0FDVkEsSUFBVSxRQUFhQSxFQUFRLEdBQUtTLElBQXNCLE9BQ3hEUCxFQUFrQixPQUFTLEdBQUtGLEVBQVFFLEVBQWtCLENBQUMsRUFBRSxDQUFDLEVBQ2hFLFFBQVEsTUFDTiwwQ0FBMENGLENBQUssbURBQW1ERSxFQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLDRFQUMzSCxFQUVBLFFBQVEsTUFDTix1SEFDRixFQUdOLEVBQUcsQ0FBQ0YsRUFBT1MsRUFBbUJQLENBQWlCLENBQUMsRUFHaEQsSUFBTVMsRUFBc0JDLEdBQ25CVixFQUFrQixVQUFVLENBQUMsQ0FBQ0MsQ0FBRyxJQUFNQSxJQUFRUyxDQUFJLEVBR3REQyxFQUFhRCxHQUNaSCxFQUNFRSxFQUFtQkYsQ0FBaUIsR0FBS0UsRUFBbUJDLENBQUksRUFEeEMsR0FJM0JFLEVBQVdGLEdBQ1ZILEVBQ0VFLEVBQW1CRixDQUFpQixFQUFJRSxFQUFtQkMsQ0FBSSxFQUR2QyxHQUtqQyxTQUFTRyxFQUFxQkMsRUFBdUQsQ0FDbkYsR0FBS1AsRUFDTCxPQUFPTyxFQUFPUCxDQUFpQixDQUNqQyxDQUVBLFNBQ0UsT0FBQ2QsRUFBa0IsU0FBbEIsQ0FDQyxNQUFPLENBQ0wsTUFBT0ssR0FBUyxFQUNoQixXQUFZUyxFQUNaLFlBQUFaLEVBQ0EsVUFBQWdCLEVBQ0EsUUFBQUMsRUFDQSxrQkFBQUMsQ0FDRixFQUlDLFNBQUFoQixFQUFZRCxLQUFXLE9BQUMsT0FBSSxJQUFLRyxFQUFNLFNBQUFILEVBQVMsRUFDbkQsQ0FFSixFQU1hbUIsRUFBZ0IsSUFBNkIsQ0FDeEQsSUFBTUMsS0FBVSxjQUFXdkIsQ0FBaUIsRUFDNUMsR0FBSSxDQUFDdUIsRUFDSCxNQUFNLElBQUksTUFBTSx3REFBd0QsRUFFMUUsT0FBT0EsQ0FDVCxFQXlCYUMsRUFBOEQsQ0FBQyxDQUNFLEtBQUFDLEVBQ0EsVUFBV0MsRUFDWCxRQUFTQyxFQUNULFNBQUF4QixDQUNGLElBQU0sQ0FDaEYsR0FBTSxDQUFFLFdBQUF5QixFQUFZLFVBQVdDLEVBQWtCLFFBQVNDLENBQWUsRUFBSVIsRUFBYyxFQUV2RlMsRUFBZSxHQUVuQixPQUFJTixHQUFRRyxJQUNWRyxFQUFlQSxHQUFnQk4sRUFBSyxTQUFTRyxDQUFVLEdBRXJERixJQUNGSyxFQUFlQSxHQUFnQkYsRUFBaUJILENBQU8sR0FFckRDLElBQ0ZJLEVBQWVBLEdBQWdCRCxFQUFlSCxDQUFPLEdBR2hESSxLQUFlLG1CQUFHLFNBQUE1QixFQUFTLEVBQU0sSUFDMUMiLAogICJuYW1lcyI6IFsiaW5kZXhfZXhwb3J0cyIsICJfX2V4cG9ydCIsICJCcmVha3BvaW50Q29uZGl0aW9uYWwiLCAiQnJlYWtwb2ludFByb3ZpZGVyIiwgInVzZUJyZWFrcG9pbnQiLCAiX190b0NvbW1vbkpTIiwgImltcG9ydF9yZWFjdCIsICJpbXBvcnRfcmVhY3RfcmVzaXplX2RldGVjdG9yIiwgImltcG9ydF9qc3hfcnVudGltZSIsICJCcmVha3BvaW50Q29udGV4dCIsICJCcmVha3BvaW50UHJvdmlkZXIiLCAiYnJlYWtwb2ludHMiLCAiY2hpbGRyZW4iLCAidGFyZ2V0UmVmIiwgIndpZHRoIiwgInJlZiIsICJzb3J0ZWRCcmVha3BvaW50cyIsICJrZXkiLCAidmFsdWUiLCAiYSIsICJiIiwgImluZGV4IiwgInYiLCAiY3VycmVudEJyZWFrcG9pbnQiLCAiYWN0aXZlIiwgImdldEJyZWFrcG9pbnRJbmRleCIsICJzaXplIiwgImlzQXRMZWFzdCIsICJpc0JlbG93IiwgInZhbHVlQnlCcmVha3BvaW50IiwgInZhbHVlcyIsICJ1c2VCcmVha3BvaW50IiwgImNvbnRleHQiLCAiQnJlYWtwb2ludENvbmRpdGlvbmFsIiwgInNob3ciLCAibWluU2l6ZSIsICJtYXhTaXplIiwgImJyZWFrcG9pbnQiLCAiY29udGV4dElzQXRMZWFzdCIsICJjb250ZXh0SXNCZWxvdyIsICJzaG91bGRSZW5kZXIiXQp9Cg==
2
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9CcmVha3BvaW50Q29udGV4dC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL0JyZWFrcG9pbnRDb250ZXh0XCI7IiwgImltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZXNpemVEZXRlY3RvciB9IGZyb20gJ3JlYWN0LXJlc2l6ZS1kZXRlY3Rvcic7XG5cbmV4cG9ydCB0eXBlIEJyZWFrcG9pbnQgPSBzdHJpbmc7IC8vIEFsbG93IGFyYml0cmFyeSBicmVha3BvaW50IG5hbWVzXG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWtwb2ludENvbnRleHRUeXBlIHtcbiAgLyoqIEN1cnJlbnQgd2lkdGggb2YgdGhlIG9ic2VydmVkIGVsZW1lbnQgKi9cbiAgd2lkdGg6IG51bWJlcjtcbiAgLyoqIEN1cnJlbnRseSBhY3RpdmUgYnJlYWtwb2ludCAqL1xuICBicmVha3BvaW50OiBCcmVha3BvaW50IHwgbnVsbDtcbiAgLyoqIERlZmluZWQgYnJlYWtwb2ludHMsIGUuZy4sIHsgWFM6IDAsIFNNOiA1MDAsIE1EOiA3MDAsIExHOiA5MDAsIFhMOiAxMTAwIH0gKi9cbiAgYnJlYWtwb2ludHM6IFJlY29yZDxCcmVha3BvaW50LCBudW1iZXI+O1xuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHByb3ZpZGVkIG9uZS5cbiAgICogRS5nLjogaXNBdExlYXN0KCdNRCcpIHJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBicmVha3BvaW50IGlzIE1ELCBMRywgb3IgWEwuXG4gICAqL1xuICBpc0F0TGVhc3Q6IChzaXplOiBCcmVha3BvaW50KSA9PiBib29sZWFuO1xuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBpcyBsZXNzIHRoYW4gdGhlIHByb3ZpZGVkIG9uZS5cbiAgICovXG4gIGlzQmVsb3c6IChzaXplOiBCcmVha3BvaW50KSA9PiBib29sZWFuO1xuICAvKipcbiAgICogUmV0dXJucyBhIHZhbHVlIGZyb20gdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIGN1cnJlbnQgYnJlYWtwb2ludC5cbiAgICogRS5nLjogdmFsdWVCeUJyZWFrcG9pbnQoeyBNRDogMywgTEc6IDIgfSkgcmV0dXJucyAzIGZvciBNRCBhbmQgMiBmb3IgTEcuXG4gICAqL1xuICB2YWx1ZUJ5QnJlYWtwb2ludDogPFQ+KHZhbHVlczogUGFydGlhbDxSZWNvcmQ8QnJlYWtwb2ludCwgVD4+KSA9PiBUIHwgdW5kZWZpbmVkO1xufVxuXG5jb25zdCBCcmVha3BvaW50Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8QnJlYWtwb2ludENvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4vKipcbiAqIEluc3RlYWQgb2YgdXNpbmcgUmVhY3QuUmVmT2JqZWN0PEhUTUxFbGVtZW50PiAod2hpY2ggaXMgaW52YXJpYW50KSxcbiAqIHdlIHVzZSBhIHN0cnVjdHVyYWwgdHlwZSB0aGF0IGFjY2VwdHMgYW55IG9iamVjdCB3aXRoIGEgYGN1cnJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbGAgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWtwb2ludFByb3ZpZGVyUHJvcHMge1xuICAvKiogRGVmaW5lZCBicmVha3BvaW50cyAqL1xuICBicmVha3BvaW50czogUmVjb3JkPEJyZWFrcG9pbnQsIG51bWJlcj47XG4gIC8qKiBDaGlsZCBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBjb250ZXh0ICovXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIC8qKlxuICAgKiBPcHRpb25hbDogUHJvdmlkZSBhIHJlZiB0byB0aGUgZWxlbWVudCB0byBiZSBvYnNlcnZlZC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbiBpbnRlcm5hbCA8ZGl2IHJlZj17Li4ufT4gd2lsbCBiZSByZW5kZXJlZC5cbiAgICovXG4gIHRhcmdldFJlZj86IHsgY3VycmVudDogSFRNTEVsZW1lbnQgfCBudWxsIH07XG59XG5cbi8qKlxuICogQnJlYWtwb2ludFByb3ZpZGVyIFx1RDgzRFx1REU4MFxuICpcbiAqIFVzZXMgcmVhY3QtcmVzaXplLWRldGVjdG9yIHRvIG1lYXN1cmUgdGhlIHdpZHRoIG9mIGFuIGVsZW1lbnQgYW5kIGRldGVybWluZSB0aGUgY3VycmVudCBicmVha3BvaW50XG4gKiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYnJlYWtwb2ludHMuIEFkZGl0aW9uYWxseSwgaXQgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgKGlzQXRMZWFzdCwgaXNCZWxvdylcbiAqIGFuZCB2YWx1ZUJ5QnJlYWtwb2ludC5cbiAqXG4gKiBcdTI2QTBcdUZFMEYgKipFZGdlIENhc2VzIC8gV2FybmluZ3M6KipcbiAqIC0gSWYgdGhlIG1lYXN1cmVkIHdpZHRoIGlzIHVuZGVmaW5lZCBvciAwLCBhbiBlcnJvciBpcyBsb2dnZWQgaW4gdGhlIGNvbnNvbGUuXG4gKiAtIElmIHRoZSBjdXJyZW50IHdpZHRoIGlzIGxlc3MgdGhhbiB0aGUgc21hbGxlc3QgYnJlYWtwb2ludCAoYW5kIHdpZHRoID4gMCksIGFuIGVycm9yIGlzIGxvZ2dlZC5cbiAqIC0gSWYgZHVwbGljYXRlIGJyZWFrcG9pbnQgdmFsdWVzIGFyZSBkZXRlY3RlZCwgYW4gZXJyb3IgaXMgbG9nZ2VkLlxuICovXG5leHBvcnQgY29uc3QgQnJlYWtwb2ludFByb3ZpZGVyOiBSZWFjdC5GQzxCcmVha3BvaW50UHJvdmlkZXJQcm9wcz4gPSAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA9PiB7XG4gIC8vIElmIGEgdGFyZ2V0UmVmIGlzIHByb3ZpZGVkLCB1c2VSZXNpemVEZXRlY3RvciBvYnNlcnZlcyB0aGF0IGVsZW1lbnQ7IG90aGVyd2lzZSwgYW4gaW50ZXJuYWwgcmVmIGlzIGNyZWF0ZWQuXG4gIGNvbnN0IHsgd2lkdGgsIHJlZiB9ID0gdXNlUmVzaXplRGV0ZWN0b3IoeyB0YXJnZXRSZWYgfSk7XG5cbiAgLy8gU29ydCB0aGUgYnJlYWtwb2ludHMgaW4gYXNjZW5kaW5nIG9yZGVyIGJhc2VkIG9uIHRoZWlyIG51bWVyaWMgdmFsdWVzLiBcdUQ4M0RcdUREMjJcbiAgY29uc3Qgc29ydGVkQnJlYWtwb2ludHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoYnJlYWtwb2ludHMpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IFtrZXksIHZhbHVlXSBhcyBbQnJlYWtwb2ludCwgbnVtYmVyXSlcbiAgICAgIC5zb3J0KChbLCBhXSwgWywgYl0pID0+IGEgLSBiKTtcbiAgfSwgW2JyZWFrcG9pbnRzXSk7XG5cbiAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBicmVha3BvaW50IHZhbHVlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSBzb3J0ZWRCcmVha3BvaW50cy5maWx0ZXIoXG4gICAgICAoWywgdmFsdWVdLCBpbmRleCkgPT5cbiAgICAgICAgc29ydGVkQnJlYWtwb2ludHMuZmluZEluZGV4KChbLCB2XSkgPT4gdiA9PT0gdmFsdWUpICE9PSBpbmRleFxuICAgICk7XG4gICAgaWYgKGR1cGxpY2F0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0JyZWFrcG9pbnRQcm92aWRlcjogRHVwbGljYXRlIGJyZWFrcG9pbnQgdmFsdWVzIGRldGVjdGVkLiBUaGlzIG1heSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuJ1xuICAgICAgKTtcbiAgICB9XG4gIH0sIFtzb3J0ZWRCcmVha3BvaW50c10pO1xuXG4gIC8vIERldGVybWluZSB0aGUgY3VycmVudCBicmVha3BvaW50IGJhc2VkIG9uIHRoZSBtZWFzdXJlZCB3aWR0aC4gXHVEODNEXHVEQ0NGXG4gIGNvbnN0IGN1cnJlbnRCcmVha3BvaW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICAgIGxldCBhY3RpdmU6IEJyZWFrcG9pbnQgfCBudWxsID0gbnVsbDtcbiAgICBzb3J0ZWRCcmVha3BvaW50cy5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICh3aWR0aCA+PSB2YWx1ZSkge1xuICAgICAgICBhY3RpdmUgPSBrZXk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZTtcbiAgfSwgW3dpZHRoLCBzb3J0ZWRCcmVha3BvaW50c10pO1xuXG4gIC8vIExvZyBlcnJvciBpZiB3aWR0aCBpcyB1bmRlZmluZWQgb3IgMFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnQnJlYWtwb2ludFByb3ZpZGVyOiB3aWR0aCBpcyB1bmRlZmluZWQuIEVuc3VyZSB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgbW91bnRlZCBhbmQgdmlzaWJsZS4nXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAod2lkdGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdCcmVha3BvaW50UHJvdmlkZXI6IHdpZHRoIGlzIDAuIFRoZSB0YXJnZXQgZWxlbWVudCBtaWdodCBiZSBoaWRkZW4gb3Igbm90IG1vdW50ZWQgY29ycmVjdGx5LidcbiAgICAgICk7XG4gICAgfVxuICB9LCBbd2lkdGhdKTtcblxuICAvLyBMb2cgZXJyb3IgaWYgd2lkdGggPiAwIGJ1dCBubyBicmVha3BvaW50IGNvdWxkIGJlIGRldGVybWluZWRcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2lkdGggIT09IHVuZGVmaW5lZCAmJiB3aWR0aCA+IDAgJiYgY3VycmVudEJyZWFrcG9pbnQgPT09IG51bGwpIHtcbiAgICAgIGlmIChzb3J0ZWRCcmVha3BvaW50cy5sZW5ndGggPiAwICYmIHdpZHRoIDwgc29ydGVkQnJlYWtwb2ludHNbMF1bMV0pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgQnJlYWtwb2ludFByb3ZpZGVyOiBUaGUgY3VycmVudCB3aWR0aCAoJHt3aWR0aH1weCkgaXMgbGVzcyB0aGFuIHRoZSBzbWFsbGVzdCBicmVha3BvaW50IHZhbHVlICgke3NvcnRlZEJyZWFrcG9pbnRzWzBdWzFdfXB4KS4gQ29uc2lkZXIgaW5jbHVkaW5nIGEgYnJlYWtwb2ludCB3aXRoIGEgdmFsdWUgb2YgMCB0byBjb3ZlciBhbGwgY2FzZXMuYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnQnJlYWtwb2ludFByb3ZpZGVyOiBObyBicmVha3BvaW50IGNvdWxkIGJlIGRldGVybWluZWQgZnJvbSB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi4gQ2hlY2sgeW91ciBicmVha3BvaW50cyBvYmplY3QuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3dpZHRoLCBjdXJyZW50QnJlYWtwb2ludCwgc29ydGVkQnJlYWtwb2ludHNdKTtcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBpbmRleCBvZiBhIGJyZWFrcG9pbnQgaW4gdGhlIHNvcnRlZCBhcnJheS4gXHVEODNEXHVERDBEXG4gIGNvbnN0IGdldEJyZWFrcG9pbnRJbmRleCA9IChzaXplOiBCcmVha3BvaW50KTogbnVtYmVyID0+IHtcbiAgICByZXR1cm4gc29ydGVkQnJlYWtwb2ludHMuZmluZEluZGV4KChba2V5XSkgPT4ga2V5ID09PSBzaXplKTtcbiAgfTtcblxuICBjb25zdCBpc0F0TGVhc3QgPSAoc2l6ZTogQnJlYWtwb2ludCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghY3VycmVudEJyZWFrcG9pbnQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZ2V0QnJlYWtwb2ludEluZGV4KGN1cnJlbnRCcmVha3BvaW50KSA+PSBnZXRCcmVha3BvaW50SW5kZXgoc2l6ZSk7XG4gIH07XG5cbiAgY29uc3QgaXNCZWxvdyA9IChzaXplOiBCcmVha3BvaW50KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFjdXJyZW50QnJlYWtwb2ludCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBnZXRCcmVha3BvaW50SW5kZXgoY3VycmVudEJyZWFrcG9pbnQpIDwgZ2V0QnJlYWtwb2ludEluZGV4KHNpemUpO1xuICB9O1xuXG4gIC8vIERlZmluZSB2YWx1ZUJ5QnJlYWtwb2ludCBhcyBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHRvIGF2b2lkIEpTWCBwYXJzaW5nIGlzc3VlcyBpbiBUU1ggZmlsZXMuIFx1RDgzQ1x1REZBOFxuICBmdW5jdGlvbiB2YWx1ZUJ5QnJlYWtwb2ludDxUPih2YWx1ZXM6IFBhcnRpYWw8UmVjb3JkPEJyZWFrcG9pbnQsIFQ+Pik6IFQgfCB1bmRlZmluZWQge1xuICAgIGlmICghY3VycmVudEJyZWFrcG9pbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHZhbHVlc1tjdXJyZW50QnJlYWtwb2ludF07XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxCcmVha3BvaW50Q29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgd2lkdGg6IHdpZHRoID8/IDAsXG4gICAgICAgIGJyZWFrcG9pbnQ6IGN1cnJlbnRCcmVha3BvaW50LFxuICAgICAgICBicmVha3BvaW50cyxcbiAgICAgICAgaXNBdExlYXN0LFxuICAgICAgICBpc0JlbG93LFxuICAgICAgICB2YWx1ZUJ5QnJlYWtwb2ludCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgey8qIElmIGEgdGFyZ2V0UmVmIGlzIHByb3ZpZGVkLCB0aGF0IHJlZiBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGFuIGV4dGVybmFsIGVsZW1lbnQuXG4gICAgICAgICAgT3RoZXJ3aXNlLCByZW5kZXIgYSA8ZGl2IHJlZj17cmVmfT4gdG8gb2JzZXJ2ZSBpdHMgc2l6ZS4gXHVEODNEXHVEQ0QwICovfVxuICAgICAge3RhcmdldFJlZiA/IGNoaWxkcmVuIDogPGRpdiByZWY9e3JlZn0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L0JyZWFrcG9pbnRDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuLyoqXG4gKiBIb29rIGZvciBhY2Nlc3NpbmcgdGhlIEJyZWFrcG9pbnRDb250ZXh0LlxuICogVGhyb3dzIGFuIGVycm9yIGlmIHVzZWQgb3V0c2lkZSBvZiBhIEJyZWFrcG9pbnRQcm92aWRlci4gXHUyNkEwXHVGRTBGXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VCcmVha3BvaW50ID0gKCk6IEJyZWFrcG9pbnRDb250ZXh0VHlwZSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEJyZWFrcG9pbnRDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VCcmVha3BvaW50IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBCcmVha3BvaW50UHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmludGVyZmFjZSBCcmVha3BvaW50Q29uZGl0aW9uYWxQcm9wcyB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBicmVha3BvaW50cyBhdCB3aGljaCB0aGUgY2hpbGRyZW4gc2hvdWxkIGJlIGRpc3BsYXllZC5cbiAgICogRS5nLjogWydNRCcsICdMRyddIHJlbmRlcnMgY2hpbGRyZW4gb25seSBpZiB0aGUgY3VycmVudCBicmVha3BvaW50IGlzIE1EIG9yIExHLlxuICAgKi9cbiAgc2hvdz86IEJyZWFrcG9pbnRbXTtcbiAgLyoqXG4gICAqIFRoZSBjaGlsZHJlbiBhcmUgZGlzcGxheWVkIG9ubHkgaWYgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBpcyBhdCBsZWFzdCB0aGlzIHZhbHVlLlxuICAgKiBFLmcuOiBpc0F0TGVhc3Q9XCJNRFwiIHJlbmRlcnMgY2hpbGRyZW4gZm9yIE1ELCBMRywgb3IgWEwuXG4gICAqL1xuICBpc0F0TGVhc3Q/OiBCcmVha3BvaW50O1xuICAvKipcbiAgICogVGhlIGNoaWxkcmVuIGFyZSBkaXNwbGF5ZWQgb25seSBpZiB0aGUgY3VycmVudCBicmVha3BvaW50IGlzIGJlbG93IHRoaXMgdmFsdWUuXG4gICAqL1xuICBpc0JlbG93PzogQnJlYWtwb2ludDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuLyoqXG4gKiBCcmVha3BvaW50Q29uZGl0aW9uYWwgXHVEODNDXHVERkE4XG4gKlxuICogUmVuZGVycyBpdHMgY2hpbGRyZW4gb25seSBpZiBhbGwgcHJvdmlkZWQgY29uZGl0aW9ucyByZWdhcmRpbmcgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBhcmUgbWV0LlxuICovXG5leHBvcnQgY29uc3QgQnJlYWtwb2ludENvbmRpdGlvbmFsOiBSZWFjdC5GQzxCcmVha3BvaW50Q29uZGl0aW9uYWxQcm9wcz4gPSAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXRMZWFzdDogbWluU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQmVsb3c6IG1heFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA9PiB7XG4gIGNvbnN0IHsgYnJlYWtwb2ludCwgaXNBdExlYXN0OiBjb250ZXh0SXNBdExlYXN0LCBpc0JlbG93OiBjb250ZXh0SXNCZWxvdyB9ID0gdXNlQnJlYWtwb2ludCgpO1xuXG4gIGxldCBzaG91bGRSZW5kZXIgPSB0cnVlO1xuXG4gIGlmIChzaG93ICYmIGJyZWFrcG9pbnQpIHtcbiAgICBzaG91bGRSZW5kZXIgPSBzaG91bGRSZW5kZXIgJiYgc2hvdy5pbmNsdWRlcyhicmVha3BvaW50KTtcbiAgfVxuICBpZiAobWluU2l6ZSkge1xuICAgIHNob3VsZFJlbmRlciA9IHNob3VsZFJlbmRlciAmJiBjb250ZXh0SXNBdExlYXN0KG1pblNpemUpO1xuICB9XG4gIGlmIChtYXhTaXplKSB7XG4gICAgc2hvdWxkUmVuZGVyID0gc2hvdWxkUmVuZGVyICYmIGNvbnRleHRJc0JlbG93KG1heFNpemUpO1xuICB9XG5cbiAgcmV0dXJuIHNob3VsZFJlbmRlciA/IDw+e2NoaWxkcmVufTwvPiA6IG51bGw7XG59OyJdLAogICJtYXBwaW5ncyI6ICJ5YUFBQSxJQUFBQSxFQUFBLEdBQUFDLEVBQUFELEVBQUEsMkJBQUFFLEVBQUEsdUJBQUFDLEVBQUEsa0JBQUFDLElBQUEsZUFBQUMsRUFBQUwsR0NBQSxJQUFBTSxFQUFxRSxpQkFDckVDLEVBQWtDLGlDQStKSkMsRUFBQSw2QkFwSXhCQyxLQUFvQixpQkFBaUQsTUFBUyxFQThCdkVDLEVBQXdELENBQUMsQ0FDRSxZQUFBQyxFQUNBLFNBQUFDLEVBQ0EsVUFBQUMsQ0FDRixJQUFNLENBRTFFLEdBQU0sQ0FBRSxNQUFBQyxFQUFPLElBQUFDLENBQUksS0FBSSxxQkFBa0IsQ0FBRSxVQUFBRixDQUFVLENBQUMsRUFHaERHLEtBQW9CLFdBQVEsSUFDekIsT0FBTyxRQUFRTCxDQUFXLEVBQzlCLElBQUksQ0FBQyxDQUFDTSxFQUFLQyxDQUFLLElBQU0sQ0FBQ0QsRUFBS0MsQ0FBSyxDQUF5QixFQUMxRCxLQUFLLENBQUMsQ0FBQyxDQUFFQyxDQUFDLEVBQUcsQ0FBQyxDQUFFQyxDQUFDLElBQU1ELEVBQUlDLENBQUMsRUFDOUIsQ0FBQ1QsQ0FBVyxDQUFDLEtBR2hCLGFBQVUsSUFBTSxDQUNLSyxFQUFrQixPQUNuQyxDQUFDLENBQUMsQ0FBRUUsQ0FBSyxFQUFHRyxJQUNWTCxFQUFrQixVQUFVLENBQUMsQ0FBQyxDQUFFTSxDQUFDLElBQU1BLElBQU1KLENBQUssSUFBTUcsQ0FDNUQsRUFDZSxPQUFTLEdBQ3RCLFFBQVEsTUFDTixpR0FDRixDQUVKLEVBQUcsQ0FBQ0wsQ0FBaUIsQ0FBQyxFQUd0QixJQUFNTyxLQUFvQixXQUFRLElBQU0sQ0FDdEMsR0FBSVQsSUFBVSxPQUFXLE9BQU8sS0FDaEMsSUFBSVUsRUFBNEIsS0FDaEMsT0FBQVIsRUFBa0IsUUFBUSxDQUFDLENBQUNDLEVBQUtDLENBQUssSUFBTSxDQUN0Q0osR0FBU0ksSUFDWE0sRUFBU1AsRUFFYixDQUFDLEVBQ01PLENBQ1QsRUFBRyxDQUFDVixFQUFPRSxDQUFpQixDQUFDLEtBRzdCLGFBQVUsSUFBTSxDQUNWRixJQUFVLE9BQ1osUUFBUSxNQUNOLDJGQUNGLEVBQ1NBLElBQVUsR0FDbkIsUUFBUSxNQUNOLDhGQUNGLENBRUosRUFBRyxDQUFDQSxDQUFLLENBQUMsS0FHVixhQUFVLElBQU0sQ0FDVkEsSUFBVSxRQUFhQSxFQUFRLEdBQUtTLElBQXNCLE9BQ3hEUCxFQUFrQixPQUFTLEdBQUtGLEVBQVFFLEVBQWtCLENBQUMsRUFBRSxDQUFDLEVBQ2hFLFFBQVEsTUFDTiwwQ0FBMENGLENBQUssbURBQW1ERSxFQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLDRFQUMzSCxFQUVBLFFBQVEsTUFDTix1SEFDRixFQUdOLEVBQUcsQ0FBQ0YsRUFBT1MsRUFBbUJQLENBQWlCLENBQUMsRUFHaEQsSUFBTVMsRUFBc0JDLEdBQ25CVixFQUFrQixVQUFVLENBQUMsQ0FBQ0MsQ0FBRyxJQUFNQSxJQUFRUyxDQUFJLEVBR3REQyxFQUFhRCxHQUNaSCxFQUNFRSxFQUFtQkYsQ0FBaUIsR0FBS0UsRUFBbUJDLENBQUksRUFEeEMsR0FJM0JFLEVBQVdGLEdBQ1ZILEVBQ0VFLEVBQW1CRixDQUFpQixFQUFJRSxFQUFtQkMsQ0FBSSxFQUR2QyxHQUtqQyxTQUFTRyxFQUFxQkMsRUFBdUQsQ0FDbkYsR0FBS1AsRUFDTCxPQUFPTyxFQUFPUCxDQUFpQixDQUNqQyxDQUVBLFNBQ0UsT0FBQ2QsRUFBa0IsU0FBbEIsQ0FDQyxNQUFPLENBQ0wsTUFBT0ssR0FBUyxFQUNoQixXQUFZUyxFQUNaLFlBQUFaLEVBQ0EsVUFBQWdCLEVBQ0EsUUFBQUMsRUFDQSxrQkFBQUMsQ0FDRixFQUlDLFNBQUFoQixFQUFZRCxLQUFXLE9BQUMsT0FBSSxJQUFLRyxFQUFNLFNBQUFILEVBQVMsRUFDbkQsQ0FFSixFQU1hbUIsRUFBZ0IsSUFBNkIsQ0FDeEQsSUFBTUMsS0FBVSxjQUFXdkIsQ0FBaUIsRUFDNUMsR0FBSSxDQUFDdUIsRUFDSCxNQUFNLElBQUksTUFBTSx3REFBd0QsRUFFMUUsT0FBT0EsQ0FDVCxFQXlCYUMsRUFBOEQsQ0FBQyxDQUNFLEtBQUFDLEVBQ0EsVUFBV0MsRUFDWCxRQUFTQyxFQUNULFNBQUF4QixDQUNGLElBQU0sQ0FDaEYsR0FBTSxDQUFFLFdBQUF5QixFQUFZLFVBQVdDLEVBQWtCLFFBQVNDLENBQWUsRUFBSVIsRUFBYyxFQUV2RlMsRUFBZSxHQUVuQixPQUFJTixHQUFRRyxJQUNWRyxFQUFlQSxHQUFnQk4sRUFBSyxTQUFTRyxDQUFVLEdBRXJERixJQUNGSyxFQUFlQSxHQUFnQkYsRUFBaUJILENBQU8sR0FFckRDLElBQ0ZJLEVBQWVBLEdBQWdCRCxFQUFlSCxDQUFPLEdBR2hESSxLQUFlLG1CQUFHLFNBQUE1QixFQUFTLEVBQU0sSUFDMUMiLAogICJuYW1lcyI6IFsic3JjX2V4cG9ydHMiLCAiX19leHBvcnQiLCAiQnJlYWtwb2ludENvbmRpdGlvbmFsIiwgIkJyZWFrcG9pbnRQcm92aWRlciIsICJ1c2VCcmVha3BvaW50IiwgIl9fdG9Db21tb25KUyIsICJpbXBvcnRfcmVhY3QiLCAiaW1wb3J0X3JlYWN0X3Jlc2l6ZV9kZXRlY3RvciIsICJpbXBvcnRfanN4X3J1bnRpbWUiLCAiQnJlYWtwb2ludENvbnRleHQiLCAiQnJlYWtwb2ludFByb3ZpZGVyIiwgImJyZWFrcG9pbnRzIiwgImNoaWxkcmVuIiwgInRhcmdldFJlZiIsICJ3aWR0aCIsICJyZWYiLCAic29ydGVkQnJlYWtwb2ludHMiLCAia2V5IiwgInZhbHVlIiwgImEiLCAiYiIsICJpbmRleCIsICJ2IiwgImN1cnJlbnRCcmVha3BvaW50IiwgImFjdGl2ZSIsICJnZXRCcmVha3BvaW50SW5kZXgiLCAic2l6ZSIsICJpc0F0TGVhc3QiLCAiaXNCZWxvdyIsICJ2YWx1ZUJ5QnJlYWtwb2ludCIsICJ2YWx1ZXMiLCAidXNlQnJlYWtwb2ludCIsICJjb250ZXh0IiwgIkJyZWFrcG9pbnRDb25kaXRpb25hbCIsICJzaG93IiwgIm1pblNpemUiLCAibWF4U2l6ZSIsICJicmVha3BvaW50IiwgImNvbnRleHRJc0F0TGVhc3QiLCAiY29udGV4dElzQmVsb3ciLCAic2hvdWxkUmVuZGVyIl0KfQo=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-resize-detector-context",
3
3
  "description": "",
4
- "version": "0.0.0",
4
+ "version": "0.1.0",
5
5
  "author": "",
6
6
  "license": "",
7
7
  "keywords": [],
@@ -30,9 +30,7 @@
30
30
  "import": "./dist/index.mjs"
31
31
  }
32
32
  },
33
- "files": [
34
- "dist"
35
- ],
33
+ "files": ["dist"],
36
34
  "config": {
37
35
  "commitizen": {
38
36
  "path": "./node_modules/@ryansonshine/cz-conventional-changelog"
@@ -103,4 +101,4 @@
103
101
  "@emotion/styled": "^11.14.0",
104
102
  "react-resize-detector": "^12.0.2"
105
103
  }
106
- }
104
+ }