@dashkite/joy 0.3.15 → 0.4.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.
@@ -1,278 +1,253 @@
1
- var clone,
2
- cloneIterator,
3
- eq,
4
- equal,
5
- hasByteLength,
6
- hasEqual,
7
- hasLength,
8
- hasSize,
9
- isEmpty,
10
- isPrimitive,
11
- neq,
12
- notEqual,
13
- size,
14
- indexOf = [].indexOf;
15
- import { identity, curry, binary } from "./function.js";
16
- import { any, negate } from "./predicate.js";
17
- import { generic } from "./generic.js";
18
- import { isUndefined, isAny, isSymbol, isRegExp, isBuffer, isArrayBuffer, isTypedArray, isDataView, isMap, isArray, isObject, isSet, isBoolean, isDate, isNumber, isString, isFunction, isWeakMap, isError } from "./type.js";
19
-
20
- hasEqual = a => {
21
- return (a != null ? a.equal : void 0) != null;
1
+ var clone, cloneIterator, eq, equal, hasByteLength, hasEqual, hasLength, hasSize, isEmpty, isNot, isPrimitive, neq, notEqual, size, indexOf = [].indexOf;
2
+ import { identity, curry, binary } from "./function";
3
+ import { any, negate } from "./predicate";
4
+ import { generic } from "./generic";
5
+ import { isUndefined, isAny, isSymbol, isRegExp, isBuffer, isArrayBuffer, isTypedArray, isDataView, isMap, isArray, isObject, isSet, isBoolean, isDate, isNumber, isString, isFunction, isWeakMap, isError } from "./type";
6
+ hasEqual = (a)=>{
7
+ return (a != null ? a.equal : void 0) != null;
8
+ };
9
+ isNot = function(a, b) {
10
+ return !Object.is(a, b);
11
+ };
12
+ isPrimitive = function(x) {
13
+ return isBoolean(x) || isNumber(x) || isString(x);
22
14
  };
23
-
24
15
  equal = generic({
25
- name: "equal",
26
- description: "Performs a deep comparison of two entities.",
27
- default: function (a, b) {
28
- return Object.is(a, b);
29
- }
16
+ name: "equal",
17
+ description: "Returns true if two values are semantically (deeply) equal, false otherwise",
18
+ default: function(a, b) {
19
+ return Object.is(a, b);
20
+ }
30
21
  });
31
- generic(equal, isAny, hasEqual, function (a, b) {
32
- return b.equal(a);
22
+ generic(equal, isAny, hasEqual, function(a, b) {
23
+ return b.equal(a);
33
24
  });
34
- generic(equal, hasEqual, isAny, function (a, b) {
35
- return a.equal(b);
25
+ generic(equal, hasEqual, isAny, function(a, b) {
26
+ return a.equal(b);
36
27
  });
37
- generic(equal, isObject, isObject, function (a, b) {
38
- var akeys, bkeys, j, k, len;
39
-
40
- if (a === b) {
41
- return true;
42
- }
43
-
44
- akeys = Object.keys(a);
45
- bkeys = Object.keys(b);
46
-
47
- if (akeys.length !== bkeys.length) {
48
- return false;
49
- }
50
-
51
- for (j = 0, len = akeys.length; j < len; j++) {
52
- k = akeys[j];
53
-
54
- if (!(indexOf.call(bkeys, k) >= 0 && equal(a[k], b[k]))) {
55
- return false;
28
+ generic(equal, isTypedArray, isTypedArray, function(a, b) {
29
+ var i, j, ref;
30
+ if (isNot(a.length, b.length) || isNot(a.name, b.name)) {
31
+ return false;
56
32
  }
57
- }
58
-
59
- return true;
33
+ for(i = j = 0, ref = a.length; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j){
34
+ if (isNot(a[i], b[i])) {
35
+ return false;
36
+ }
37
+ }
38
+ return true;
60
39
  });
61
- generic(equal, isTypedArray, isTypedArray, function (a, b) {
62
- var i, j, ref;
63
-
64
- if (a.length !== b.length || a.name !== b.name) {
65
- return false;
66
- }
67
-
68
- for (i = j = 0, ref = a.length; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {
69
- if (a[i] !== b[i]) {
70
- return false;
40
+ generic(equal, isArrayBuffer, isArrayBuffer, function(a, b) {
41
+ if (isNot(a.byteLength, b.byteLength)) {
42
+ return false;
71
43
  }
72
- }
73
-
74
- return true;
44
+ return equal(new Uint8Array(a), new Uint8Array(b));
75
45
  });
76
- generic(equal, isArrayBuffer, isArrayBuffer, function (a, b) {
77
- if (a.byteLength !== b.byteLength) {
78
- return false;
79
- }
80
-
81
- return equal(new Uint8Array(a), new Uint8Array(b));
46
+ generic(equal, isDataView, isDataView, function(a, b) {
47
+ if (isNot(a.byteLength, b.byteLength) || isNot(a.byteOffset, b.byteOffset)) {
48
+ return false;
49
+ }
50
+ return equal(a.buffer, b.buffer);
82
51
  });
83
- generic(equal, isDataView, isDataView, function (a, b) {
84
- if (a.byteLength !== b.byteLength || a.byteOffset !== b.byteOffset) {
85
- return false;
86
- }
87
-
88
- return equal(a.buffer, b.buffer);
52
+ generic(equal, isBuffer, isBuffer, function(a, b) {
53
+ return a.equals(b);
89
54
  });
90
- generic(equal, isBuffer, isBuffer, function (a, b) {
91
- return a.equals(b);
55
+ generic(equal, isDate, isDate, function(a, b) {
56
+ return Object.is(a.getTime(), b.getTime());
92
57
  });
93
-
94
- isPrimitive = function (x) {
95
- return isBoolean(x) || isNumber(x) || isString(x);
96
- };
97
-
98
- generic(equal, isPrimitive, isPrimitive, function (a, b) {
99
- return Object.is(a, b);
58
+ generic(equal, isRegExp, isRegExp, function(a, b) {
59
+ return Object.is(a.toString(), b.toString());
100
60
  });
101
- generic(equal, isDate, isDate, function (a, b) {
102
- return a.getTime() === b.getTime();
61
+ generic(equal, isError, isError, function(a, b) {
62
+ return equal(a.name, b.name) && equal(a.message, b.message);
103
63
  });
104
- generic(equal, isRegExp, isRegExp, function (a, b) {
105
- return a.toString() === b.toString();
64
+ generic(equal, isSymbol, isSymbol, function(a, b) {
65
+ return Object.is(a.valueOf(), b.valueOf());
106
66
  });
107
- generic(equal, isError, isError, function (a, b) {
108
- return equal(a.name, b.name) && equal(a.message, b.message);
67
+ generic(equal, isMap, isMap, function(a, b) {
68
+ var key, value, y;
69
+ if (isNot(a.size, b.size)) {
70
+ return false;
71
+ }
72
+ for (y of a){
73
+ [key, value] = y;
74
+ if (!equal(value, b.get(key))) {
75
+ return false;
76
+ }
77
+ }
78
+ return true;
109
79
  });
110
- generic(equal, isSymbol, isSymbol, function (a, b) {
111
- return a.valueOf() === b.valueOf();
80
+ generic(equal, isSet, isSet, function(a, b) {
81
+ var value;
82
+ if (isNot(a.size, b.size)) {
83
+ return false;
84
+ }
85
+ for (value of a){
86
+ if (!b.has(value)) {
87
+ return false;
88
+ }
89
+ }
90
+ return true;
112
91
  });
113
- generic(equal, isArray, isArray, function (a, b) {
114
- var i, j, ref;
115
-
116
- if (a.length !== b.length) {
117
- return false;
118
- }
119
-
120
- for (i = j = 0, ref = a.length; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j) {
121
- if (!equal(a[i], b[i])) {
122
- return false;
92
+ generic(equal, isArray, isArray, function(a, b) {
93
+ var i, j, ref;
94
+ if (isNot(a.length, b.length)) {
95
+ return false;
123
96
  }
124
- }
125
-
126
- return true;
97
+ for(i = j = 0, ref = a.length; 0 <= ref ? j <= ref : j >= ref; i = 0 <= ref ? ++j : --j){
98
+ if (!equal(a[i], b[i])) {
99
+ return false;
100
+ }
101
+ }
102
+ return true;
127
103
  });
128
- generic(equal, isMap, isMap, function (a, b) {
129
- var key, value, y;
130
-
131
- if (a.size !== b.size) {
132
- return false;
133
- }
134
-
135
- for (y of a) {
136
- [key, value] = y;
137
-
138
- if (!equal(value, b.get(key))) {
139
- return false;
104
+ generic(equal, isObject, isObject, function(a, b) {
105
+ var akeys, bkeys, j, k, len;
106
+ if (Object.is(a, b)) {
107
+ return true;
140
108
  }
141
- }
142
-
143
- return true;
109
+ akeys = Object.keys(a);
110
+ bkeys = Object.keys(b);
111
+ if (isNot(akeys.length, bkeys.length)) {
112
+ return false;
113
+ }
114
+ for(j = 0, len = akeys.length; j < len; j++){
115
+ k = akeys[j];
116
+ if (!(indexOf.call(bkeys, k) >= 0 && equal(a[k], b[k]))) {
117
+ return false;
118
+ }
119
+ }
120
+ return true;
121
+ });
122
+ generic(equal, isPrimitive, isPrimitive, function(a, b) {
123
+ return Object.is(a, b);
144
124
  });
145
125
  equal = curry(binary(equal));
146
126
  notEqual = curry(negate(equal));
147
- eq = curry(function (a, b) {
148
- return Object.is(a, b);
127
+ eq = curry(function(a, b) {
128
+ return Object.is(a, b);
149
129
  });
150
130
  neq = curry(negate(eq));
151
131
  clone = generic({
152
- name: "clone",
153
- description: "Creates a deep clone of an entity.",
154
- // When no match, throw to alert that we cannot deliver a deep clone.
155
- default: function (entity) {
156
- var ref;
157
- throw new Error(`clone: no match on entity ${entity != null ? (ref = entity.constructor) != null ? ref.name : void 0 : void 0}`);
158
- }
159
- });
160
- isPrimitive = any([isUndefined, isNumber, isString, isBoolean]);
132
+ name: "clone",
133
+ description: "Creates a deep clone of an entity.",
134
+ // When no match, throw to alert that we cannot deliver a deep clone.
135
+ default: function(entity) {
136
+ var ref;
137
+ throw new Error(`clone: no match on entity ${entity != null ? (ref = entity.constructor) != null ? ref.name : void 0 : void 0}`);
138
+ }
139
+ });
140
+ isPrimitive = any([
141
+ isUndefined,
142
+ isNumber,
143
+ isString,
144
+ isBoolean
145
+ ]);
161
146
  generic(clone, isPrimitive, identity);
162
- generic(clone, isObject, function (original) {
163
- var copy, key, value;
164
- copy = new original.constructor();
165
-
166
- for (key in original) {
167
- value = original[key];
168
- copy[key] = clone(value);
169
- }
170
-
171
- return copy;
147
+ generic(clone, isObject, function(original) {
148
+ var copy, key, value;
149
+ copy = new original.constructor();
150
+ for(key in original){
151
+ value = original[key];
152
+ copy[key] = clone(value);
153
+ }
154
+ return copy;
172
155
  });
173
- generic(clone, isArrayBuffer, function (original) {
174
- var copy;
175
- copy = new original.constructor(original.byteLength);
176
- new Uint8Array(copy).set(new Uint8Array(original));
177
- return copy;
156
+ generic(clone, isArrayBuffer, function(original) {
157
+ var copy;
158
+ copy = new original.constructor(original.byteLength);
159
+ new Uint8Array(copy).set(new Uint8Array(original));
160
+ return copy;
178
161
  });
179
- generic(clone, isTypedArray, function (original) {
180
- return new original.constructor(clone(original.buffer), original.byteOffset, original.length);
162
+ generic(clone, isTypedArray, function(original) {
163
+ return new original.constructor(clone(original.buffer), original.byteOffset, original.length);
181
164
  });
182
- generic(clone, isDataView, function (original) {
183
- return new original.constructor(clone(original.buffer), original.byteOffset, original.byteLength);
184
- }); // Only available within Node.js API. isBuffer will only match when Buffer is
185
- // available on global. Otherwise, it returns false.
186
-
187
- generic(clone, isBuffer, function (original) {
188
- return Buffer.from(original);
165
+ generic(clone, isDataView, function(original) {
166
+ return new original.constructor(clone(original.buffer), original.byteOffset, original.byteLength);
189
167
  });
190
-
191
- cloneIterator = function (original, add) {
192
- var copy, entry;
193
- copy = new original.constructor();
194
-
195
- for (entry of original) {
196
- add(copy, entry);
197
- }
198
-
199
- return copy;
200
- };
201
-
202
- generic(clone, isMap, function (original) {
203
- return cloneIterator(original, function (copy, _ref) {
204
- let [key, value] = _ref;
205
- return copy.set(clone(key), clone(value));
206
- });
207
- });
208
- generic(clone, isArray, function (original) {
209
- return cloneIterator(original, function (copy, entry) {
210
- return copy.push(clone(entry));
211
- });
212
- });
213
- generic(clone, isSet, function (original) {
214
- return cloneIterator(original, function (copy, entry) {
215
- return copy.add(clone(entry));
216
- });
217
- });
218
- generic(clone, isDate, function (original) {
219
- return new original.constructor(original);
220
- });
221
- generic(clone, isSymbol, function (original) {
222
- return original.valueOf();
223
- });
224
- generic(clone, isRegExp, function (flags) {
225
- return function (original) {
226
- var copy;
227
- copy = new original.constructor(original.source, flags.exec(original));
228
- copy.lastIndex = original.lastIndex;
168
+ // Only available within Node.js API. isBuffer will only match when Buffer is
169
+ // available on global. Otherwise, it returns false.
170
+ generic(clone, isBuffer, function(original) {
171
+ return Buffer.from(original);
172
+ });
173
+ cloneIterator = function(original, add) {
174
+ var copy, entry;
175
+ copy = new original.constructor();
176
+ for (entry of original){
177
+ add(copy, entry);
178
+ }
229
179
  return copy;
230
- };
180
+ };
181
+ generic(clone, isMap, function(original) {
182
+ return cloneIterator(original, function(copy, [key, value]) {
183
+ return copy.set(clone(key), clone(value));
184
+ });
185
+ });
186
+ generic(clone, isArray, function(original) {
187
+ return cloneIterator(original, function(copy, entry) {
188
+ return copy.push(clone(entry));
189
+ });
190
+ });
191
+ generic(clone, isSet, function(original) {
192
+ return cloneIterator(original, function(copy, entry) {
193
+ return copy.add(clone(entry));
194
+ });
195
+ });
196
+ generic(clone, isDate, function(original) {
197
+ return new original.constructor(original);
198
+ });
199
+ generic(clone, isSymbol, function(original) {
200
+ return original.valueOf();
201
+ });
202
+ generic(clone, isRegExp, function(flags) {
203
+ return function(original) {
204
+ var copy;
205
+ copy = new original.constructor(original.source, flags.exec(original));
206
+ copy.lastIndex = original.lastIndex;
207
+ return copy;
208
+ };
231
209
  }(/\w*$/));
232
- generic(clone, isFunction, function (original) {
233
- throw new Error("clone: does not clone Function");
210
+ generic(clone, isFunction, function(original) {
211
+ throw new Error("clone: does not clone Function");
234
212
  });
235
- generic(clone, isWeakMap, function (original) {
236
- throw new Error("clone: does not clone WeakMap");
213
+ generic(clone, isWeakMap, function(original) {
214
+ throw new Error("clone: does not clone WeakMap");
237
215
  });
238
- generic(clone, isError, function (original) {
239
- throw new Error("clone: does not clone Error");
216
+ generic(clone, isError, function(original) {
217
+ throw new Error("clone: does not clone Error");
240
218
  });
241
219
  size = generic({
242
- name: "size",
243
- description: "Returns the size of a given entity, if it has one.",
244
- default: function (x) {
245
- throw new TypeError(`size: not valid for type ${x.constructor}`);
246
- }
220
+ name: "size",
221
+ description: "Returns the size of a given entity, if it has one.",
222
+ default: function(x) {
223
+ throw new TypeError(`size: not valid for type ${x.constructor}`);
224
+ }
247
225
  });
248
-
249
- hasLength = function (x) {
250
- return x.length != null;
226
+ hasLength = function(x) {
227
+ return x.length != null;
251
228
  };
252
-
253
- hasByteLength = function (x) {
254
- return x.byteLength != null;
229
+ hasByteLength = function(x) {
230
+ return x.byteLength != null;
255
231
  };
256
-
257
- hasSize = function (x) {
258
- return x.size != null;
232
+ hasSize = function(x) {
233
+ return x.size != null;
259
234
  };
260
-
261
- generic(size, hasByteLength, function (x) {
262
- return x.byteLength;
235
+ generic(size, hasByteLength, function(x) {
236
+ return x.byteLength;
263
237
  });
264
- generic(size, isObject, function (x) {
265
- return Object.keys(x).length;
238
+ generic(size, isObject, function(x) {
239
+ return Object.keys(x).length;
266
240
  });
267
- generic(size, hasSize, function (x) {
268
- return x.size;
241
+ generic(size, hasSize, function(x) {
242
+ return x.size;
269
243
  });
270
- generic(size, hasLength, function (x) {
271
- return x.length;
244
+ generic(size, hasLength, function(x) {
245
+ return x.length;
272
246
  });
273
-
274
- isEmpty = function (x) {
275
- return size(x) === 0;
247
+ isEmpty = function(x) {
248
+ return Object.is(size(x), 0);
276
249
  };
250
+ export { equal, notEqual, eq, neq, clone, size, isEmpty }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiL0BkYXNoa2l0ZS9qb3kvc3JjL3ZhbHVlLmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFBLEtBQUEsRUFBQSxhQUFBLEVBQUEsRUFBQSxFQUFBLEtBQUEsRUFBQSxhQUFBLEVBQUEsUUFBQSxFQUFBLFNBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxFQUFBLEtBQUEsRUFBQSxXQUFBLEVBQUEsR0FBQSxFQUFBLFFBQUEsRUFBQSxJQUFBO0VBQUE7O0FBQUEsT0FBQTtFQUFTLFFBQVQ7RUFBbUIsS0FBbkI7RUFBMEIsTUFBMUI7Q0FBQSxNQUFBOztBQUNBLE9BQUE7RUFBUyxHQUFUO0VBQWMsTUFBZDtDQUFBLE1BQUE7O0FBQ0EsT0FBQTtFQUFTLE9BQVQ7Q0FBQSxNQUFBOztBQUVBLE9BQUE7RUFDRSxXQURGO0VBQ2UsS0FEZjtFQUVFLFFBRkY7RUFFWSxRQUZaO0VBR0UsUUFIRjtFQUdZLGFBSFo7RUFHMkIsWUFIM0I7RUFHeUMsVUFIekM7RUFJRSxLQUpGO0VBSVMsT0FKVDtFQUlrQixRQUpsQjtFQUk0QixLQUo1QjtFQUtFLFNBTEY7RUFLYSxNQUxiO0VBS3FCLFFBTHJCO0VBSytCLFFBTC9CO0VBTUUsVUFORjtFQU1jLFNBTmQ7RUFNeUIsT0FOekI7Q0FBQSxNQUFBOztBQVNBLFFBQUEsR0FBVyxDQUFDLENBQUQsQ0FBQSxHQUFBO1NBQU87QUFBUDs7QUFDWCxLQUFBLEdBQVEsUUFBQSxDQUFDLENBQUQsRUFBSSxDQUFKLENBQUE7U0FBVSxDQUFDLE1BQU0sQ0FBQyxFQUFQLENBQVUsQ0FBVixFQUFhLENBQWI7QUFBWDs7QUFDUixXQUFBLEdBQWMsUUFBQSxDQUFDLENBQUQsQ0FBQTtTQUFPLENBQUMsU0FBQSxDQUFVLENBQVYsQ0FBRCxDQUFBLElBQWlCLENBQUMsUUFBQSxDQUFTLENBQVQsQ0FBRCxDQUFqQixJQUFpQyxDQUFDLFFBQUEsQ0FBUyxDQUFULENBQUQ7QUFBeEM7O0FB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Q0FBQTtTQUFPLENBQUMsTUFBTSxDQUFDLElBQVAsQ0FBWSxDQUFaLENBQUQsQ0FBZSxDQUFDO0FBQXZCLENBQXhCOztBQUNBLE9BQUEsQ0FBUSxJQUFSLEVBQWMsT0FBZCxFQUF1QixRQUFBLENBQUMsQ0FBRCxDQUFBO1NBQU8sQ0FBQyxDQUFDO0FBQVQsQ0FBdkI7O0FBQ0EsT0FBQSxDQUFRLElBQVIsRUFBYyxTQUFkLEVBQXlCLFFBQUEsQ0FBQyxDQUFELENBQUE7U0FBTyxDQUFDLENBQUM7QUFBVCxDQUF6Qjs7QUFFQSxPQUFBLEdBQVUsUUFBQSxDQUFDLENBQUQsQ0FBQTtTQUFPLE1BQU0sQ0FBQyxFQUFQLENBQVcsSUFBQSxDQUFLLENBQUwsQ0FBWCxFQUFvQixDQUFwQjtBQUFQOztBQUVWLE9BQUE7RUFDRSxLQURGO0VBRUUsUUFGRjtFQUdFLEVBSEY7RUFJRSxHQUpGO0VBS0UsS0FMRjtFQU1FLElBTkY7RUFPRSxPQVBGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaWRlbnRpdHksIGN1cnJ5LCBiaW5hcnkgfSBmcm9tIFwiLi9mdW5jdGlvblwiXG5pbXBvcnQgeyBhbnksIG5lZ2F0ZSB9IGZyb20gXCIuL3ByZWRpY2F0ZVwiXG5pbXBvcnQgeyBnZW5lcmljIH0gZnJvbSBcIi4vZ2VuZXJpY1wiXG5cbmltcG9ydCB7XG4gIGlzVW5kZWZpbmVkLCBpc0FueVxuICBpc1N5bWJvbCwgaXNSZWdFeHAsXG4gIGlzQnVmZmVyLCBpc0FycmF5QnVmZmVyLCBpc1R5cGVkQXJyYXksIGlzRGF0YVZpZXcsXG4gIGlzTWFwLCBpc0FycmF5LCBpc09iamVjdCwgaXNTZXQsXG4gIGlzQm9vbGVhbiwgaXNEYXRlLCBpc051bWJlciwgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sIGlzV2Vha01hcCwgaXNFcnJvclxufSBmcm9tIFwiLi90eXBlXCJcblxuaGFzRXF1YWwgPSAoYSkgPT4gYT8uZXF1YWw/XG5pc05vdCA9IChhLCBiKSAtPiAhT2JqZWN0LmlzIGEsIGJcbmlzUHJpbWl0aXZlID0gKHgpIC0+IChpc0Jvb2xlYW4geCkgfHwgKGlzTnVtYmVyIHgpIHx8IChpc1N0cmluZyB4KVxuXG5lcXVhbCA9IGdlbmVyaWNcbiAgbmFtZTogXCJlcXVhbFwiXG4gIGRlc2NyaXB0aW9uOiBcIlJldHVybnMgdHJ1ZSBpZiB0d28gdmFsdWVzIGFyZSBcbiAgICBzZW1hbnRpY2FsbHkgKGRlZXBseSkgZXF1YWwsIGZhbHNlIG90aGVyd2lzZVwiXG4gIGRlZmF1bHQ6IChhLCBiKSAtPiBPYmplY3QuaXMgYSwgYlxuXG5nZW5lcmljIGVxdWFsLCBpc0FueSwgaGFzRXF1YWwsIChhLCBiKSAtPlxuICBiLmVxdWFsIGFcblxuZ2VuZXJpYyBlcXVhbCwgaGFzRXF1YWwsIGlzQW55LCAoYSwgYikgLT5cbiAgYS5lcXVhbCBiXG5cbmdlbmVyaWMgZXF1YWwsIGlzVHlwZWRBcnJheSwgaXNUeXBlZEFycmF5LCAoYSwgYikgLT5cbiAgaWYgKGlzTm90IGEubGVuZ3RoLCBiLmxlbmd0aCkgfHwgKGlzTm90IGEubmFtZSwgYi5uYW1lKVxuICAgIHJldHVybiBmYWxzZVxuICBmb3IgaSBpbiBbMC4uYS5sZW5ndGhdXG4gICAgaWYgaXNOb3QgYVtpXSwgYltpXVxuICAgICAgcmV0dXJuIGZhbHNlXG4gIHRydWVcblxuZ2VuZXJpYyBlcXVhbCwgaXNBcnJheUJ1ZmZlciwgaXNBcnJheUJ1ZmZlciwgKGEsIGIpIC0+XG4gIGlmIGlzTm90IGEuYnl0ZUxlbmd0aCwgYi5ieXRlTGVuZ3RoXG4gICAgcmV0dXJuIGZhbHNlXG4gIGVxdWFsIChuZXcgVWludDhBcnJheSBhKSwgKG5ldyBVaW50OEFycmF5IGIpXG5cbmdlbmVyaWMgZXF1YWwsIGlzRGF0YVZpZXcsIGlzRGF0YVZpZXcsIChhLCBiKSAtPlxuICBpZiAoaXNOb3QgYS5ieXRlTGVuZ3RoLCBiLmJ5dGVMZW5ndGgpIHx8IChpc05vdCBhLmJ5dGVPZmZzZXQsIGIuYnl0ZU9mZnNldClcbiAgICByZXR1cm4gZmFsc2VcbiAgZXF1YWwgYS5idWZmZXIsIGIuYnVmZmVyXG5cbmdlbmVyaWMgZXF1YWwsIGlzQnVmZmVyLCBpc0J1ZmZlciwgKGEsIGIpIC0+XG4gIGEuZXF1YWxzIGJcblxuZ2VuZXJpYyBlcXVhbCwgaXNEYXRlLCBpc0RhdGUsIChhLCBiKSAtPlxuICBPYmplY3QuaXMgYS5nZXRUaW1lKCksIGIuZ2V0VGltZSgpXG5cbmdlbmVyaWMgZXF1YWwsIGlzUmVnRXhwLCBpc1JlZ0V4cCwgKGEsIGIpIC0+XG4gIE9iamVjdC5pcyBhLnRvU3RyaW5nKCksIGIudG9TdHJpbmcoKVxuXG5nZW5lcmljIGVxdWFsLCBpc0Vycm9yLCBpc0Vycm9yLCAoYSwgYikgLT5cbiAgKGVxdWFsIGEubmFtZSwgYi5uYW1lKSAmJiAoZXF1YWwgYS5tZXNzYWdlLCBiLm1lc3NhZ2UpXG5cbmdlbmVyaWMgZXF1YWwsIGlzU3ltYm9sLCBpc1N5bWJvbCwgKGEsIGIpIC0+XG4gIE9iamVjdC5pcyBhLnZhbHVlT2YoKSwgYi52YWx1ZU9mKClcblxuZ2VuZXJpYyBlcXVhbCwgaXNNYXAsIGlzTWFwLCAoYSwgYikgLT5cbiAgaWYgaXNOb3QgYS5zaXplLCBiLnNpemVcbiAgICByZXR1cm4gZmFsc2VcbiAgZm9yIFtrZXksIHZhbHVlXSBmcm9tIGFcbiAgICBpZiAhIGVxdWFsIHZhbHVlLCAoYi5nZXQga2V5KVxuICAgICAgcmV0dXJuIGZhbHNlXG4gIHRydWVcblxuZ2VuZXJpYyBlcXVhbCwgaXNTZXQsIGlzU2V0LCAoYSwgYikgLT5cbiAgaWYgaXNOb3QgYS5zaXplLCBiLnNpemVcbiAgICByZXR1cm4gZmFsc2VcbiAgZm9yIHZhbHVlIGZyb20gYVxuICAgIGlmICEgYi5oYXMgdmFsdWVcbiAgICAgIHJldHVybiBmYWxzZVxuICB0cnVlXG5cbmdlbmVyaWMgZXF1YWwsIGlzQXJyYXksIGlzQXJyYXksIChhLCBiKSAtPlxuICBpZiBpc05vdCBhLmxlbmd0aCwgYi5sZW5ndGhcbiAgICByZXR1cm4gZmFsc2VcbiAgZm9yIGkgaW4gWzAuLmEubGVuZ3RoXVxuICAgIGlmICEgZXF1YWwgYVtpXSwgYltpXVxuICAgICAgcmV0dXJuIGZhbHNlXG4gIHRydWVcblxuZ2VuZXJpYyBlcXVhbCwgaXNPYmplY3QsIGlzT2JqZWN0LCAoYSwgYikgLT5cbiAgcmV0dXJuIHRydWUgaWYgT2JqZWN0LmlzIGEsIGJcbiAgYWtleXMgPSBPYmplY3Qua2V5cyBhXG4gIGJrZXlzID0gT2JqZWN0LmtleXMgYlxuICByZXR1cm4gZmFsc2UgaWYgaXNOb3QgYWtleXMubGVuZ3RoLCBia2V5cy5sZW5ndGhcbiAgZm9yIGsgaW4gYWtleXMgd2hlbiAhKGsgaW4gYmtleXMgJiYgZXF1YWwgYVtrXSwgYltrXSlcbiAgICByZXR1cm4gZmFsc2VcbiAgdHJ1ZVxuXG5nZW5lcmljIGVxdWFsLCBpc1ByaW1pdGl2ZSwgaXNQcmltaXRpdmUsIChhLCBiKSAtPlxuICBPYmplY3QuaXMgYSwgYlxuXG5lcXVhbCA9IGN1cnJ5IGJpbmFyeSBlcXVhbFxuXG5ub3RFcXVhbCA9IGN1cnJ5IG5lZ2F0ZSBlcXVhbFxuXG5lcSA9IGN1cnJ5IChhLCBiKSAtPiBPYmplY3QuaXMgYSwgYlxuXG5uZXEgPSBjdXJyeSBuZWdhdGUgZXFcblxuY2xvbmUgPSBnZW5lcmljXG4gIG5hbWU6IFwiY2xvbmVcIlxuICBkZXNjcmlwdGlvbjogXCJDcmVhdGVzIGEgZGVlcCBjbG9uZSBvZiBhbiBlbnRpdHkuXCJcbiAgIyBXaGVuIG5vIG1hdGNoLCB0aHJvdyB0byBhbGVydCB0aGF0IHdlIGNhbm5vdCBkZWxpdmVyIGEgZGVlcCBjbG9uZS5cbiAgZGVmYXVsdDogKGVudGl0eSkgLT5cbiAgICB0aHJvdyBuZXcgRXJyb3IgXCJjbG9uZTogbm8gbWF0Y2ggb24gZW50aXR5ICN7ZW50aXR5Py5jb25zdHJ1Y3Rvcj8ubmFtZX1cIlxuXG5pc1ByaW1pdGl2ZSA9IGFueSBbXG4gIGlzVW5kZWZpbmVkXG4gIGlzTnVtYmVyXG4gIGlzU3RyaW5nXG4gIGlzQm9vbGVhblxuXVxuXG5nZW5lcmljIGNsb25lLCBpc1ByaW1pdGl2ZSwgaWRlbnRpdHlcblxuZ2VuZXJpYyBjbG9uZSwgaXNPYmplY3QsIChvcmlnaW5hbCkgLT5cbiAgY29weSA9IG5ldyBvcmlnaW5hbC5jb25zdHJ1Y3RvcigpXG4gIGZvciBrZXksIHZhbHVlIG9mIG9yaWdpbmFsXG4gICAgY29weVtrZXldID0gY2xvbmUgdmFsdWVcbiAgY29weVxuXG5nZW5lcmljIGNsb25lLCBpc0FycmF5QnVmZmVyLCAob3JpZ2luYWwpIC0+XG4gIGNvcHkgPSBuZXcgb3JpZ2luYWwuY29uc3RydWN0b3Igb3JpZ2luYWwuYnl0ZUxlbmd0aFxuICBuZXcgVWludDhBcnJheShjb3B5KS5zZXQgbmV3IFVpbnQ4QXJyYXkgb3JpZ2luYWxcbiAgY29weVxuXG5nZW5lcmljIGNsb25lLCBpc1R5cGVkQXJyYXksIChvcmlnaW5hbCkgLT5cbiAgbmV3IG9yaWdpbmFsLmNvbnN0cnVjdG9yIChjbG9uZSBvcmlnaW5hbC5idWZmZXIpLFxuICAgIG9yaWdpbmFsLmJ5dGVPZmZzZXQsIG9yaWdpbmFsLmxlbmd0aFxuXG5nZW5lcmljIGNsb25lLCBpc0RhdGFWaWV3LCAob3JpZ2luYWwpIC0+XG4gIG5ldyBvcmlnaW5hbC5jb25zdHJ1Y3RvciAoY2xvbmUgb3JpZ2luYWwuYnVmZmVyKSxcbiAgICBvcmlnaW5hbC5ieXRlT2Zmc2V0LCBvcmlnaW5hbC5ieXRlTGVuZ3RoXG5cbiMgT25seSBhdmFpbGFibGUgd2l0aGluIE5vZGUuanMgQVBJLiBpc0J1ZmZlciB3aWxsIG9ubHkgbWF0Y2ggd2hlbiBCdWZmZXIgaXNcbiMgYXZhaWxhYmxlIG9uIGdsb2JhbC4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGZhbHNlLlxuZ2VuZXJpYyBjbG9uZSwgaXNCdWZmZXIsIChvcmlnaW5hbCkgLT5cbiAgQnVmZmVyLmZyb20gb3JpZ2luYWxcblxuY2xvbmVJdGVyYXRvciA9IChvcmlnaW5hbCwgYWRkKSAtPlxuICBjb3B5ID0gbmV3IG9yaWdpbmFsLmNvbnN0cnVjdG9yKClcbiAgYWRkIGNvcHksIGVudHJ5IGZvciBlbnRyeSBmcm9tIG9yaWdpbmFsXG4gIGNvcHlcblxuZ2VuZXJpYyBjbG9uZSwgaXNNYXAsIChvcmlnaW5hbCkgLT5cbiAgY2xvbmVJdGVyYXRvciBvcmlnaW5hbCwgKGNvcHksIFtrZXksIHZhbHVlXSkgLT5cbiAgICBjb3B5LnNldCAoY2xvbmUga2V5KSwgKGNsb25lIHZhbHVlKVxuXG5nZW5lcmljIGNsb25lLCBpc0FycmF5LCAob3JpZ2luYWwpIC0+XG4gIGNsb25lSXRlcmF0b3Igb3JpZ2luYWwsIChjb3B5LCBlbnRyeSkgLT4gY29weS5wdXNoIGNsb25lIGVudHJ5XG5cbmdlbmVyaWMgY2xvbmUsIGlzU2V0LCAob3JpZ2luYWwpIC0+XG4gIGNsb25lSXRlcmF0b3Igb3JpZ2luYWwsIChjb3B5LCBlbnRyeSkgLT4gY29weS5hZGQgY2xvbmUgZW50cnlcblxuZ2VuZXJpYyBjbG9uZSwgaXNEYXRlLCAob3JpZ2luYWwpIC0+XG4gIG5ldyBvcmlnaW5hbC5jb25zdHJ1Y3RvciBvcmlnaW5hbFxuXG5nZW5lcmljIGNsb25lLCBpc1N5bWJvbCwgKG9yaWdpbmFsKSAtPlxuICBvcmlnaW5hbC52YWx1ZU9mKClcblxuZ2VuZXJpYyBjbG9uZSwgaXNSZWdFeHAsIGRvIChmbGFncz0vXFx3KiQvKSAtPlxuICAob3JpZ2luYWwpIC0+XG4gICAgY29weSA9IG5ldyBvcmlnaW5hbC5jb25zdHJ1Y3RvciBvcmlnaW5hbC5zb3VyY2UsIChmbGFncy5leGVjIG9yaWdpbmFsKVxuICAgIGNvcHkubGFzdEluZGV4ID0gb3JpZ2luYWwubGFzdEluZGV4XG4gICAgY29weVxuXG5nZW5lcmljIGNsb25lLCBpc0Z1bmN0aW9uLCAob3JpZ2luYWwpIC0+XG4gIHRocm93IG5ldyBFcnJvciBcImNsb25lOiBkb2VzIG5vdCBjbG9uZSBGdW5jdGlvblwiXG5cbmdlbmVyaWMgY2xvbmUsIGlzV2Vha01hcCwgKG9yaWdpbmFsKSAtPlxuICB0aHJvdyBuZXcgRXJyb3IgXCJjbG9uZTogZG9lcyBub3QgY2xvbmUgV2Vha01hcFwiXG5cbmdlbmVyaWMgY2xvbmUsIGlzRXJyb3IsIChvcmlnaW5hbCkgLT5cbiAgdGhyb3cgbmV3IEVycm9yIFwiY2xvbmU6IGRvZXMgbm90IGNsb25lIEVycm9yXCJcblxuc2l6ZSA9IGdlbmVyaWNcbiAgbmFtZTogXCJzaXplXCJcbiAgZGVzY3JpcHRpb246IFwiUmV0dXJucyB0aGUgc2l6ZSBvZiBhIGdpdmVuIGVudGl0eSwgaWYgaXQgaGFzIG9uZS5cIlxuICBkZWZhdWx0OiAoeCkgLT5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yIFwic2l6ZTogbm90IHZhbGlkIGZvciB0eXBlICN7eC5jb25zdHJ1Y3Rvcn1cIlxuXG5oYXNMZW5ndGggPSAoeCkgLT4geC5sZW5ndGg/XG5oYXNCeXRlTGVuZ3RoID0gKHgpIC0+IHguYnl0ZUxlbmd0aD9cbmhhc1NpemUgPSAoeCkgLT4geC5zaXplP1xuXG5nZW5lcmljIHNpemUsIGhhc0J5dGVMZW5ndGgsICh4KSAtPiB4LmJ5dGVMZW5ndGhcbmdlbmVyaWMgc2l6ZSwgaXNPYmplY3QsICh4KSAtPiAoT2JqZWN0LmtleXMgeCkubGVuZ3RoXG5nZW5lcmljIHNpemUsIGhhc1NpemUsICh4KSAtPiB4LnNpemVcbmdlbmVyaWMgc2l6ZSwgaGFzTGVuZ3RoLCAoeCkgLT4geC5sZW5ndGhcblxuaXNFbXB0eSA9ICh4KSAtPiBPYmplY3QuaXMgKHNpemUgeCksIDBcblxuZXhwb3J0IHtcbiAgZXF1YWxcbiAgbm90RXF1YWxcbiAgZXFcbiAgbmVxXG4gIGNsb25lXG4gIHNpemVcbiAgaXNFbXB0eVxufVxuIl19
251
+ //# sourceURL=/@dashkite/joy/src/value.coffee
277
252
 
278
- export { equal, notEqual, eq, neq, clone, size, isEmpty };
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9AZGFzaGtpdGUvam95L3NyYy92YWx1ZS5jb2ZmZWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaWRlbnRpdHksIGN1cnJ5LCBiaW5hcnkgfSBmcm9tIFwiLi9mdW5jdGlvblwiXG5pbXBvcnQgeyBhbnksIG5lZ2F0ZSB9IGZyb20gXCIuL3ByZWRpY2F0ZVwiXG5pbXBvcnQgeyBnZW5lcmljIH0gZnJvbSBcIi4vZ2VuZXJpY1wiXG5cbmltcG9ydCB7XG4gIGlzVW5kZWZpbmVkLCBpc0FueVxuICBpc1N5bWJvbCwgaXNSZWdFeHAsXG4gIGlzQnVmZmVyLCBpc0FycmF5QnVmZmVyLCBpc1R5cGVkQXJyYXksIGlzRGF0YVZpZXcsXG4gIGlzTWFwLCBpc0FycmF5LCBpc09iamVjdCwgaXNTZXQsXG4gIGlzQm9vbGVhbiwgaXNEYXRlLCBpc051bWJlciwgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sIGlzV2Vha01hcCwgaXNFcnJvclxufSBmcm9tIFwiLi90eXBlXCJcblxuaGFzRXF1YWwgPSAoYSkgPT4gYT8uZXF1YWw/XG5pc05vdCA9IChhLCBiKSAtPiAhT2JqZWN0LmlzIGEsIGJcbmlzUHJpbWl0aXZlID0gKHgpIC0+IChpc0Jvb2xlYW4geCkgfHwgKGlzTnVtYmVyIHgpIHx8IChpc1N0cmluZyB4KVxuXG5lcXVhbCA9IGdlbmVyaWNcbiAgbmFtZTogXCJlcXVhbFwiXG4gIGRlc2NyaXB0aW9uOiBcIlJldHVybnMgdHJ1ZSBpZiB0d28gdmFsdWVzIGFyZSBcbiAgICBzZW1hbnRpY2FsbHkgKGRlZXBseSkgZXF1YWwsIGZhbHNlIG90aGVyd2lzZVwiXG4gIGRlZmF1bHQ6IChhLCBiKSAtPiBPYmplY3QuaXMgYSwgYlxuXG5nZW5lcmljIGVxdWFsLCBpc0FueSwgaGFzRXF1YWwsIChhLCBiKSAtPlxuICBiLmVxdWFsIGFcblxuZ2VuZXJpYyBlcXVhbCwgaGFzRXF1YWwsIGlzQW55LCAoYSwgYikgLT5cbiAgYS5lcXVhbCBiXG5cbmdlbmVyaWMgZXF1YWwsIGlzVHlwZWRBcnJheSwgaXNUeXBlZEFycmF5LCAoYSwgYikgLT5cbiAgaWYgKGlzTm90IGEubGVuZ3RoLCBiLmxlbmd0aCkgfHwgKGlzTm90IGEubmFtZSwgYi5uYW1lKVxuICAgIHJldHVybiBmYWxzZVxuICBmb3IgaSBpbiBbMC4uYS5sZW5ndGhdXG4gICAgaWYgaXNOb3QgYVtpXSwgYltpXVxuICAgICAgcmV0dXJuIGZhbHNlXG4gIHRydWVcblxuZ2VuZXJpYyBlcXVhbCwgaXNBcnJheUJ1ZmZlciwgaXNBcnJheUJ1ZmZlciwgKGEsIGIpIC0+XG4gIGlmIGlzTm90IGEuYnl0ZUxlbmd0aCwgYi5ieXRlTGVuZ3RoXG4gICAgcmV0dXJuIGZhbHNlXG4gIGVxdWFsIChuZXcgVWludDhBcnJheSBhKSwgKG5ldyBVaW50OEFycmF5IGIpXG5cbmdlbmVyaWMgZXF1YWwsIGlzRGF0YVZpZXcsIGlzRGF0YVZpZXcsIChhLCBiKSAtPlxuICBpZiAoaXNOb3QgYS5ieXRlTGVuZ3RoLCBiLmJ5dGVMZW5ndGgpIHx8IChpc05vdCBhLmJ5dGVPZmZzZXQsIGIuYnl0ZU9mZnNldClcbiAgICByZXR1cm4gZmFsc2VcbiAgZXF1YWwgYS5idWZmZXIsIGIuYnVmZmVyXG5cbmdlbmVyaWMgZXF1YWwsIGlzQnVmZmVyLCBpc0J1ZmZlciwgKGEsIGIpIC0+XG4gIGEuZXF1YWxzIGJcblxuZ2VuZXJpYyBlcXVhbCwgaXNEYXRlLCBpc0RhdGUsIChhLCBiKSAtPlxuICBPYmplY3QuaXMgYS5nZXRUaW1lKCksIGIuZ2V0VGltZSgpXG5cbmdlbmVyaWMgZXF1YWwsIGlzUmVnRXhwLCBpc1JlZ0V4cCwgKGEsIGIpIC0+XG4gIE9iamVjdC5pcyBhLnRvU3RyaW5nKCksIGIudG9TdHJpbmcoKVxuXG5nZW5lcmljIGVxdWFsLCBpc0Vycm9yLCBpc0Vycm9yLCAoYSwgYikgLT5cbiAgKGVxdWFsIGEubmFtZSwgYi5uYW1lKSAmJiAoZXF1YWwgYS5tZXNzYWdlLCBiLm1lc3NhZ2UpXG5cbmdlbmVyaWMgZXF1YWwsIGlzU3ltYm9sLCBpc1N5bWJvbCwgKGEsIGIpIC0+XG4gIE9iamVjdC5pcyBhLnZhbHVlT2YoKSwgYi52YWx1ZU9mKClcblxuZ2VuZXJpYyBlcXVhbCwgaXNNYXAsIGlzTWFwLCAoYSwgYikgLT5cbiAgaWYgaXNOb3QgYS5zaXplLCBiLnNpemVcbiAgICByZXR1cm4gZmFsc2VcbiAgZm9yIFtrZXksIHZhbHVlXSBmcm9tIGFcbiAgICBpZiAhIGVxdWFsIHZhbHVlLCAoYi5nZXQga2V5KVxuICAgICAgcmV0dXJuIGZhbHNlXG4gIHRydWVcblxuZ2VuZXJpYyBlcXVhbCwgaXNTZXQsIGlzU2V0LCAoYSwgYikgLT5cbiAgaWYgaXNOb3QgYS5zaXplLCBiLnNpemVcbiAgICByZXR1cm4gZmFsc2VcbiAgZm9yIHZhbHVlIGZyb20gYVxuICAgIGlmICEgYi5oYXMgdmFsdWVcbiAgICAgIHJldHVybiBmYWxzZVxuICB0cnVlXG5cbmdlbmVyaWMgZXF1YWwsIGlzQXJyYXksIGlzQXJyYXksIChhLCBiKSAtPlxuICBpZiBpc05vdCBhLmxlbmd0aCwgYi5sZW5ndGhcbiAgICByZXR1cm4gZmFsc2VcbiAgZm9yIGkgaW4gWzAuLmEubGVuZ3RoXVxuICAgIGlmICEgZXF1YWwgYVtpXSwgYltpXVxuICAgICAgcmV0dXJuIGZhbHNlXG4gIHRydWVcblxuZ2VuZXJpYyBlcXVhbCwgaXNPYmplY3QsIGlzT2JqZWN0LCAoYSwgYikgLT5cbiAgcmV0dXJuIHRydWUgaWYgT2JqZWN0LmlzIGEsIGJcbiAgYWtleXMgPSBPYmplY3Qua2V5cyBhXG4gIGJrZXlzID0gT2JqZWN0LmtleXMgYlxuICByZXR1cm4gZmFsc2UgaWYgaXNOb3QgYWtleXMubGVuZ3RoLCBia2V5cy5sZW5ndGhcbiAgZm9yIGsgaW4gYWtleXMgd2hlbiAhKGsgaW4gYmtleXMgJiYgZXF1YWwgYVtrXSwgYltrXSlcbiAgICByZXR1cm4gZmFsc2VcbiAgdHJ1ZVxuXG5nZW5lcmljIGVxdWFsLCBpc1ByaW1pdGl2ZSwgaXNQcmltaXRpdmUsIChhLCBiKSAtPlxuICBPYmplY3QuaXMgYSwgYlxuXG5lcXVhbCA9IGN1cnJ5IGJpbmFyeSBlcXVhbFxuXG5ub3RFcXVhbCA9IGN1cnJ5IG5lZ2F0ZSBlcXVhbFxuXG5lcSA9IGN1cnJ5IChhLCBiKSAtPiBPYmplY3QuaXMgYSwgYlxuXG5uZXEgPSBjdXJyeSBuZWdhdGUgZXFcblxuY2xvbmUgPSBnZW5lcmljXG4gIG5hbWU6IFwiY2xvbmVcIlxuICBkZXNjcmlwdGlvbjogXCJDcmVhdGVzIGEgZGVlcCBjbG9uZSBvZiBhbiBlbnRpdHkuXCJcbiAgIyBXaGVuIG5vIG1hdGNoLCB0aHJvdyB0byBhbGVydCB0aGF0IHdlIGNhbm5vdCBkZWxpdmVyIGEgZGVlcCBjbG9uZS5cbiAgZGVmYXVsdDogKGVudGl0eSkgLT5cbiAgICB0aHJvdyBuZXcgRXJyb3IgXCJjbG9uZTogbm8gbWF0Y2ggb24gZW50aXR5ICN7ZW50aXR5Py5jb25zdHJ1Y3Rvcj8ubmFtZX1cIlxuXG5pc1ByaW1pdGl2ZSA9IGFueSBbXG4gIGlzVW5kZWZpbmVkXG4gIGlzTnVtYmVyXG4gIGlzU3RyaW5nXG4gIGlzQm9vbGVhblxuXVxuXG5nZW5lcmljIGNsb25lLCBpc1ByaW1pdGl2ZSwgaWRlbnRpdHlcblxuZ2VuZXJpYyBjbG9uZSwgaXNPYmplY3QsIChvcmlnaW5hbCkgLT5cbiAgY29weSA9IG5ldyBvcmlnaW5hbC5jb25zdHJ1Y3RvcigpXG4gIGZvciBrZXksIHZhbHVlIG9mIG9yaWdpbmFsXG4gICAgY29weVtrZXldID0gY2xvbmUgdmFsdWVcbiAgY29weVxuXG5nZW5lcmljIGNsb25lLCBpc0FycmF5QnVmZmVyLCAob3JpZ2luYWwpIC0+XG4gIGNvcHkgPSBuZXcgb3JpZ2luYWwuY29uc3RydWN0b3Igb3JpZ2luYWwuYnl0ZUxlbmd0aFxuICBuZXcgVWludDhBcnJheShjb3B5KS5zZXQgbmV3IFVpbnQ4QXJyYXkgb3JpZ2luYWxcbiAgY29weVxuXG5nZW5lcmljIGNsb25lLCBpc1R5cGVkQXJyYXksIChvcmlnaW5hbCkgLT5cbiAgbmV3IG9yaWdpbmFsLmNvbnN0cnVjdG9yIChjbG9uZSBvcmlnaW5hbC5idWZmZXIpLFxuICAgIG9yaWdpbmFsLmJ5dGVPZmZzZXQsIG9yaWdpbmFsLmxlbmd0aFxuXG5nZW5lcmljIGNsb25lLCBpc0RhdGFWaWV3LCAob3JpZ2luYWwpIC0+XG4gIG5ldyBvcmlnaW5hbC5jb25zdHJ1Y3RvciAoY2xvbmUgb3JpZ2luYWwuYnVmZmVyKSxcbiAgICBvcmlnaW5hbC5ieXRlT2Zmc2V0LCBvcmlnaW5hbC5ieXRlTGVuZ3RoXG5cbiMgT25seSBhdmFpbGFibGUgd2l0aGluIE5vZGUuanMgQVBJLiBpc0J1ZmZlciB3aWxsIG9ubHkgbWF0Y2ggd2hlbiBCdWZmZXIgaXNcbiMgYXZhaWxhYmxlIG9uIGdsb2JhbC4gT3RoZXJ3aXNlLCBpdCByZXR1cm5zIGZhbHNlLlxuZ2VuZXJpYyBjbG9uZSwgaXNCdWZmZXIsIChvcmlnaW5hbCkgLT5cbiAgQnVmZmVyLmZyb20gb3JpZ2luYWxcblxuY2xvbmVJdGVyYXRvciA9IChvcmlnaW5hbCwgYWRkKSAtPlxuICBjb3B5ID0gbmV3IG9yaWdpbmFsLmNvbnN0cnVjdG9yKClcbiAgYWRkIGNvcHksIGVudHJ5IGZvciBlbnRyeSBmcm9tIG9yaWdpbmFsXG4gIGNvcHlcblxuZ2VuZXJpYyBjbG9uZSwgaXNNYXAsIChvcmlnaW5hbCkgLT5cbiAgY2xvbmVJdGVyYXRvciBvcmlnaW5hbCwgKGNvcHksIFtrZXksIHZhbHVlXSkgLT5cbiAgICBjb3B5LnNldCAoY2xvbmUga2V5KSwgKGNsb25lIHZhbHVlKVxuXG5nZW5lcmljIGNsb25lLCBpc0FycmF5LCAob3JpZ2luYWwpIC0+XG4gIGNsb25lSXRlcmF0b3Igb3JpZ2luYWwsIChjb3B5LCBlbnRyeSkgLT4gY29weS5wdXNoIGNsb25lIGVudHJ5XG5cbmdlbmVyaWMgY2xvbmUsIGlzU2V0LCAob3JpZ2luYWwpIC0+XG4gIGNsb25lSXRlcmF0b3Igb3JpZ2luYWwsIChjb3B5LCBlbnRyeSkgLT4gY29weS5hZGQgY2xvbmUgZW50cnlcblxuZ2VuZXJpYyBjbG9uZSwgaXNEYXRlLCAob3JpZ2luYWwpIC0+XG4gIG5ldyBvcmlnaW5hbC5jb25zdHJ1Y3RvciBvcmlnaW5hbFxuXG5nZW5lcmljIGNsb25lLCBpc1N5bWJvbCwgKG9yaWdpbmFsKSAtPlxuICBvcmlnaW5hbC52YWx1ZU9mKClcblxuZ2VuZXJpYyBjbG9uZSwgaXNSZWdFeHAsIGRvIChmbGFncz0vXFx3KiQvKSAtPlxuICAob3JpZ2luYWwpIC0+XG4gICAgY29weSA9IG5ldyBvcmlnaW5hbC5jb25zdHJ1Y3RvciBvcmlnaW5hbC5zb3VyY2UsIChmbGFncy5leGVjIG9yaWdpbmFsKVxuICAgIGNvcHkubGFzdEluZGV4ID0gb3JpZ2luYWwubGFzdEluZGV4XG4gICAgY29weVxuXG5nZW5lcmljIGNsb25lLCBpc0Z1bmN0aW9uLCAob3JpZ2luYWwpIC0+XG4gIHRocm93IG5ldyBFcnJvciBcImNsb25lOiBkb2VzIG5vdCBjbG9uZSBGdW5jdGlvblwiXG5cbmdlbmVyaWMgY2xvbmUsIGlzV2Vha01hcCwgKG9yaWdpbmFsKSAtPlxuICB0aHJvdyBuZXcgRXJyb3IgXCJjbG9uZTogZG9lcyBub3QgY2xvbmUgV2Vha01hcFwiXG5cbmdlbmVyaWMgY2xvbmUsIGlzRXJyb3IsIChvcmlnaW5hbCkgLT5cbiAgdGhyb3cgbmV3IEVycm9yIFwiY2xvbmU6IGRvZXMgbm90IGNsb25lIEVycm9yXCJcblxuc2l6ZSA9IGdlbmVyaWNcbiAgbmFtZTogXCJzaXplXCJcbiAgZGVzY3JpcHRpb246IFwiUmV0dXJucyB0aGUgc2l6ZSBvZiBhIGdpdmVuIGVudGl0eSwgaWYgaXQgaGFzIG9uZS5cIlxuICBkZWZhdWx0OiAoeCkgLT5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yIFwic2l6ZTogbm90IHZhbGlkIGZvciB0eXBlICN7eC5jb25zdHJ1Y3Rvcn1cIlxuXG5oYXNMZW5ndGggPSAoeCkgLT4geC5sZW5ndGg/XG5oYXNCeXRlTGVuZ3RoID0gKHgpIC0+IHguYnl0ZUxlbmd0aD9cbmhhc1NpemUgPSAoeCkgLT4geC5zaXplP1xuXG5nZW5lcmljIHNpemUsIGhhc0J5dGVMZW5ndGgsICh4KSAtPiB4LmJ5dGVMZW5ndGhcbmdlbmVyaWMgc2l6ZSwgaXNPYmplY3QsICh4KSAtPiAoT2JqZWN0LmtleXMgeCkubGVuZ3RoXG5nZW5lcmljIHNpemUsIGhhc1NpemUsICh4KSAtPiB4LnNpemVcbmdlbmVyaWMgc2l6ZSwgaGFzTGVuZ3RoLCAoeCkgLT4geC5sZW5ndGhcblxuaXNFbXB0eSA9ICh4KSAtPiBPYmplY3QuaXMgKHNpemUgeCksIDBcblxuZXhwb3J0IHtcbiAgZXF1YWxcbiAgbm90RXF1YWxcbiAgZXFcbiAgbmVxXG4gIGNsb25lXG4gIHNpemVcbiAgaXNFbXB0eVxufVxuIl0sIm5hbWVzIjpbImNsb25lIiwiY2xvbmVJdGVyYXRvciIsImVxIiwiZXF1YWwiLCJoYXNCeXRlTGVuZ3RoIiwiaGFzRXF1YWwiLCJoYXNMZW5ndGgiLCJoYXNTaXplIiwiaXNFbXB0eSIsImlzTm90IiwiaXNQcmltaXRpdmUiLCJuZXEiLCJub3RFcXVhbCIsInNpemUiLCJpbmRleE9mIiwiaWRlbnRpdHkiLCJjdXJyeSIsImJpbmFyeSIsImFueSIsIm5lZ2F0ZSIsImdlbmVyaWMiLCJpc1VuZGVmaW5lZCIsImlzQW55IiwiaXNTeW1ib2wiLCJpc1JlZ0V4cCIsImlzQnVmZmVyIiwiaXNBcnJheUJ1ZmZlciIsImlzVHlwZWRBcnJheSIsImlzRGF0YVZpZXciLCJpc01hcCIsImlzQXJyYXkiLCJpc09iamVjdCIsImlzU2V0IiwiaXNCb29sZWFuIiwiaXNEYXRlIiwiaXNOdW1iZXIiLCJpc1N0cmluZyIsImlzRnVuY3Rpb24iLCJpc1dlYWtNYXAiLCJpc0Vycm9yIiwiYSIsImIiLCJPYmplY3QiLCJpcyIsIngiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0IiwiaSIsImoiLCJyZWYiLCJsZW5ndGgiLCJieXRlTGVuZ3RoIiwiVWludDhBcnJheSIsImJ5dGVPZmZzZXQiLCJidWZmZXIiLCJlcXVhbHMiLCJnZXRUaW1lIiwidG9TdHJpbmciLCJtZXNzYWdlIiwidmFsdWVPZiIsImtleSIsInZhbHVlIiwieSIsImdldCIsImhhcyIsImFrZXlzIiwiYmtleXMiLCJrIiwibGVuIiwia2V5cyIsImNhbGwiLCJlbnRpdHkiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwib3JpZ2luYWwiLCJjb3B5Iiwic2V0IiwiQnVmZmVyIiwiZnJvbSIsImFkZCIsImVudHJ5IiwicHVzaCIsImZsYWdzIiwic291cmNlIiwiZXhlYyIsImxhc3RJbmRleCIsIlR5cGVFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBQUEsT0FBQUMsZUFBQUMsSUFBQUMsT0FBQUMsZUFBQUMsVUFBQUMsV0FBQUMsU0FBQUMsU0FBQUMsT0FBQUMsYUFBQUMsS0FBQUMsVUFBQUMsTUFBQUMsVUFBQSxFQUFBLENBQUFBLE9BQUE7QUFBQSxTQUFTQyxRQUFULEVBQW1CQyxLQUFuQixFQUEwQkMsTUFBMUIsUUFBQSxhQUFBO0FBQ0EsU0FBU0MsR0FBVCxFQUFjQyxNQUFkLFFBQUEsY0FBQTtBQUNBLFNBQVNDLE9BQVQsUUFBQSxZQUFBO0FBRUEsU0FDRUMsV0FERixFQUNlQyxLQURmLEVBRUVDLFFBRkYsRUFFWUMsUUFGWixFQUdFQyxRQUhGLEVBR1lDLGFBSFosRUFHMkJDLFlBSDNCLEVBR3lDQyxVQUh6QyxFQUlFQyxLQUpGLEVBSVNDLE9BSlQsRUFJa0JDLFFBSmxCLEVBSTRCQyxLQUo1QixFQUtFQyxTQUxGLEVBS2FDLE1BTGIsRUFLcUJDLFFBTHJCLEVBSytCQyxRQUwvQixFQU1FQyxVQU5GLEVBTWNDLFNBTmQsRUFNeUJDLE9BTnpCLFFBQUEsU0FBQTtBQVNBbEMsV0FBVyxDQUFDbUM7V0FBTSxBQUFBQSxDQUFBQSxLQUFBLE9BQUFBLEVBQUFyQyxLQUFBLEdBQUEsS0FBQSxDQUFBLEtBQUE7QUFBUDtBQUNYTSxRQUFRLFNBQUMrQixDQUFELEVBQUlDLENBQUo7V0FBVSxDQUFDQyxPQUFPQyxFQUFQLENBQVVILEdBQUdDO0FBQXhCO0FBQ1IvQixjQUFjLFNBQUNrQyxDQUFEO1dBQU8sQUFBQ1gsVUFBVVcs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