diff --git a/vendor/assets/iD/iD.css.erb b/vendor/assets/iD/iD.css.erb
index ad817760e..297ef2f53 100644
--- a/vendor/assets/iD/iD.css.erb
+++ b/vendor/assets/iD/iD.css.erb
@@ -2252,6 +2252,55 @@
stroke-dasharray: 8, 8;
}
+/** Closed Paths */
+.ideditor path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-path,
+.ideditor path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-footway,
+.ideditor path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-cycleway,
+.ideditor path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-bridleway,
+.ideditor path.line.shadow.tag-highway.tag-status.tag-status-construction.tag-construction-steps {
+ stroke-width: 15;
+}
+.ideditor path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-path,
+.ideditor path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-footway,
+.ideditor path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-cycleway,
+.ideditor path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-bridleway,
+.ideditor path.line.casing.tag-highway.tag-status.tag-status-construction.tag-construction-steps {
+ stroke-width: 5;
+ stroke-linecap: butt;
+ stroke-dasharray: none
+}
+.ideditor path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-path,
+.ideditor path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-footway,
+.ideditor path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-cycleway,
+.ideditor path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-bridleway,
+.ideditor path.line.stroke.tag-highway.tag-status.tag-status-construction.tag-construction-steps {
+ stroke-width: 4;
+ stroke-linecap: butt;
+ stroke-dasharray: 10, 10;
+}
+
+/** Proposed Paths */
+.ideditor path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-path,
+.ideditor path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-footway,
+.ideditor path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-cycleway,
+.ideditor path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-bridleway,
+.ideditor path.line.shadow.tag-highway.tag-status.tag-status-proposed.tag-proposed-steps {
+ stroke-width: 15;
+}
+.ideditor path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-path,
+.ideditor path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-footway,
+.ideditor path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-cycleway,
+.ideditor path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-bridleway,
+.ideditor path.line.casing.tag-highway.tag-status.tag-status-proposed.tag-proposed-steps {
+ stroke-width: 4.5;
+}
+.ideditor path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-path,
+.ideditor path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-footway,
+.ideditor path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-cycleway,
+.ideditor path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-bridleway,
+.ideditor path.line.stroke.tag-highway.tag-status.tag-status-proposed.tag-proposed-steps {
+ stroke-width: 3;
+}
/* Buildings */
.ideditor path.stroke.tag-building {
@@ -2399,9 +2448,8 @@
/* photo viewer div */
.ideditor .photoviewer {
position: relative;
- -webkit-flex-shrink: 0;
- -ms-flex-negative: 0;
- flex-shrink: 0;
+ -ms-flex-negative: 0;
+ flex-shrink: 0;
margin-bottom: 10px;
width: 330px;
height: 250px;
@@ -2636,14 +2684,14 @@
}
-/* OpenStreetCam Image Layer */
-.ideditor .layer-openstreetcam {
+/* KartaView Image Layer */
+.ideditor .layer-kartaview {
pointer-events: none;
}
-.ideditor .layer-openstreetcam .viewfield-group * {
+.ideditor .layer-kartaview .viewfield-group * {
fill: #20c4ff;
}
-.ideditor .layer-openstreetcam .sequence {
+.ideditor .layer-kartaview .sequence {
stroke: #20c4ff;
}
@@ -2654,20 +2702,16 @@
}
.ideditor .ms-wrapper .photo-attribution .attribution-row {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: justify;
- -webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
padding: 0 5px;
@@ -2723,22 +2767,18 @@
.ideditor .mly-wrapper .mapillary-attribution-container {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
.ideditor .mly-wrapper .mapillary-attribution-container .mapillary-attribution-icon-container {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
@@ -2751,8 +2791,8 @@
margin-right: 6px;
}
-/* OpenStreetCam viewer */
-.ideditor .osc-wrapper {
+/* KartaView viewer */
+.ideditor .kartaview-wrapper {
position: relative;
background-color: #000;
background-image: url(<%= asset_path("iD/img/loader-black.gif") %>);
@@ -2760,16 +2800,16 @@
background-repeat: no-repeat;
}
-.ideditor .osc-wrapper .photo-attribution a:active {
+.ideditor .kartaview-wrapper .photo-attribution a:active {
color: #20c4ff;
}
@media (hover: hover) {
- .ideditor .osc-wrapper .photo-attribution a:hover {
+ .ideditor .kartaview-wrapper .photo-attribution a:hover {
color: #20c4ff;
}
}
-.ideditor .osc-image-wrap {
+.ideditor .kartaview-image-wrap {
width: 100%;
height: 100%;
-webkit-transform-origin:0 0;
@@ -2870,15 +2910,12 @@
}
.ideditor .qa-header-icon {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
- -webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
}
@@ -3094,6 +3131,59 @@
.ideditor.mode-select-note .fill-partial path.area.fill {
pointer-events: visibleStroke;
}
+.ideditor svg.preset-icon-category-border path {
+ stroke-width: 1;
+ stroke: rgb(170, 170, 170);
+ fill: rgba(170, 170, 170, 0.3);
+}
+
+.ideditor .preset-category-barrier svg.preset-icon-category-border path {
+ stroke: rgb(200, 144, 144);
+ fill: rgba(200, 144, 144, 0.3);
+}
+
+.ideditor .preset-category-building svg.preset-icon-category-border path {
+ stroke: rgb(224, 110, 95);
+ fill: rgba(224, 110, 95, 0.3);
+}
+
+.ideditor .preset-category-landuse svg.preset-icon-category-border path {
+ stroke: rgb(196, 189, 25);
+ fill: rgba(196, 189, 25, 0.3);
+}
+
+.ideditor .preset-category-natural svg.preset-icon-category-border path,
+.ideditor .preset-category-playground svg.preset-icon-category-border path,
+.ideditor .preset-category-golf svg.preset-icon-category-border path {
+ stroke: rgb(140, 208, 95);
+ fill: rgba(140, 208, 95, 0.3);
+}
+
+.ideditor .preset-category-water svg.preset-icon-category-border path,
+.ideditor .preset-category-waterway svg.preset-icon-category-border path {
+ stroke: rgb(119, 211, 222);
+ fill: rgba(119, 211, 222, 0.3);
+}
+
+.ideditor .preset-category-utility svg.preset-icon-category-border path {
+ stroke: rgb(125, 125, 125);
+ fill: rgba(219, 219, 125, 0.3);
+}
+
+.ideditor .preset-category-path svg.preset-icon-category-border path {
+ stroke: rgb(221, 221, 204);
+ fill: rgba(221, 221, 204, 0.3);
+}
+
+.ideditor .preset-category-road_service svg.preset-icon-category-border path,
+.ideditor .preset-category-road_minor svg.preset-icon-category-border path,
+.ideditor .preset-category-road_major svg.preset-icon-category-border path {
+ stroke: #999;
+}
+
+.ideditor .preset-category-rail svg.preset-icon-category-border path {
+ stroke: #555;
+}
/* Basics
------------------------------------------------------- */
/* the root element of iD */
@@ -3133,12 +3223,10 @@
.ideditor .main-content {
position: relative;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
overflow: hidden;
@@ -3195,9 +3283,14 @@
font-weight: bold;
margin-bottom: 20px;
}
+.ideditor .header h2 {
+ font-size: 20px;
+ line-height: 1.25;
+ font-weight: bold;
+ margin-bottom: 0px;
+}
.ideditor h3:last-child,
-.ideditor h2:last-child,
.ideditor h4:last-child { margin-bottom: 0;}
.ideditor h3 {
@@ -3325,7 +3418,8 @@
.ideditor input[type=url],
.ideditor input[type=tel],
.ideditor input[type=email],
-.ideditor input[type=date] {
+.ideditor input[type=date],
+.ideditor input[type=color] {
/* need this since line-height interpretation may vary by font or browser */
height: 2.585em;
}
@@ -3658,16 +3752,13 @@
}
.ideditor .top-toolbar {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: justify;
- -webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
padding: 10px 0 0 0;
@@ -3685,39 +3776,31 @@
}
.ideditor .top-toolbar .toolbar-item {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 0;
- -webkit-flex: 0 1 auto;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-flow: column wrap;
-ms-flex-flow: column wrap;
flex-flow: column wrap;
-webkit-box-pack: center;
- -webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
}
.ideditor .top-toolbar .toolbar-item .item-content {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 0;
- -webkit-flex: 0 1 auto;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: center;
- -webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
height: 40px;
@@ -3749,19 +3832,16 @@
.ideditor .top-toolbar .toolbar-item.spacer {
width: 100%;
-webkit-box-flex: 2;
- -webkit-flex-grow: 2;
-ms-flex-positive: 2;
flex-grow: 2;
}
.ideditor .top-toolbar .toolbar-item:first-child {
-webkit-box-pack: start;
- -webkit-justify-content: flex-start;
-ms-flex-pack: start;
justify-content: flex-start;
}
.ideditor .top-toolbar .toolbar-item:last-child {
-webkit-box-pack: end;
- -webkit-justify-content: flex-end;
-ms-flex-pack: end;
justify-content: flex-end;
}
@@ -3770,36 +3850,30 @@
}
.ideditor button.bar-button {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
padding: 0 10px;
min-width: 30px;
white-space: nowrap;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
font-weight: bold;
}
.ideditor button.bar-button .icon {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 20px;
-ms-flex: 0 0 20px;
flex: 0 0 20px;
}
.ideditor button.bar-button .label {
-webkit-box-flex: 0;
- -webkit-flex: 0 1 auto;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
padding: 0 5px;
@@ -3891,19 +3965,15 @@
padding: 20px 40px;
position: relative;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
- -webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -3982,27 +4052,22 @@
width: 100%;
height: 2.5em;
z-index: 1;
- -webkit-flex-wrap: wrap;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
-webkit-box-pack: justify;
- -webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
list-style: none;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
.ideditor .footer > a {
-webkit-box-pack: center;
- -webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
}
@@ -4080,12 +4145,10 @@
bottom: 0;
right: 0;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
@@ -4110,12 +4173,10 @@
top: 0;
bottom: 2.5em;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
@@ -4129,12 +4190,10 @@
}
.ideditor .feature-list-pane {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
height: 100%;
@@ -4157,7 +4216,6 @@
position: relative;
height: 100%;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 100%;
-ms-flex: 1 1 100%;
flex: 1 1 100%;
}
@@ -4173,7 +4231,6 @@
position: relative;
overflow: hidden;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -4233,7 +4290,6 @@
.ideditor .feature-list-item {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
@@ -4245,7 +4301,6 @@
text-overflow: ellipsis;
overflow: hidden;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
}
@@ -4325,7 +4380,6 @@
.ideditor .preset-list-button-wrap {
min-height: 62px;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
border: 1px solid #ccc;
@@ -4337,11 +4391,9 @@
height: 100%;
position: relative;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
@@ -4356,19 +4408,15 @@
height: 60px;
text-align: center;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
- -webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -4376,7 +4424,6 @@
width: 40px;
height: 40px;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -4526,16 +4573,13 @@
.ideditor .preset-list-button .label {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
background: #f6f6f6;
@@ -4543,12 +4587,10 @@
padding: 5px 10px;
border-left: 1px solid rgba(0, 0, 0, .1);
-webkit-box-flex: 1;
- -webkit-flex: 1 1 100%;
-ms-flex: 1 1 100%;
flex: 1 1 100%;
- -webkit-align-self: stretch;
- -ms-flex-item-align: stretch;
- align-self: stretch;
+ -ms-flex-item-align: stretch;
+ align-self: stretch;
}
.ideditor[dir='rtl'] .preset-list-button .label {
text-align: right;
@@ -4601,7 +4643,6 @@
.ideditor .preset-list-button-wrap button.tag-reference-button {
width: 32px;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -4625,7 +4666,6 @@
}
.ideditor .preset-list-button-wrap .accessory-buttons {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
@@ -4678,16 +4718,13 @@
------------------------------------------------------- */
.ideditor .quick-links {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
-webkit-box-pack: end;
- -webkit-justify-content: flex-end;
-ms-flex-pack: end;
justify-content: flex-end;
padding: 5px 0 0 0;
@@ -4732,12 +4769,10 @@
.ideditor .form-field {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
margin-bottom: 10px;
@@ -4755,16 +4790,13 @@
/* A `label` element that wraps the top section */
.ideditor .field-label {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 100%;
-ms-flex: 1 1 100%;
flex: 1 1 100%;
position: relative;
@@ -4780,7 +4812,6 @@
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
padding: 5px 0 4px 10px;
@@ -4803,7 +4834,6 @@
.ideditor .field-label button {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
border-left: 1px solid #ccc;
@@ -4836,17 +4866,14 @@
/* A `div` element that wraps the bottom section */
.ideditor .form-field-input-wrap {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
width: 100%;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
border-top: 0;
@@ -4862,7 +4889,6 @@
.ideditor .form-field-input-wrap > textarea,
.ideditor .form-field-input-wrap > ul.chiplist {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
border: 1px solid #ccc;
@@ -4878,7 +4904,6 @@
/* Buttons inside fields */
.ideditor .form-field-button {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: 32px;
@@ -4907,6 +4932,34 @@
fill: #333;
opacity: .5;
}
+.ideditor .form-field-button.colour-preview {
+ border-radius: 0 0 4px 0;
+}
+.ideditor .form-field-button.colour-preview > div.colour-box {
+ border: 3px solid #fff;
+ height: 100%;
+ border-radius: 8px;
+ cursor: pointer;
+ text-align: center;
+ line-height: 20px;
+ padding: 1px 0 0 1px;
+}
+.ideditor .inspector-hover .form-field-button.colour-preview > div.colour-box {
+ border-color: #ececec;
+}
+.ideditor .form-field-button.colour-preview:active > div.colour-box,
+.ideditor .form-field-button.colour-preview:focus > div.colour-box {
+ border-color: #f1f1f1;
+}
+@media (hover: hover) {
+ .ideditor .form-field-button.colour-preview:hover > div.colour-box {
+ border-color: #f1f1f1;
+ }
+}
+.ideditor .form-field-button.colour-selector {
+ visibility: hidden;
+ position: absolute;
+}
/* round corners of first/last child elements */
@@ -4923,16 +4976,13 @@
.ideditor .form-field-input-access,
.ideditor .form-field-input-cycleway {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
}
@@ -4941,7 +4991,6 @@
------------------------------------------------------- */
.ideditor .form-field ul.rows {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
border: 1px solid #ccc;
@@ -4958,19 +5007,16 @@
}
.ideditor .form-field ul.rows li {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
}
.ideditor .form-field ul.rows li.labeled-input > span,
.ideditor .form-field ul.rows li.labeled-input > div {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
width: 100%;
@@ -5043,16 +5089,13 @@
.ideditor .form-field-input-multicombo li {
display: -webkit-inline-box;
- display: -webkit-inline-flex;
display: -ms-inline-flexbox;
display: inline-flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
margin-bottom: 3px;
@@ -5101,7 +5144,6 @@
.ideditor .form-field-input-multicombo li.chip span {
display: block;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
overflow: hidden;
@@ -5118,7 +5160,6 @@
display: block;
text-align: center;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -5146,12 +5187,13 @@
/* Field - Text / Numeric
------------------------------------------------------- */
-.ideditor .form-field-input-text > input:only-of-type,
+.ideditor .form-field-input-text > input:only-child,
.ideditor .form-field-input-tel > input:only-of-type,
.ideditor .form-field-input-email > input:only-of-type,
.ideditor .form-field-input-url > input:only-child {
border-radius: 0 0 4px 4px;
}
+.ideditor .form-field-input-text > input:not(:only-child),
.ideditor .form-field-input-url > input:not(:only-child) {
border-radius: 0 0 0 4px;
}
@@ -5204,11 +5246,9 @@
------------------------------------------------------- */
.ideditor .form-field-input-check {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
background: #fff;
@@ -5220,7 +5260,6 @@
}
.ideditor .form-field-input-check > input[type="checkbox"] {
-webkit-box-flex: 0;
- -webkit-flex: 0 1 auto;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
width: 20px;
@@ -5228,7 +5267,6 @@
}
.ideditor .form-field-input-check > span {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
}
@@ -5237,7 +5275,6 @@
}
.ideditor .form-field-input-check > .reverser {
-webkit-box-flex: 0;
- -webkit-flex: 0 1 auto;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
background-color: #eff2f7;
@@ -5285,35 +5322,28 @@
------------------------------------------------------- */
.ideditor .form-field-input-radio {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
}
.ideditor .form-field-input-radio > label {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
width: 100%;
@@ -5345,14 +5375,12 @@
}
.ideditor .form-field-input-radio > label > input[type="radio"] {
-webkit-box-flex: 0;
- -webkit-flex: 0 1 auto;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
width: 20px;
}
.ideditor .form-field-input-radio > label > span {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
overflow: hidden;
@@ -5378,21 +5406,18 @@
.ideditor .form-field-input-roadheight input.roadheight-number,
.ideditor .form-field-input-roadheight input.roadheight-secondary-number,
.ideditor .form-field-input-roadspeed input.roadspeed-number {
- -webkit-flex-basis: 0;
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
+ -ms-flex-preferred-size: 0;
+ flex-basis: 0;
}
.ideditor .form-field-input-roadheight input.roadheight-unit,
.ideditor .form-field-input-roadheight input.roadheight-secondary-unit {
-webkit-box-flex: 0;
- -webkit-flex: 0 1 auto;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
width: 60px;
}
.ideditor .form-field-input-roadspeed input.roadspeed-unit {
-webkit-box-flex: 0;
- -webkit-flex: 0 1 auto;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
width: 80px;
@@ -5444,9 +5469,8 @@
/* nested subfields for name in different languages */
.ideditor .localized-multilingual {
padding: 0 10px;
- -webkit-flex-basis: 100%;
- -ms-flex-preferred-size: 100%;
- flex-basis: 100%;
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
}
.ideditor .localized-multilingual .entry {
position: relative;
@@ -5483,16 +5507,13 @@
------------------------------------------------------- */
.ideditor .form-field-input-address {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
border: 1px solid #ccc;
@@ -5501,11 +5522,9 @@
.ideditor .addr-row {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
width: 100%;
@@ -5513,7 +5532,6 @@
.ideditor .addr-row > input {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
border-radius: 0;
@@ -5552,16 +5570,13 @@
------------------------------------------------------- */
.ideditor .form-field-input-wikipedia {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
}
@@ -5569,16 +5584,13 @@
.ideditor .wiki-lang-container,
.ideditor .wiki-title-container {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
width: 100%;
@@ -5587,7 +5599,6 @@
.ideditor .wiki-lang-container > input.wiki-lang,
.ideditor .wiki-title-container > input.wiki-title {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
border-top: 0;
@@ -5780,9 +5791,8 @@
height: 5px;
width: 30px !important;
margin-left: -30px;
- -webkit-align-self: center;
- -ms-flex-item-align: center;
- align-self: center;
+ -ms-flex-item-align: center;
+ align-self: center;
vertical-align: middle;
cursor: pointer;
}
@@ -5927,20 +5937,16 @@
.ideditor .more-fields label {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: justify;
- -webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
@@ -5948,7 +5954,6 @@
.ideditor .more-fields input {
margin-left: 10px;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
}
@@ -5967,23 +5972,19 @@
------------------------------------------------------- */
.ideditor .raw-tag-options {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: end;
- -webkit-justify-content: flex-end;
-ms-flex-pack: end;
justify-content: flex-end;
margin-top: -28px;
}
.ideditor button.raw-tag-option {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
padding: 3px;
@@ -6039,12 +6040,10 @@
}
.ideditor .tag-row .inner-wrap {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
width: 100%;
@@ -6053,7 +6052,6 @@
.ideditor .tag-row .key-wrap,
.ideditor .tag-row .value-wrap {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 50%;
-ms-flex: 1 1 50%;
flex: 1 1 50%;
}
@@ -6107,7 +6105,6 @@
}
.ideditor .tag-row button {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: 32px;
@@ -6171,7 +6168,6 @@
.ideditor .tag-reference-body {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
width: 100%;
@@ -6257,7 +6253,6 @@
.ideditor .member-row-new .member-entity-input {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 100%;
-ms-flex: 1 1 100%;
flex: 1 1 100%;
border-radius: 4px 4px 0 0;
@@ -6275,13 +6270,11 @@
/* add tag, add relation buttons */
.ideditor .add-row {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
width: 100%;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
}
@@ -6289,13 +6282,11 @@
.ideditor .add-row .add-relation,
.ideditor .add-row .space-value {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 50%;
-ms-flex: 1 1 50%;
flex: 1 1 50%;
}
.ideditor .add-row .space-buttons {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 62px;
-ms-flex: 0 0 62px;
flex: 0 0 62px;
}
@@ -6330,16 +6321,13 @@
border-radius: 5px;
border: 1px solid #ccc;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
@@ -6349,7 +6337,6 @@
background-color: #fff;
padding: 10px;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
position: relative;
@@ -6386,7 +6373,6 @@
background-color: #f6f6f6;
padding: 0 15px;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 100%;
-ms-flex: 1 1 100%;
flex: 1 1 100%;
font-size: 14px;
@@ -6415,19 +6401,16 @@
border: 1px solid #ccc;
margin: 10px auto;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
}
.ideditor .comment-avatar {
padding: 10px;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -6442,12 +6425,10 @@
.ideditor .comment-main {
padding: 10px 10px 10px 0;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 100%;
-ms-flex: 1 1 100%;
flex: 1 1 100%;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-flow: column nowrap;
-ms-flex-flow: column nowrap;
flex-flow: column nowrap;
overflow: hidden;
@@ -6460,11 +6441,9 @@
.ideditor .comment-metadata {
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: justify;
- -webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
}
@@ -6497,12 +6476,10 @@
border-radius: 4px;
border: 1px solid #ccc;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
@@ -6547,16 +6524,13 @@
border-radius: 5px;
border: 1px solid #ccc;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
@@ -6565,7 +6539,6 @@
background-color: #fff;
padding: 10px;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
position: relative;
@@ -6589,7 +6562,6 @@
background-color: #f6f6f6;
padding: 0 15px;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 100%;
-ms-flex: 1 1 100%;
flex: 1 1 100%;
font-size: 14px;
@@ -6615,16 +6587,13 @@
height: 100%;
pointer-events: none;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: reverse;
- -webkit-flex-direction: row-reverse;
-ms-flex-direction: row-reverse;
flex-direction: row-reverse;
-webkit-box-align: end;
- -webkit-align-items: flex-end;
-ms-flex-align: end;
align-items: flex-end;
overflow: hidden;
@@ -6642,29 +6611,37 @@
/* Map Controls
------------------------------------------------------- */
+.ideditor .map-controls-wrap {
+ position: absolute;
+ left: 0;
+ right: 0;
+ height: 100%;
+ z-index: 100;
+ display: block;
+ overflow-x: hidden;
+ overflow-y: auto;
+ pointer-events: none;
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+}
+.ideditor .map-controls-wrap::-webkit-scrollbar {
+ display: none;
+}
.ideditor .map-controls {
right: 0;
top: 0;
width: 40px;
position: absolute;
- z-index: 100;
bottom: 0;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
padding: 5px 0;
pointer-events: none;
- overflow-x: hidden;
- overflow-y: auto;
-}
-.ideditor .map-controls::-webkit-scrollbar {
- display: none;
}
.ideditor .map-controls:before {
content: '';
@@ -6674,7 +6651,6 @@
height: 100%;
max-height: 70px;
-webkit-box-flex: 0;
- -webkit-flex: 0 1 auto;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
}
@@ -6686,12 +6662,10 @@
.ideditor .map-control {
position: relative;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
@@ -6819,7 +6793,6 @@
color: #7092ff;
position: relative;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
@@ -6859,7 +6832,6 @@
.ideditor .layer-list li.best > div.best {
padding: 5px;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -6879,15 +6851,12 @@
padding: 5px 10px;
cursor: pointer;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
overflow: hidden;
@@ -6907,7 +6876,6 @@
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
-webkit-box-flex: 1;
- -webkit-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
}
@@ -6963,12 +6931,10 @@
.ideditor .issue-label .issue-text {
width: 100%;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
cursor: pointer;
@@ -6978,21 +6944,18 @@
.ideditor .issue-text .issue-icon {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
padding: 2px 3px;
}
.ideditor .issue-text .issue-message {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
padding: 4px 5px;
}
.ideditor .issue-label .issue-autofix {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
padding: 5px 8px;
@@ -7001,7 +6964,6 @@
height: unset;
width: 32px;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
border-left: 1px solid #ccc;
@@ -7026,7 +6988,6 @@
.ideditor button.autofix.action {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 20px;
-ms-flex: 0 0 20px;
flex: 0 0 20px;
height: 20px;
@@ -7048,16 +7009,13 @@
/* fix all */
.ideditor .autofix-all {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: end;
- -webkit-justify-content: flex-end;
-ms-flex-pack: end;
justify-content: flex-end;
margin-top: -25px;
@@ -7215,16 +7173,13 @@
}
.ideditor .section-footer {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: end;
- -webkit-justify-content: flex-end;
-ms-flex-pack: end;
justify-content: flex-end;
height: 30px;
@@ -7239,7 +7194,6 @@
background: #c6ffca;
padding: 5px !important;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
@@ -7343,7 +7297,6 @@
.ideditor .issue-info {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
width: 100%;
@@ -7386,22 +7339,21 @@
padding: 10px;
}
-.ideditor .display-control h5 {
+.ideditor .display-options-container label {
padding-bottom: 0;
padding-top: 10px;
}
-.ideditor .display-control h5 span {
+.ideditor .display-options-container label span {
+ font-weight: bold;
margin: 5px;
}
.ideditor .display-control .control-wrap {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
width: 100%;
@@ -7409,7 +7361,6 @@
.ideditor .display-control .display-option-input {
height: 20px;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 100%;
-ms-flex: 1 1 100%;
flex: 1 1 100%;
}
@@ -7422,7 +7373,6 @@
vertical-align: text-bottom;
border-radius: 4px;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -7453,15 +7403,12 @@
border-radius: 2px;
padding: 20px 0;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
- -webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
margin: 45px;
@@ -7586,7 +7533,6 @@
------------------------------------------------------- */
.ideditor .map-panes {
-webkit-box-flex: 0;
- -webkit-flex: 0 1 auto;
-ms-flex: 0 1 auto;
flex: 0 1 auto;
position: relative;
@@ -7601,12 +7547,10 @@
height: 100%;
z-index: 10;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
@@ -7617,21 +7561,17 @@
.ideditor .pane-heading {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: justify;
- -webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
border-bottom: 1px solid #ccc;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -8121,16 +8061,13 @@
------------------------------------------------------- */
.ideditor .info-panels {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row wrap-reverse;
-ms-flex-flow: row wrap-reverse;
flex-flow: row wrap-reverse;
-webkit-box-pack: end;
- -webkit-justify-content: flex-end;
-ms-flex-pack: end;
justify-content: flex-end;
width: 100%;
@@ -8157,7 +8094,6 @@
.ideditor .panel-container {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
margin: 0 2px 2px 0;
@@ -8176,11 +8112,9 @@
.ideditor .panel-title {
padding: 5px 10px;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
- -webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
}
@@ -8259,17 +8193,14 @@
border-radius: 0;
pointer-events: none;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-ms-user-select: element;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -8284,20 +8215,16 @@
.ideditor .main-footer-wrap,
.ideditor .flash-wrap {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 100%;
-ms-flex: 0 0 100%;
flex: 0 0 100%;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-pack: justify;
- -webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
height: 100%;
@@ -8329,15 +8256,12 @@
left: 5px;
right: 5px;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
- -webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-align: end;
- -webkit-align-items: flex-end;
-ms-flex-align: end;
align-items: flex-end;
z-index: 0;
@@ -8390,20 +8314,16 @@
------------------------------------------------------- */
.ideditor .flash-content {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-flex: 1;
- -webkit-flex: 1 0 auto;
-ms-flex: 1 0 auto;
flex: 1 0 auto;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
padding: 2px;
@@ -8411,7 +8331,6 @@
.ideditor .flash-icon {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
width: 20px;
@@ -8438,7 +8357,6 @@
.ideditor .flash-text {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
}
@@ -8449,7 +8367,6 @@
vertical-align: bottom;
width: 250px;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
-webkit-user-select: none;
@@ -8457,9 +8374,8 @@
-ms-user-select: none;
user-select: none;
height: 30px;
- -webkit-align-self: center;
- -ms-flex-item-align: center;
- align-self: center;
+ -ms-flex-item-align: center;
+ align-self: center;
}
.ideditor .scale-block .scale {
@@ -8492,7 +8408,6 @@
------------------------------------------------------- */
.ideditor .map-footer-bar .info-block {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 100%;
-ms-flex: 1 1 100%;
flex: 1 1 100%;
overflow: hidden;
@@ -8500,17 +8415,14 @@
.ideditor .map-footer-list {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row nowrap;
-ms-flex-flow: row nowrap;
flex-flow: row nowrap;
height: 100%;
-webkit-box-pack: end;
- -webkit-justify-content: flex-end;
-ms-flex-pack: end;
justify-content: flex-end;
}
@@ -8518,11 +8430,9 @@
.ideditor .map-footer-list li {
height: 100%;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
white-space: nowrap;
@@ -8583,7 +8493,6 @@
padding: 1px 10px;
color: #eee;
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
}
@@ -8620,7 +8529,6 @@
/* For an icon (e.g. new version) */
.ideditor .badge {
display: -webkit-inline-box;
- display: -webkit-inline-flex;
display: -ms-inline-flexbox;
display: inline-flex;
background: #d32232;
@@ -8628,11 +8536,9 @@
height: 21px;
border-radius: 50%;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
- -webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
}
@@ -8648,7 +8554,6 @@
height: 11px;
color: #fff;
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
}
@@ -8686,12 +8591,10 @@
min-width: 200px;
max-width: 550px;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
@@ -8749,15 +8652,12 @@
.ideditor .save-section .buttons {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
- -webkit-flex-wrap: wrap;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- -webkit-justify-content: space-around;
- -ms-flex-pack: distribute;
- justify-content: space-around;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
}
.ideditor .save-section .buttons .action,
@@ -8773,7 +8673,6 @@
}
.ideditor .modal-actions {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
}
@@ -8917,6 +8816,14 @@
color: #7092ff;
}
+.ideditor .modal-splash .section-preferences-third-party {
+ margin-top: 20px;
+}
+
+.ideditor .modal-splash .section-preferences-third-party .privacy-link {
+ display: none;
+}
+
/* Shortcuts Modal
------------------------------------------------------- */
@@ -8962,17 +8869,14 @@
.ideditor .modal-shortcuts .shortcut-tab {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-flow: row wrap;
-ms-flex-flow: row wrap;
flex-flow: row wrap;
- -webkit-justify-content: space-around;
- -ms-flex-pack: distribute;
- justify-content: space-around;
+ -ms-flex-pack: distribute;
+ justify-content: space-around;
}
.ideditor .modal-shortcuts .shortcut-column {
@@ -8981,7 +8885,6 @@
.ideditor .modal-shortcuts .shortcut-tab-tools .shortcut-column {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 100%;
-ms-flex: 1 1 100%;
flex: 1 1 100%;
width: 100%;
@@ -9341,22 +9244,26 @@
/* dark tooltips for sidebar / panels */
.ideditor .tooltip.dark.top .popover-arrow,
.ideditor .map-pane .tooltip.top .popover-arrow,
-.ideditor .sidebar .tooltip.top .popover-arrow {
+.ideditor .sidebar .tooltip.top .popover-arrow,
+.ideditor .modal .tooltip.top .popover-arrow {
border-top-color: #000;
}
.ideditor .tooltip.dark.bottom .popover-arrow,
.ideditor .map-pane .tooltip.bottom .popover-arrow,
-.ideditor .sidebar .tooltip.bottom .popover-arrow {
+.ideditor .sidebar .tooltip.bottom .popover-arrow,
+.ideditor .modal .tooltip.bottom .popover-arrow {
border-bottom-color: #000;
}
.ideditor .tooltip.dark.left .popover-arrow,
.ideditor .map-pane .tooltip.left .popover-arrow,
-.ideditor .sidebar .tooltip.left .popover-arrow {
+.ideditor .sidebar .tooltip.left .popover-arrow,
+.ideditor .modal .tooltip.left .popover-arrow {
border-left-color: #000;
}
.ideditor .tooltip.dark.right .popover-arrow,
.ideditor .map-pane .tooltip.right .popover-arrow,
-.ideditor .sidebar .tooltip.right .popover-arrow {
+.ideditor .sidebar .tooltip.right .popover-arrow,
+.ideditor .modal .tooltip.right .popover-arrow {
border-right-color: #000;
}
.ideditor .tooltip.dark .popover-inner,
@@ -9367,7 +9274,8 @@
.ideditor .map-pane .keyhint-wrap,
.ideditor .sidebar .popover-inner,
.ideditor .sidebar .tooltip-heading,
-.ideditor .sidebar .keyhint-wrap {
+.ideditor .sidebar .keyhint-wrap,
+.ideditor .modal .popover-inner {
background: #000;
color: #ccc;
}
@@ -9416,12 +9324,10 @@
.ideditor .edit-menu {
position: absolute;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
- -webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
background: #fff;
@@ -9435,11 +9341,9 @@
.ideditor .edit-menu-item {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
- -webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
border-radius: 0;
@@ -9524,12 +9428,10 @@
.ideditor .intro-nav-wrap {
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
position: absolute;
@@ -9542,7 +9444,6 @@
.ideditor .intro-nav-wrap .intro-nav-wrap-logo {
-webkit-box-flex: 0;
- -webkit-flex: 0 0 auto;
-ms-flex: 0 0 auto;
flex: 0 0 auto;
height: 40px;
@@ -9554,23 +9455,19 @@
.ideditor .intro-nav-wrap .joined {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 auto;
-ms-flex: 1 1 auto;
flex: 1 1 auto;
display: -webkit-box;
- display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
- -webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
}
.ideditor .intro-nav-wrap button.chapter {
-webkit-box-flex: 1;
- -webkit-flex: 1 1 100%;
-ms-flex: 1 1 100%;
flex: 1 1 100%;
padding: 0px 5px;
diff --git a/vendor/assets/iD/iD.js b/vendor/assets/iD/iD.js
index 929da2dd8..c91915940 100644
--- a/vendor/assets/iD/iD.js
+++ b/vendor/assets/iD/iD.js
@@ -7,7 +7,7 @@
};
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
- var global$F =
+ var global$1m =
// eslint-disable-next-line es/no-global-this -- safe
check(typeof globalThis == 'object' && globalThis) ||
check(typeof window == 'object' && window) ||
@@ -19,7 +19,7 @@
var objectGetOwnPropertyDescriptor = {};
- var fails$N = function (exec) {
+ var fails$S = function (exec) {
try {
return !!exec();
} catch (error) {
@@ -27,29 +27,35 @@
}
};
- var fails$M = fails$N;
+ var fails$R = fails$S;
// Detect IE8's incomplete defineProperty implementation
- var descriptors = !fails$M(function () {
+ var descriptors = !fails$R(function () {
// eslint-disable-next-line es/no-object-defineproperty -- required for testing
return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
});
+ var call$q = Function.prototype.call;
+
+ var functionCall = call$q.bind ? call$q.bind(call$q) : function () {
+ return call$q.apply(call$q, arguments);
+ };
+
var objectPropertyIsEnumerable = {};
- var $propertyIsEnumerable$1 = {}.propertyIsEnumerable;
+ var $propertyIsEnumerable$2 = {}.propertyIsEnumerable;
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
var getOwnPropertyDescriptor$5 = Object.getOwnPropertyDescriptor;
// Nashorn ~ JDK8 bug
- var NASHORN_BUG = getOwnPropertyDescriptor$5 && !$propertyIsEnumerable$1.call({ 1: 2 }, 1);
+ var NASHORN_BUG = getOwnPropertyDescriptor$5 && !$propertyIsEnumerable$2.call({ 1: 2 }, 1);
// `Object.prototype.propertyIsEnumerable` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable
objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
var descriptor = getOwnPropertyDescriptor$5(this, V);
return !!descriptor && descriptor.enumerable;
- } : $propertyIsEnumerable$1;
+ } : $propertyIsEnumerable$2;
var createPropertyDescriptor$7 = function (bitmap, value) {
return {
@@ -60,30 +66,53 @@
};
};
- var toString$2 = {}.toString;
+ var FunctionPrototype$3 = Function.prototype;
+ var bind$h = FunctionPrototype$3.bind;
+ var call$p = FunctionPrototype$3.call;
+ var callBind = bind$h && bind$h.bind(call$p);
- var classofRaw$1 = function (it) {
- return toString$2.call(it).slice(8, -1);
+ var functionUncurryThis = bind$h ? function (fn) {
+ return fn && callBind(call$p, fn);
+ } : function (fn) {
+ return fn && function () {
+ return call$p.apply(fn, arguments);
+ };
};
- var fails$L = fails$N;
- var classof$c = classofRaw$1;
+ var uncurryThis$X = functionUncurryThis;
- var split$1 = ''.split;
+ var toString$n = uncurryThis$X({}.toString);
+ var stringSlice$c = uncurryThis$X(''.slice);
+
+ var classofRaw$1 = function (it) {
+ return stringSlice$c(toString$n(it), 8, -1);
+ };
+
+ var global$1l = global$1m;
+ var uncurryThis$W = functionUncurryThis;
+ var fails$Q = fails$S;
+ var classof$e = classofRaw$1;
+
+ var Object$5 = global$1l.Object;
+ var split$4 = uncurryThis$W(''.split);
// fallback for non-array-like ES3 and non-enumerable old V8 strings
- var indexedObject = fails$L(function () {
+ var indexedObject = fails$Q(function () {
// throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
// eslint-disable-next-line no-prototype-builtins -- safe
- return !Object('z').propertyIsEnumerable(0);
+ return !Object$5('z').propertyIsEnumerable(0);
}) ? function (it) {
- return classof$c(it) == 'String' ? split$1.call(it, '') : Object(it);
- } : Object;
+ return classof$e(it) == 'String' ? split$4(it, '') : Object$5(it);
+ } : Object$5;
+
+ var global$1k = global$1m;
+
+ var TypeError$o = global$1k.TypeError;
// `RequireObjectCoercible` abstract operation
// https://tc39.es/ecma262/#sec-requireobjectcoercible
var requireObjectCoercible$e = function (it) {
- if (it == undefined) throw TypeError("Can't call method on " + it);
+ if (it == undefined) throw TypeError$o("Can't call method on " + it);
return it;
};
@@ -91,74 +120,316 @@
var IndexedObject$4 = indexedObject;
var requireObjectCoercible$d = requireObjectCoercible$e;
- var toIndexedObject$b = function (it) {
+ var toIndexedObject$c = function (it) {
return IndexedObject$4(requireObjectCoercible$d(it));
};
- var isObject$r = function (it) {
- return typeof it === 'object' ? it !== null : typeof it === 'function';
+ // `IsCallable` abstract operation
+ // https://tc39.es/ecma262/#sec-iscallable
+ var isCallable$r = function (argument) {
+ return typeof argument == 'function';
};
- var isObject$q = isObject$r;
+ var isCallable$q = isCallable$r;
- // `ToPrimitive` abstract operation
- // https://tc39.es/ecma262/#sec-toprimitive
- // instead of the ES6 spec version, we didn't implement @@toPrimitive case
- // and the second argument - flag - preferred type is a string
- var toPrimitive$7 = function (input, PREFERRED_STRING) {
- if (!isObject$q(input)) return input;
+ var isObject$s = function (it) {
+ return typeof it == 'object' ? it !== null : isCallable$q(it);
+ };
+
+ var global$1j = global$1m;
+ var isCallable$p = isCallable$r;
+
+ var aFunction = function (argument) {
+ return isCallable$p(argument) ? argument : undefined;
+ };
+
+ var getBuiltIn$b = function (namespace, method) {
+ return arguments.length < 2 ? aFunction(global$1j[namespace]) : global$1j[namespace] && global$1j[namespace][method];
+ };
+
+ var uncurryThis$V = functionUncurryThis;
+
+ var objectIsPrototypeOf = uncurryThis$V({}.isPrototypeOf);
+
+ var getBuiltIn$a = getBuiltIn$b;
+
+ var engineUserAgent = getBuiltIn$a('navigator', 'userAgent') || '';
+
+ var global$1i = global$1m;
+ var userAgent$7 = engineUserAgent;
+
+ var process$4 = global$1i.process;
+ var Deno = global$1i.Deno;
+ var versions = process$4 && process$4.versions || Deno && Deno.version;
+ var v8 = versions && versions.v8;
+ var match, version$1;
+
+ if (v8) {
+ match = v8.split('.');
+ // in old Chrome, versions of V8 isn't V8 = Chrome / 10
+ // but their correct versions are not interesting for us
+ version$1 = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
+ }
+
+ // BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`
+ // so check `userAgent` even if `.v8` exists, but 0
+ if (!version$1 && userAgent$7) {
+ match = userAgent$7.match(/Edge\/(\d+)/);
+ if (!match || match[1] >= 74) {
+ match = userAgent$7.match(/Chrome\/(\d+)/);
+ if (match) version$1 = +match[1];
+ }
+ }
+
+ var engineV8Version = version$1;
+
+ /* eslint-disable es/no-symbol -- required for testing */
+
+ var V8_VERSION$3 = engineV8Version;
+ var fails$P = fails$S;
+
+ // eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing
+ var nativeSymbol = !!Object.getOwnPropertySymbols && !fails$P(function () {
+ var symbol = Symbol();
+ // Chrome 38 Symbol has incorrect toString conversion
+ // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances
+ return !String(symbol) || !(Object(symbol) instanceof Symbol) ||
+ // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
+ !Symbol.sham && V8_VERSION$3 && V8_VERSION$3 < 41;
+ });
+
+ /* eslint-disable es/no-symbol -- required for testing */
+
+ var NATIVE_SYMBOL$3 = nativeSymbol;
+
+ var useSymbolAsUid = NATIVE_SYMBOL$3
+ && !Symbol.sham
+ && typeof Symbol.iterator == 'symbol';
+
+ var global$1h = global$1m;
+ var getBuiltIn$9 = getBuiltIn$b;
+ var isCallable$o = isCallable$r;
+ var isPrototypeOf$9 = objectIsPrototypeOf;
+ var USE_SYMBOL_AS_UID$1 = useSymbolAsUid;
+
+ var Object$4 = global$1h.Object;
+
+ var isSymbol$6 = USE_SYMBOL_AS_UID$1 ? function (it) {
+ return typeof it == 'symbol';
+ } : function (it) {
+ var $Symbol = getBuiltIn$9('Symbol');
+ return isCallable$o($Symbol) && isPrototypeOf$9($Symbol.prototype, Object$4(it));
+ };
+
+ var global$1g = global$1m;
+
+ var String$6 = global$1g.String;
+
+ var tryToString$5 = function (argument) {
+ try {
+ return String$6(argument);
+ } catch (error) {
+ return 'Object';
+ }
+ };
+
+ var global$1f = global$1m;
+ var isCallable$n = isCallable$r;
+ var tryToString$4 = tryToString$5;
+
+ var TypeError$n = global$1f.TypeError;
+
+ // `Assert: IsCallable(argument) is true`
+ var aCallable$a = function (argument) {
+ if (isCallable$n(argument)) return argument;
+ throw TypeError$n(tryToString$4(argument) + ' is not a function');
+ };
+
+ var aCallable$9 = aCallable$a;
+
+ // `GetMethod` abstract operation
+ // https://tc39.es/ecma262/#sec-getmethod
+ var getMethod$7 = function (V, P) {
+ var func = V[P];
+ return func == null ? undefined : aCallable$9(func);
+ };
+
+ var global$1e = global$1m;
+ var call$o = functionCall;
+ var isCallable$m = isCallable$r;
+ var isObject$r = isObject$s;
+
+ var TypeError$m = global$1e.TypeError;
+
+ // `OrdinaryToPrimitive` abstract operation
+ // https://tc39.es/ecma262/#sec-ordinarytoprimitive
+ var ordinaryToPrimitive$1 = function (input, pref) {
var fn, val;
- if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject$q(val = fn.call(input))) return val;
- if (typeof (fn = input.valueOf) == 'function' && !isObject$q(val = fn.call(input))) return val;
- if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject$q(val = fn.call(input))) return val;
- throw TypeError("Can't convert object to primitive value");
+ if (pref === 'string' && isCallable$m(fn = input.toString) && !isObject$r(val = call$o(fn, input))) return val;
+ if (isCallable$m(fn = input.valueOf) && !isObject$r(val = call$o(fn, input))) return val;
+ if (pref !== 'string' && isCallable$m(fn = input.toString) && !isObject$r(val = call$o(fn, input))) return val;
+ throw TypeError$m("Can't convert object to primitive value");
};
+ var shared$5 = {exports: {}};
+
+ var isPure = false;
+
+ var global$1d = global$1m;
+
+ // eslint-disable-next-line es/no-object-defineproperty -- safe
+ var defineProperty$b = Object.defineProperty;
+
+ var setGlobal$3 = function (key, value) {
+ try {
+ defineProperty$b(global$1d, key, { value: value, configurable: true, writable: true });
+ } catch (error) {
+ global$1d[key] = value;
+ } return value;
+ };
+
+ var global$1c = global$1m;
+ var setGlobal$2 = setGlobal$3;
+
+ var SHARED = '__core-js_shared__';
+ var store$4 = global$1c[SHARED] || setGlobal$2(SHARED, {});
+
+ var sharedStore = store$4;
+
+ var store$3 = sharedStore;
+
+ (shared$5.exports = function (key, value) {
+ return store$3[key] || (store$3[key] = value !== undefined ? value : {});
+ })('versions', []).push({
+ version: '3.19.1',
+ mode: 'global',
+ copyright: '© 2021 Denis Pushkarev (zloirock.ru)'
+ });
+
+ var global$1b = global$1m;
var requireObjectCoercible$c = requireObjectCoercible$e;
+ var Object$3 = global$1b.Object;
+
// `ToObject` abstract operation
// https://tc39.es/ecma262/#sec-toobject
- var toObject$i = function (argument) {
- return Object(requireObjectCoercible$c(argument));
+ var toObject$j = function (argument) {
+ return Object$3(requireObjectCoercible$c(argument));
};
- var toObject$h = toObject$i;
+ var uncurryThis$U = functionUncurryThis;
+ var toObject$i = toObject$j;
- var hasOwnProperty$3 = {}.hasOwnProperty;
+ var hasOwnProperty$3 = uncurryThis$U({}.hasOwnProperty);
- var has$j = Object.hasOwn || function hasOwn(it, key) {
- return hasOwnProperty$3.call(toObject$h(it), key);
+ // `HasOwnProperty` abstract operation
+ // https://tc39.es/ecma262/#sec-hasownproperty
+ var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) {
+ return hasOwnProperty$3(toObject$i(it), key);
};
- var global$E = global$F;
- var isObject$p = isObject$r;
+ var uncurryThis$T = functionUncurryThis;
- var document$3 = global$E.document;
+ var id$2 = 0;
+ var postfix = Math.random();
+ var toString$m = uncurryThis$T(1.0.toString);
+
+ var uid$5 = function (key) {
+ return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$m(++id$2 + postfix, 36);
+ };
+
+ var global$1a = global$1m;
+ var shared$4 = shared$5.exports;
+ var hasOwn$l = hasOwnProperty_1;
+ var uid$4 = uid$5;
+ var NATIVE_SYMBOL$2 = nativeSymbol;
+ var USE_SYMBOL_AS_UID = useSymbolAsUid;
+
+ var WellKnownSymbolsStore$1 = shared$4('wks');
+ var Symbol$3 = global$1a.Symbol;
+ var symbolFor = Symbol$3 && Symbol$3['for'];
+ var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol$3 : Symbol$3 && Symbol$3.withoutSetter || uid$4;
+
+ var wellKnownSymbol$t = function (name) {
+ if (!hasOwn$l(WellKnownSymbolsStore$1, name) || !(NATIVE_SYMBOL$2 || typeof WellKnownSymbolsStore$1[name] == 'string')) {
+ var description = 'Symbol.' + name;
+ if (NATIVE_SYMBOL$2 && hasOwn$l(Symbol$3, name)) {
+ WellKnownSymbolsStore$1[name] = Symbol$3[name];
+ } else if (USE_SYMBOL_AS_UID && symbolFor) {
+ WellKnownSymbolsStore$1[name] = symbolFor(description);
+ } else {
+ WellKnownSymbolsStore$1[name] = createWellKnownSymbol(description);
+ }
+ } return WellKnownSymbolsStore$1[name];
+ };
+
+ var global$19 = global$1m;
+ var call$n = functionCall;
+ var isObject$q = isObject$s;
+ var isSymbol$5 = isSymbol$6;
+ var getMethod$6 = getMethod$7;
+ var ordinaryToPrimitive = ordinaryToPrimitive$1;
+ var wellKnownSymbol$s = wellKnownSymbol$t;
+
+ var TypeError$l = global$19.TypeError;
+ var TO_PRIMITIVE$1 = wellKnownSymbol$s('toPrimitive');
+
+ // `ToPrimitive` abstract operation
+ // https://tc39.es/ecma262/#sec-toprimitive
+ var toPrimitive$3 = function (input, pref) {
+ if (!isObject$q(input) || isSymbol$5(input)) return input;
+ var exoticToPrim = getMethod$6(input, TO_PRIMITIVE$1);
+ var result;
+ if (exoticToPrim) {
+ if (pref === undefined) pref = 'default';
+ result = call$n(exoticToPrim, input, pref);
+ if (!isObject$q(result) || isSymbol$5(result)) return result;
+ throw TypeError$l("Can't convert object to primitive value");
+ }
+ if (pref === undefined) pref = 'number';
+ return ordinaryToPrimitive(input, pref);
+ };
+
+ var toPrimitive$2 = toPrimitive$3;
+ var isSymbol$4 = isSymbol$6;
+
+ // `ToPropertyKey` abstract operation
+ // https://tc39.es/ecma262/#sec-topropertykey
+ var toPropertyKey$5 = function (argument) {
+ var key = toPrimitive$2(argument, 'string');
+ return isSymbol$4(key) ? key : key + '';
+ };
+
+ var global$18 = global$1m;
+ var isObject$p = isObject$s;
+
+ var document$3 = global$18.document;
// typeof document.createElement is 'object' in old IE
- var EXISTS = isObject$p(document$3) && isObject$p(document$3.createElement);
+ var EXISTS$1 = isObject$p(document$3) && isObject$p(document$3.createElement);
- var documentCreateElement$1 = function (it) {
- return EXISTS ? document$3.createElement(it) : {};
+ var documentCreateElement$2 = function (it) {
+ return EXISTS$1 ? document$3.createElement(it) : {};
};
- var DESCRIPTORS$m = descriptors;
- var fails$K = fails$N;
- var createElement$1 = documentCreateElement$1;
+ var DESCRIPTORS$n = descriptors;
+ var fails$O = fails$S;
+ var createElement$1 = documentCreateElement$2;
// Thank's IE8 for his funny defineProperty
- var ie8DomDefine = !DESCRIPTORS$m && !fails$K(function () {
+ var ie8DomDefine = !DESCRIPTORS$n && !fails$O(function () {
// eslint-disable-next-line es/no-object-defineproperty -- requied for testing
return Object.defineProperty(createElement$1('div'), 'a', {
get: function () { return 7; }
}).a != 7;
});
- var DESCRIPTORS$l = descriptors;
+ var DESCRIPTORS$m = descriptors;
+ var call$m = functionCall;
var propertyIsEnumerableModule$2 = objectPropertyIsEnumerable;
var createPropertyDescriptor$6 = createPropertyDescriptor$7;
- var toIndexedObject$a = toIndexedObject$b;
- var toPrimitive$6 = toPrimitive$7;
- var has$i = has$j;
+ var toIndexedObject$b = toIndexedObject$c;
+ var toPropertyKey$4 = toPropertyKey$5;
+ var hasOwn$k = hasOwnProperty_1;
var IE8_DOM_DEFINE$1 = ie8DomDefine;
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
@@ -166,225 +437,220 @@
// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
- objectGetOwnPropertyDescriptor.f = DESCRIPTORS$l ? $getOwnPropertyDescriptor$1 : function getOwnPropertyDescriptor(O, P) {
- O = toIndexedObject$a(O);
- P = toPrimitive$6(P, true);
+ objectGetOwnPropertyDescriptor.f = DESCRIPTORS$m ? $getOwnPropertyDescriptor$1 : function getOwnPropertyDescriptor(O, P) {
+ O = toIndexedObject$b(O);
+ P = toPropertyKey$4(P);
if (IE8_DOM_DEFINE$1) try {
return $getOwnPropertyDescriptor$1(O, P);
} catch (error) { /* empty */ }
- if (has$i(O, P)) return createPropertyDescriptor$6(!propertyIsEnumerableModule$2.f.call(O, P), O[P]);
+ if (hasOwn$k(O, P)) return createPropertyDescriptor$6(!call$m(propertyIsEnumerableModule$2.f, O, P), O[P]);
};
var objectDefineProperty = {};
- var isObject$o = isObject$r;
+ var global$17 = global$1m;
+ var isObject$o = isObject$s;
- var anObject$m = function (it) {
- if (!isObject$o(it)) {
- throw TypeError(String(it) + ' is not an object');
- } return it;
+ var String$5 = global$17.String;
+ var TypeError$k = global$17.TypeError;
+
+ // `Assert: Type(argument) is Object`
+ var anObject$n = function (argument) {
+ if (isObject$o(argument)) return argument;
+ throw TypeError$k(String$5(argument) + ' is not an object');
};
- var DESCRIPTORS$k = descriptors;
+ var global$16 = global$1m;
+ var DESCRIPTORS$l = descriptors;
var IE8_DOM_DEFINE = ie8DomDefine;
- var anObject$l = anObject$m;
- var toPrimitive$5 = toPrimitive$7;
+ var anObject$m = anObject$n;
+ var toPropertyKey$3 = toPropertyKey$5;
+ var TypeError$j = global$16.TypeError;
// eslint-disable-next-line es/no-object-defineproperty -- safe
var $defineProperty$1 = Object.defineProperty;
// `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty
- objectDefineProperty.f = DESCRIPTORS$k ? $defineProperty$1 : function defineProperty(O, P, Attributes) {
- anObject$l(O);
- P = toPrimitive$5(P, true);
- anObject$l(Attributes);
+ objectDefineProperty.f = DESCRIPTORS$l ? $defineProperty$1 : function defineProperty(O, P, Attributes) {
+ anObject$m(O);
+ P = toPropertyKey$3(P);
+ anObject$m(Attributes);
if (IE8_DOM_DEFINE) try {
return $defineProperty$1(O, P, Attributes);
} catch (error) { /* empty */ }
- if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');
+ if ('get' in Attributes || 'set' in Attributes) throw TypeError$j('Accessors not supported');
if ('value' in Attributes) O[P] = Attributes.value;
return O;
};
- var DESCRIPTORS$j = descriptors;
+ var DESCRIPTORS$k = descriptors;
var definePropertyModule$7 = objectDefineProperty;
var createPropertyDescriptor$5 = createPropertyDescriptor$7;
- var createNonEnumerableProperty$e = DESCRIPTORS$j ? function (object, key, value) {
+ var createNonEnumerableProperty$b = DESCRIPTORS$k ? function (object, key, value) {
return definePropertyModule$7.f(object, key, createPropertyDescriptor$5(1, value));
} : function (object, key, value) {
object[key] = value;
return object;
};
- var redefine$g = {exports: {}};
+ var redefine$h = {exports: {}};
- var global$D = global$F;
- var createNonEnumerableProperty$d = createNonEnumerableProperty$e;
+ var uncurryThis$S = functionUncurryThis;
+ var isCallable$l = isCallable$r;
+ var store$2 = sharedStore;
- var setGlobal$3 = function (key, value) {
- try {
- createNonEnumerableProperty$d(global$D, key, value);
- } catch (error) {
- global$D[key] = value;
- } return value;
- };
-
- var global$C = global$F;
- var setGlobal$2 = setGlobal$3;
-
- var SHARED = '__core-js_shared__';
- var store$4 = global$C[SHARED] || setGlobal$2(SHARED, {});
-
- var sharedStore = store$4;
-
- var store$3 = sharedStore;
-
- var functionToString = Function.toString;
+ var functionToString$1 = uncurryThis$S(Function.toString);
// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper
- if (typeof store$3.inspectSource != 'function') {
- store$3.inspectSource = function (it) {
- return functionToString.call(it);
+ if (!isCallable$l(store$2.inspectSource)) {
+ store$2.inspectSource = function (it) {
+ return functionToString$1(it);
};
}
- var inspectSource$3 = store$3.inspectSource;
+ var inspectSource$4 = store$2.inspectSource;
- var global$B = global$F;
- var inspectSource$2 = inspectSource$3;
+ var global$15 = global$1m;
+ var isCallable$k = isCallable$r;
+ var inspectSource$3 = inspectSource$4;
- var WeakMap$1 = global$B.WeakMap;
+ var WeakMap$1 = global$15.WeakMap;
- var nativeWeakMap = typeof WeakMap$1 === 'function' && /native code/.test(inspectSource$2(WeakMap$1));
+ var nativeWeakMap = isCallable$k(WeakMap$1) && /native code/.test(inspectSource$3(WeakMap$1));
- var shared$5 = {exports: {}};
+ var shared$3 = shared$5.exports;
+ var uid$3 = uid$5;
- var isPure = false;
-
- var store$2 = sharedStore;
-
- (shared$5.exports = function (key, value) {
- return store$2[key] || (store$2[key] = value !== undefined ? value : {});
- })('versions', []).push({
- version: '3.15.0',
- mode: 'global',
- copyright: '© 2021 Denis Pushkarev (zloirock.ru)'
- });
-
- var id$2 = 0;
- var postfix = Math.random();
-
- var uid$5 = function (key) {
- return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id$2 + postfix).toString(36);
- };
-
- var shared$4 = shared$5.exports;
- var uid$4 = uid$5;
-
- var keys$3 = shared$4('keys');
+ var keys$3 = shared$3('keys');
var sharedKey$4 = function (key) {
- return keys$3[key] || (keys$3[key] = uid$4(key));
+ return keys$3[key] || (keys$3[key] = uid$3(key));
};
var hiddenKeys$6 = {};
var NATIVE_WEAK_MAP = nativeWeakMap;
- var global$A = global$F;
- var isObject$n = isObject$r;
- var createNonEnumerableProperty$c = createNonEnumerableProperty$e;
- var objectHas = has$j;
- var shared$3 = sharedStore;
+ var global$14 = global$1m;
+ var uncurryThis$R = functionUncurryThis;
+ var isObject$n = isObject$s;
+ var createNonEnumerableProperty$a = createNonEnumerableProperty$b;
+ var hasOwn$j = hasOwnProperty_1;
+ var shared$2 = sharedStore;
var sharedKey$3 = sharedKey$4;
var hiddenKeys$5 = hiddenKeys$6;
var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
- var WeakMap = global$A.WeakMap;
- var set$4, get$5, has$h;
+ var TypeError$i = global$14.TypeError;
+ var WeakMap = global$14.WeakMap;
+ var set$4, get$5, has;
var enforce = function (it) {
- return has$h(it) ? get$5(it) : set$4(it, {});
+ return has(it) ? get$5(it) : set$4(it, {});
};
var getterFor = function (TYPE) {
return function (it) {
var state;
if (!isObject$n(it) || (state = get$5(it)).type !== TYPE) {
- throw TypeError('Incompatible receiver, ' + TYPE + ' required');
+ throw TypeError$i('Incompatible receiver, ' + TYPE + ' required');
} return state;
};
};
- if (NATIVE_WEAK_MAP || shared$3.state) {
- var store$1 = shared$3.state || (shared$3.state = new WeakMap());
- var wmget = store$1.get;
- var wmhas = store$1.has;
- var wmset = store$1.set;
+ if (NATIVE_WEAK_MAP || shared$2.state) {
+ var store$1 = shared$2.state || (shared$2.state = new WeakMap());
+ var wmget = uncurryThis$R(store$1.get);
+ var wmhas = uncurryThis$R(store$1.has);
+ var wmset = uncurryThis$R(store$1.set);
set$4 = function (it, metadata) {
- if (wmhas.call(store$1, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
+ if (wmhas(store$1, it)) throw new TypeError$i(OBJECT_ALREADY_INITIALIZED);
metadata.facade = it;
- wmset.call(store$1, it, metadata);
+ wmset(store$1, it, metadata);
return metadata;
};
get$5 = function (it) {
- return wmget.call(store$1, it) || {};
+ return wmget(store$1, it) || {};
};
- has$h = function (it) {
- return wmhas.call(store$1, it);
+ has = function (it) {
+ return wmhas(store$1, it);
};
} else {
var STATE = sharedKey$3('state');
hiddenKeys$5[STATE] = true;
set$4 = function (it, metadata) {
- if (objectHas(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);
+ if (hasOwn$j(it, STATE)) throw new TypeError$i(OBJECT_ALREADY_INITIALIZED);
metadata.facade = it;
- createNonEnumerableProperty$c(it, STATE, metadata);
+ createNonEnumerableProperty$a(it, STATE, metadata);
return metadata;
};
get$5 = function (it) {
- return objectHas(it, STATE) ? it[STATE] : {};
+ return hasOwn$j(it, STATE) ? it[STATE] : {};
};
- has$h = function (it) {
- return objectHas(it, STATE);
+ has = function (it) {
+ return hasOwn$j(it, STATE);
};
}
var internalState = {
set: set$4,
get: get$5,
- has: has$h,
+ has: has,
enforce: enforce,
getterFor: getterFor
};
- var global$z = global$F;
- var createNonEnumerableProperty$b = createNonEnumerableProperty$e;
- var has$g = has$j;
+ var DESCRIPTORS$j = descriptors;
+ var hasOwn$i = hasOwnProperty_1;
+
+ var FunctionPrototype$2 = Function.prototype;
+ // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
+ var getDescriptor = DESCRIPTORS$j && Object.getOwnPropertyDescriptor;
+
+ var EXISTS = hasOwn$i(FunctionPrototype$2, 'name');
+ // additional protection from minified / mangled / dropped function names
+ var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';
+ var CONFIGURABLE = EXISTS && (!DESCRIPTORS$j || (DESCRIPTORS$j && getDescriptor(FunctionPrototype$2, 'name').configurable));
+
+ var functionName = {
+ EXISTS: EXISTS,
+ PROPER: PROPER,
+ CONFIGURABLE: CONFIGURABLE
+ };
+
+ var global$13 = global$1m;
+ var isCallable$j = isCallable$r;
+ var hasOwn$h = hasOwnProperty_1;
+ var createNonEnumerableProperty$9 = createNonEnumerableProperty$b;
var setGlobal$1 = setGlobal$3;
- var inspectSource$1 = inspectSource$3;
+ var inspectSource$2 = inspectSource$4;
var InternalStateModule$9 = internalState;
+ var CONFIGURABLE_FUNCTION_NAME$2 = functionName.CONFIGURABLE;
var getInternalState$7 = InternalStateModule$9.get;
var enforceInternalState$1 = InternalStateModule$9.enforce;
var TEMPLATE = String(String).split('String');
- (redefine$g.exports = function (O, key, value, options) {
+ (redefine$h.exports = function (O, key, value, options) {
var unsafe = options ? !!options.unsafe : false;
var simple = options ? !!options.enumerable : false;
var noTargetGet = options ? !!options.noTargetGet : false;
+ var name = options && options.name !== undefined ? options.name : key;
var state;
- if (typeof value == 'function') {
- if (typeof key == 'string' && !has$g(value, 'name')) {
- createNonEnumerableProperty$b(value, 'name', key);
+ if (isCallable$j(value)) {
+ if (String(name).slice(0, 7) === 'Symbol(') {
+ name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']';
+ }
+ if (!hasOwn$h(value, 'name') || (CONFIGURABLE_FUNCTION_NAME$2 && value.name !== name)) {
+ createNonEnumerableProperty$9(value, 'name', name);
}
state = enforceInternalState$1(value);
if (!state.source) {
- state.source = TEMPLATE.join(typeof key == 'string' ? key : '');
+ state.source = TEMPLATE.join(typeof name == 'string' ? name : '');
}
}
- if (O === global$z) {
+ if (O === global$13) {
if (simple) O[key] = value;
else setGlobal$1(key, value);
return;
@@ -394,71 +660,65 @@
simple = true;
}
if (simple) O[key] = value;
- else createNonEnumerableProperty$b(O, key, value);
+ else createNonEnumerableProperty$9(O, key, value);
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, 'toString', function toString() {
- return typeof this == 'function' && getInternalState$7(this).source || inspectSource$1(this);
+ return isCallable$j(this) && getInternalState$7(this).source || inspectSource$2(this);
});
- var global$y = global$F;
-
- var path$2 = global$y;
-
- var path$1 = path$2;
- var global$x = global$F;
-
- var aFunction$a = function (variable) {
- return typeof variable == 'function' ? variable : undefined;
- };
-
- var getBuiltIn$9 = function (namespace, method) {
- return arguments.length < 2 ? aFunction$a(path$1[namespace]) || aFunction$a(global$x[namespace])
- : path$1[namespace] && path$1[namespace][method] || global$x[namespace] && global$x[namespace][method];
- };
-
var objectGetOwnPropertyNames = {};
var ceil$1 = Math.ceil;
- var floor$7 = Math.floor;
+ var floor$8 = Math.floor;
- // `ToInteger` abstract operation
- // https://tc39.es/ecma262/#sec-tointeger
- var toInteger$b = function (argument) {
- return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor$7 : ceil$1)(argument);
+ // `ToIntegerOrInfinity` abstract operation
+ // https://tc39.es/ecma262/#sec-tointegerorinfinity
+ var toIntegerOrInfinity$b = function (argument) {
+ var number = +argument;
+ // eslint-disable-next-line no-self-compare -- safe
+ return number !== number || number === 0 ? 0 : (number > 0 ? floor$8 : ceil$1)(number);
};
- var toInteger$a = toInteger$b;
-
- var min$9 = Math.min;
-
- // `ToLength` abstract operation
- // https://tc39.es/ecma262/#sec-tolength
- var toLength$q = function (argument) {
- return argument > 0 ? min$9(toInteger$a(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
- };
-
- var toInteger$9 = toInteger$b;
+ var toIntegerOrInfinity$a = toIntegerOrInfinity$b;
var max$4 = Math.max;
- var min$8 = Math.min;
+ var min$9 = Math.min;
// Helper for a popular repeating case of the spec:
// Let integer be ? ToInteger(index).
// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
var toAbsoluteIndex$8 = function (index, length) {
- var integer = toInteger$9(index);
- return integer < 0 ? max$4(integer + length, 0) : min$8(integer, length);
+ var integer = toIntegerOrInfinity$a(index);
+ return integer < 0 ? max$4(integer + length, 0) : min$9(integer, length);
};
- var toIndexedObject$9 = toIndexedObject$b;
- var toLength$p = toLength$q;
+ var toIntegerOrInfinity$9 = toIntegerOrInfinity$b;
+
+ var min$8 = Math.min;
+
+ // `ToLength` abstract operation
+ // https://tc39.es/ecma262/#sec-tolength
+ var toLength$c = function (argument) {
+ return argument > 0 ? min$8(toIntegerOrInfinity$9(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
+ };
+
+ var toLength$b = toLength$c;
+
+ // `LengthOfArrayLike` abstract operation
+ // https://tc39.es/ecma262/#sec-lengthofarraylike
+ var lengthOfArrayLike$g = function (obj) {
+ return toLength$b(obj.length);
+ };
+
+ var toIndexedObject$a = toIndexedObject$c;
var toAbsoluteIndex$7 = toAbsoluteIndex$8;
+ var lengthOfArrayLike$f = lengthOfArrayLike$g;
// `Array.prototype.{ indexOf, includes }` methods implementation
var createMethod$6 = function (IS_INCLUDES) {
return function ($this, el, fromIndex) {
- var O = toIndexedObject$9($this);
- var length = toLength$p(O.length);
+ var O = toIndexedObject$a($this);
+ var length = lengthOfArrayLike$f(O);
var index = toAbsoluteIndex$7(fromIndex, length);
var value;
// Array#includes uses SameValueZero equality algorithm
@@ -483,20 +743,23 @@
indexOf: createMethod$6(false)
};
- var has$f = has$j;
- var toIndexedObject$8 = toIndexedObject$b;
- var indexOf = arrayIncludes.indexOf;
+ var uncurryThis$Q = functionUncurryThis;
+ var hasOwn$g = hasOwnProperty_1;
+ var toIndexedObject$9 = toIndexedObject$c;
+ var indexOf$1 = arrayIncludes.indexOf;
var hiddenKeys$4 = hiddenKeys$6;
+ var push$a = uncurryThis$Q([].push);
+
var objectKeysInternal = function (object, names) {
- var O = toIndexedObject$8(object);
+ var O = toIndexedObject$9(object);
var i = 0;
var result = [];
var key;
- for (key in O) !has$f(hiddenKeys$4, key) && has$f(O, key) && result.push(key);
+ for (key in O) !hasOwn$g(hiddenKeys$4, key) && hasOwn$g(O, key) && push$a(result, key);
// Don't enum bug & hidden keys
- while (names.length > i) if (has$f(O, key = names[i++])) {
- ~indexOf(result, key) || result.push(key);
+ while (names.length > i) if (hasOwn$g(O, key = names[i++])) {
+ ~indexOf$1(result, key) || push$a(result, key);
}
return result;
};
@@ -529,19 +792,22 @@
// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe
objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols;
- var getBuiltIn$8 = getBuiltIn$9;
- var getOwnPropertyNamesModule$1 = objectGetOwnPropertyNames;
+ var getBuiltIn$8 = getBuiltIn$b;
+ var uncurryThis$P = functionUncurryThis;
+ var getOwnPropertyNamesModule$2 = objectGetOwnPropertyNames;
var getOwnPropertySymbolsModule$2 = objectGetOwnPropertySymbols;
- var anObject$k = anObject$m;
+ var anObject$l = anObject$n;
+
+ var concat$3 = uncurryThis$P([].concat);
// all object keys, includes non-enumerable and symbols
var ownKeys$1 = getBuiltIn$8('Reflect', 'ownKeys') || function ownKeys(it) {
- var keys = getOwnPropertyNamesModule$1.f(anObject$k(it));
+ var keys = getOwnPropertyNamesModule$2.f(anObject$l(it));
var getOwnPropertySymbols = getOwnPropertySymbolsModule$2.f;
- return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;
+ return getOwnPropertySymbols ? concat$3(keys, getOwnPropertySymbols(it)) : keys;
};
- var has$e = has$j;
+ var hasOwn$f = hasOwnProperty_1;
var ownKeys = ownKeys$1;
var getOwnPropertyDescriptorModule$3 = objectGetOwnPropertyDescriptor;
var definePropertyModule$6 = objectDefineProperty;
@@ -552,11 +818,12 @@
var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule$3.f;
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
- if (!has$e(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));
+ if (!hasOwn$f(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));
}
};
- var fails$J = fails$N;
+ var fails$N = fails$S;
+ var isCallable$i = isCallable$r;
var replacement = /#|\.prototype\./;
@@ -564,7 +831,7 @@
var value = data[normalize$1(feature)];
return value == POLYFILL ? true
: value == NATIVE ? false
- : typeof detection == 'function' ? fails$J(detection)
+ : isCallable$i(detection) ? fails$N(detection)
: !!detection;
};
@@ -578,10 +845,10 @@
var isForced_1 = isForced$5;
- var global$w = global$F;
+ var global$12 = global$1m;
var getOwnPropertyDescriptor$4 = objectGetOwnPropertyDescriptor.f;
- var createNonEnumerableProperty$a = createNonEnumerableProperty$e;
- var redefine$f = redefine$g.exports;
+ var createNonEnumerableProperty$8 = createNonEnumerableProperty$b;
+ var redefine$g = redefine$h.exports;
var setGlobal = setGlobal$3;
var copyConstructorProperties$1 = copyConstructorProperties$2;
var isForced$4 = isForced_1;
@@ -599,6 +866,7 @@
options.sham - add a flag to not completely full polyfills
options.enumerable - export as enumerable property
options.noTargetGet - prevent calling a getter on target
+ options.name - the .name of the function if it does not match the key
*/
var _export = function (options, source) {
var TARGET = options.target;
@@ -606,11 +874,11 @@
var STATIC = options.stat;
var FORCED, target, key, targetProperty, sourceProperty, descriptor;
if (GLOBAL) {
- target = global$w;
+ target = global$12;
} else if (STATIC) {
- target = global$w[TARGET] || setGlobal(TARGET, {});
+ target = global$12[TARGET] || setGlobal(TARGET, {});
} else {
- target = (global$w[TARGET] || {}).prototype;
+ target = (global$12[TARGET] || {}).prototype;
}
if (target) for (key in source) {
sourceProperty = source[key];
@@ -621,43 +889,49 @@
FORCED = isForced$4(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
// contained in target
if (!FORCED && targetProperty !== undefined) {
- if (typeof sourceProperty === typeof targetProperty) continue;
+ if (typeof sourceProperty == typeof targetProperty) continue;
copyConstructorProperties$1(sourceProperty, targetProperty);
}
// add a flag to not completely full polyfills
if (options.sham || (targetProperty && targetProperty.sham)) {
- createNonEnumerableProperty$a(sourceProperty, 'sham', true);
+ createNonEnumerableProperty$8(sourceProperty, 'sham', true);
}
// extend global
- redefine$f(target, key, sourceProperty, options);
+ redefine$g(target, key, sourceProperty, options);
}
};
- var $$16 = _export;
+ var $$1e = _export;
+ var global$11 = global$1m;
+ var uncurryThis$O = functionUncurryThis;
+
+ var Date$1 = global$11.Date;
+ var getTime$2 = uncurryThis$O(Date$1.prototype.getTime);
// `Date.now` method
// https://tc39.es/ecma262/#sec-date.now
- $$16({ target: 'Date', stat: true }, {
+ $$1e({ target: 'Date', stat: true }, {
now: function now() {
- return new Date().getTime();
+ return getTime$2(new Date$1());
}
});
- var redefine$e = redefine$g.exports;
+ var uncurryThis$N = functionUncurryThis;
+ var redefine$f = redefine$h.exports;
var DatePrototype$1 = Date.prototype;
var INVALID_DATE = 'Invalid Date';
var TO_STRING$1 = 'toString';
- var nativeDateToString = DatePrototype$1[TO_STRING$1];
- var getTime$1 = DatePrototype$1.getTime;
+ var un$DateToString = uncurryThis$N(DatePrototype$1[TO_STRING$1]);
+ var getTime$1 = uncurryThis$N(DatePrototype$1.getTime);
// `Date.prototype.toString` method
// https://tc39.es/ecma262/#sec-date.prototype.tostring
- if (new Date(NaN) + '' != INVALID_DATE) {
- redefine$e(DatePrototype$1, TO_STRING$1, function toString() {
- var value = getTime$1.call(this);
+ if (String(new Date(NaN)) != INVALID_DATE) {
+ redefine$f(DatePrototype$1, TO_STRING$1, function toString() {
+ var value = getTime$1(this);
// eslint-disable-next-line no-self-compare -- NaN check
- return value === value ? nativeDateToString.call(this) : INVALID_DATE;
+ return value === value ? un$DateToString(this) : INVALID_DATE;
});
}
@@ -846,89 +1120,33 @@
};
}
- var wellKnownSymbolWrapped = {};
+ var $$1d = _export;
+ var global$10 = global$1m;
- var getBuiltIn$7 = getBuiltIn$9;
-
- var engineUserAgent = getBuiltIn$7('navigator', 'userAgent') || '';
-
- var global$v = global$F;
- var userAgent$5 = engineUserAgent;
-
- var process$4 = global$v.process;
- var versions = process$4 && process$4.versions;
- var v8 = versions && versions.v8;
- var match, version$1;
-
- if (v8) {
- match = v8.split('.');
- version$1 = match[0] < 4 ? 1 : match[0] + match[1];
- } else if (userAgent$5) {
- match = userAgent$5.match(/Edge\/(\d+)/);
- if (!match || match[1] >= 74) {
- match = userAgent$5.match(/Chrome\/(\d+)/);
- if (match) version$1 = match[1];
- }
- }
-
- var engineV8Version = version$1 && +version$1;
-
- /* eslint-disable es/no-symbol -- required for testing */
-
- var V8_VERSION$3 = engineV8Version;
- var fails$I = fails$N;
-
- // eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing
- var nativeSymbol = !!Object.getOwnPropertySymbols && !fails$I(function () {
- var symbol = Symbol();
- // Chrome 38 Symbol has incorrect toString conversion
- // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances
- return !String(symbol) || !(Object(symbol) instanceof Symbol) ||
- // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
- !Symbol.sham && V8_VERSION$3 && V8_VERSION$3 < 41;
+ // `globalThis` object
+ // https://tc39.es/ecma262/#sec-globalthis
+ $$1d({ global: true }, {
+ globalThis: global$10
});
- /* eslint-disable es/no-symbol -- required for testing */
+ var global$$ = global$1m;
- var NATIVE_SYMBOL$2 = nativeSymbol;
+ var path$1 = global$$;
- var useSymbolAsUid = NATIVE_SYMBOL$2
- && !Symbol.sham
- && typeof Symbol.iterator == 'symbol';
+ var wellKnownSymbolWrapped = {};
- var global$u = global$F;
- var shared$2 = shared$5.exports;
- var has$d = has$j;
- var uid$3 = uid$5;
- var NATIVE_SYMBOL$1 = nativeSymbol;
- var USE_SYMBOL_AS_UID$1 = useSymbolAsUid;
-
- var WellKnownSymbolsStore$1 = shared$2('wks');
- var Symbol$1 = global$u.Symbol;
- var createWellKnownSymbol = USE_SYMBOL_AS_UID$1 ? Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid$3;
-
- var wellKnownSymbol$s = function (name) {
- if (!has$d(WellKnownSymbolsStore$1, name) || !(NATIVE_SYMBOL$1 || typeof WellKnownSymbolsStore$1[name] == 'string')) {
- if (NATIVE_SYMBOL$1 && has$d(Symbol$1, name)) {
- WellKnownSymbolsStore$1[name] = Symbol$1[name];
- } else {
- WellKnownSymbolsStore$1[name] = createWellKnownSymbol('Symbol.' + name);
- }
- } return WellKnownSymbolsStore$1[name];
- };
-
- var wellKnownSymbol$r = wellKnownSymbol$s;
+ var wellKnownSymbol$r = wellKnownSymbol$t;
wellKnownSymbolWrapped.f = wellKnownSymbol$r;
- var path = path$2;
- var has$c = has$j;
+ var path = path$1;
+ var hasOwn$e = hasOwnProperty_1;
var wrappedWellKnownSymbolModule$1 = wellKnownSymbolWrapped;
var defineProperty$a = objectDefineProperty.f;
var defineWellKnownSymbol$4 = function (NAME) {
var Symbol = path.Symbol || (path.Symbol = {});
- if (!has$c(Symbol, NAME)) defineProperty$a(Symbol, NAME, {
+ if (!hasOwn$e(Symbol, NAME)) defineProperty$a(Symbol, NAME, {
value: wrappedWellKnownSymbolModule$1.f(NAME)
});
};
@@ -951,32 +1169,36 @@
var DESCRIPTORS$i = descriptors;
var definePropertyModule$5 = objectDefineProperty;
- var anObject$j = anObject$m;
+ var anObject$k = anObject$n;
+ var toIndexedObject$8 = toIndexedObject$c;
var objectKeys$3 = objectKeys$4;
// `Object.defineProperties` method
// https://tc39.es/ecma262/#sec-object.defineproperties
// eslint-disable-next-line es/no-object-defineproperties -- safe
var objectDefineProperties = DESCRIPTORS$i ? Object.defineProperties : function defineProperties(O, Properties) {
- anObject$j(O);
+ anObject$k(O);
+ var props = toIndexedObject$8(Properties);
var keys = objectKeys$3(Properties);
var length = keys.length;
var index = 0;
var key;
- while (length > index) definePropertyModule$5.f(O, key = keys[index++], Properties[key]);
+ while (length > index) definePropertyModule$5.f(O, key = keys[index++], props[key]);
return O;
};
- var getBuiltIn$6 = getBuiltIn$9;
+ var getBuiltIn$7 = getBuiltIn$b;
- var html$2 = getBuiltIn$6('document', 'documentElement');
+ var html$2 = getBuiltIn$7('document', 'documentElement');
- var anObject$i = anObject$m;
+ /* global ActiveXObject -- old IE, WSH */
+
+ var anObject$j = anObject$n;
var defineProperties$2 = objectDefineProperties;
var enumBugKeys = enumBugKeys$3;
var hiddenKeys$2 = hiddenKeys$6;
var html$1 = html$2;
- var documentCreateElement = documentCreateElement$1;
+ var documentCreateElement$1 = documentCreateElement$2;
var sharedKey$2 = sharedKey$4;
var GT = '>';
@@ -1003,7 +1225,7 @@
// Create object with fake `null` prototype: use iframe Object with cleared prototype
var NullProtoObjectViaIFrame = function () {
// Thrash, waste and sodomy: IE GC bug
- var iframe = documentCreateElement('iframe');
+ var iframe = documentCreateElement$1('iframe');
var JS = 'java' + SCRIPT + ':';
var iframeDocument;
iframe.style.display = 'none';
@@ -1025,10 +1247,13 @@
var activeXDocument;
var NullProtoObject = function () {
try {
- /* global ActiveXObject -- old IE */
- activeXDocument = document.domain && new ActiveXObject('htmlfile');
+ activeXDocument = new ActiveXObject('htmlfile');
} catch (error) { /* ignore */ }
- NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();
+ NullProtoObject = typeof document != 'undefined'
+ ? document.domain && activeXDocument
+ ? NullProtoObjectViaActiveX(activeXDocument) // old IE
+ : NullProtoObjectViaIFrame()
+ : NullProtoObjectViaActiveX(activeXDocument); // WSH
var length = enumBugKeys.length;
while (length--) delete NullProtoObject[PROTOTYPE$2][enumBugKeys[length]];
return NullProtoObject();
@@ -1041,7 +1266,7 @@
var objectCreate = Object.create || function create(O, Properties) {
var result;
if (O !== null) {
- EmptyConstructor[PROTOTYPE$2] = anObject$i(O);
+ EmptyConstructor[PROTOTYPE$2] = anObject$j(O);
result = new EmptyConstructor();
EmptyConstructor[PROTOTYPE$2] = null;
// add "__proto__" for Object.getPrototypeOf polyfill
@@ -1050,8 +1275,8 @@
return Properties === undefined ? result : defineProperties$2(result, Properties);
};
- var wellKnownSymbol$q = wellKnownSymbol$s;
- var create$b = objectCreate;
+ var wellKnownSymbol$q = wellKnownSymbol$t;
+ var create$a = objectCreate;
var definePropertyModule$4 = objectDefineProperty;
var UNSCOPABLES = wellKnownSymbol$q('unscopables');
@@ -1062,56 +1287,57 @@
if (ArrayPrototype$1[UNSCOPABLES] == undefined) {
definePropertyModule$4.f(ArrayPrototype$1, UNSCOPABLES, {
configurable: true,
- value: create$b(null)
+ value: create$a(null)
});
}
// add a key to Array.prototype[@@unscopables]
- var addToUnscopables$5 = function (key) {
+ var addToUnscopables$6 = function (key) {
ArrayPrototype$1[UNSCOPABLES][key] = true;
};
var iterators = {};
- var fails$H = fails$N;
+ var fails$M = fails$S;
- var correctPrototypeGetter = !fails$H(function () {
+ var correctPrototypeGetter = !fails$M(function () {
function F() { /* empty */ }
F.prototype.constructor = null;
// eslint-disable-next-line es/no-object-getprototypeof -- required for testing
return Object.getPrototypeOf(new F()) !== F.prototype;
});
- var has$b = has$j;
- var toObject$g = toObject$i;
+ var global$_ = global$1m;
+ var hasOwn$d = hasOwnProperty_1;
+ var isCallable$h = isCallable$r;
+ var toObject$h = toObject$j;
var sharedKey$1 = sharedKey$4;
var CORRECT_PROTOTYPE_GETTER$1 = correctPrototypeGetter;
var IE_PROTO = sharedKey$1('IE_PROTO');
- var ObjectPrototype$3 = Object.prototype;
+ var Object$2 = global$_.Object;
+ var ObjectPrototype$4 = Object$2.prototype;
// `Object.getPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.getprototypeof
- // eslint-disable-next-line es/no-object-getprototypeof -- safe
- var objectGetPrototypeOf = CORRECT_PROTOTYPE_GETTER$1 ? Object.getPrototypeOf : function (O) {
- O = toObject$g(O);
- if (has$b(O, IE_PROTO)) return O[IE_PROTO];
- if (typeof O.constructor == 'function' && O instanceof O.constructor) {
- return O.constructor.prototype;
- } return O instanceof Object ? ObjectPrototype$3 : null;
+ var objectGetPrototypeOf = CORRECT_PROTOTYPE_GETTER$1 ? Object$2.getPrototypeOf : function (O) {
+ var object = toObject$h(O);
+ if (hasOwn$d(object, IE_PROTO)) return object[IE_PROTO];
+ var constructor = object.constructor;
+ if (isCallable$h(constructor) && object instanceof constructor) {
+ return constructor.prototype;
+ } return object instanceof Object$2 ? ObjectPrototype$4 : null;
};
- var fails$G = fails$N;
+ var fails$L = fails$S;
+ var isCallable$g = isCallable$r;
var getPrototypeOf$4 = objectGetPrototypeOf;
- var createNonEnumerableProperty$9 = createNonEnumerableProperty$e;
- var has$a = has$j;
- var wellKnownSymbol$p = wellKnownSymbol$s;
+ var redefine$e = redefine$h.exports;
+ var wellKnownSymbol$p = wellKnownSymbol$t;
- var ITERATOR$8 = wellKnownSymbol$p('iterator');
+ var ITERATOR$a = wellKnownSymbol$p('iterator');
var BUGGY_SAFARI_ITERATORS$1 = false;
- var returnThis$2 = function () { return this; };
-
// `%IteratorPrototype%` object
// https://tc39.es/ecma262/#sec-%iteratorprototype%-object
var IteratorPrototype$2, PrototypeOfArrayIteratorPrototype, arrayIterator;
@@ -1127,18 +1353,20 @@
}
}
- var NEW_ITERATOR_PROTOTYPE = IteratorPrototype$2 == undefined || fails$G(function () {
+ var NEW_ITERATOR_PROTOTYPE = IteratorPrototype$2 == undefined || fails$L(function () {
var test = {};
// FF44- legacy iterators case
- return IteratorPrototype$2[ITERATOR$8].call(test) !== test;
+ return IteratorPrototype$2[ITERATOR$a].call(test) !== test;
});
if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype$2 = {};
// `%IteratorPrototype%[@@iterator]()` method
// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator
- if (!has$a(IteratorPrototype$2, ITERATOR$8)) {
- createNonEnumerableProperty$9(IteratorPrototype$2, ITERATOR$8, returnThis$2);
+ if (!isCallable$g(IteratorPrototype$2[ITERATOR$a])) {
+ redefine$e(IteratorPrototype$2, ITERATOR$a, function () {
+ return this;
+ });
}
var iteratorsCore = {
@@ -1147,19 +1375,19 @@
};
var defineProperty$9 = objectDefineProperty.f;
- var has$9 = has$j;
- var wellKnownSymbol$o = wellKnownSymbol$s;
+ var hasOwn$c = hasOwnProperty_1;
+ var wellKnownSymbol$o = wellKnownSymbol$t;
var TO_STRING_TAG$4 = wellKnownSymbol$o('toStringTag');
var setToStringTag$a = function (it, TAG, STATIC) {
- if (it && !has$9(it = STATIC ? it : it.prototype, TO_STRING_TAG$4)) {
+ if (it && !hasOwn$c(it = STATIC ? it : it.prototype, TO_STRING_TAG$4)) {
defineProperty$9(it, TO_STRING_TAG$4, { configurable: true, value: TAG });
}
};
var IteratorPrototype$1 = iteratorsCore.IteratorPrototype;
- var create$a = objectCreate;
+ var create$9 = objectCreate;
var createPropertyDescriptor$4 = createPropertyDescriptor$7;
var setToStringTag$9 = setToStringTag$a;
var Iterators$4 = iterators;
@@ -1168,23 +1396,27 @@
var createIteratorConstructor$2 = function (IteratorConstructor, NAME, next) {
var TO_STRING_TAG = NAME + ' Iterator';
- IteratorConstructor.prototype = create$a(IteratorPrototype$1, { next: createPropertyDescriptor$4(1, next) });
+ IteratorConstructor.prototype = create$9(IteratorPrototype$1, { next: createPropertyDescriptor$4(1, next) });
setToStringTag$9(IteratorConstructor, TO_STRING_TAG, false);
Iterators$4[TO_STRING_TAG] = returnThis$1;
return IteratorConstructor;
};
- var isObject$m = isObject$r;
+ var global$Z = global$1m;
+ var isCallable$f = isCallable$r;
- var aPossiblePrototype$1 = function (it) {
- if (!isObject$m(it) && it !== null) {
- throw TypeError("Can't set " + String(it) + ' as a prototype');
- } return it;
+ var String$4 = global$Z.String;
+ var TypeError$h = global$Z.TypeError;
+
+ var aPossiblePrototype$1 = function (argument) {
+ if (typeof argument == 'object' || isCallable$f(argument)) return argument;
+ throw TypeError$h("Can't set " + String$4(argument) + ' as a prototype');
};
/* eslint-disable no-proto -- safe */
- var anObject$h = anObject$m;
+ var uncurryThis$M = functionUncurryThis;
+ var anObject$i = anObject$n;
var aPossiblePrototype = aPossiblePrototype$1;
// `Object.setPrototypeOf` method
@@ -1197,33 +1429,38 @@
var setter;
try {
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
- setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
- setter.call(test, []);
+ setter = uncurryThis$M(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);
+ setter(test, []);
CORRECT_SETTER = test instanceof Array;
} catch (error) { /* empty */ }
return function setPrototypeOf(O, proto) {
- anObject$h(O);
+ anObject$i(O);
aPossiblePrototype(proto);
- if (CORRECT_SETTER) setter.call(O, proto);
+ if (CORRECT_SETTER) setter(O, proto);
else O.__proto__ = proto;
return O;
};
}() : undefined);
- var $$15 = _export;
+ var $$1c = _export;
+ var call$l = functionCall;
+ var FunctionName$1 = functionName;
+ var isCallable$e = isCallable$r;
var createIteratorConstructor$1 = createIteratorConstructor$2;
var getPrototypeOf$3 = objectGetPrototypeOf;
var setPrototypeOf$6 = objectSetPrototypeOf;
var setToStringTag$8 = setToStringTag$a;
- var createNonEnumerableProperty$8 = createNonEnumerableProperty$e;
- var redefine$d = redefine$g.exports;
- var wellKnownSymbol$n = wellKnownSymbol$s;
+ var createNonEnumerableProperty$7 = createNonEnumerableProperty$b;
+ var redefine$d = redefine$h.exports;
+ var wellKnownSymbol$n = wellKnownSymbol$t;
var Iterators$3 = iterators;
var IteratorsCore = iteratorsCore;
+ var PROPER_FUNCTION_NAME$4 = FunctionName$1.PROPER;
+ var CONFIGURABLE_FUNCTION_NAME$1 = FunctionName$1.CONFIGURABLE;
var IteratorPrototype = IteratorsCore.IteratorPrototype;
var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
- var ITERATOR$7 = wellKnownSymbol$n('iterator');
+ var ITERATOR$9 = wellKnownSymbol$n('iterator');
var KEYS = 'keys';
var VALUES = 'values';
var ENTRIES = 'entries';
@@ -1246,7 +1483,7 @@
var TO_STRING_TAG = NAME + ' Iterator';
var INCORRECT_VALUES_NAME = false;
var IterablePrototype = Iterable.prototype;
- var nativeIterator = IterablePrototype[ITERATOR$7]
+ var nativeIterator = IterablePrototype[ITERATOR$9]
|| IterablePrototype['@@iterator']
|| DEFAULT && IterablePrototype[DEFAULT];
var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
@@ -1256,12 +1493,12 @@
// fix native
if (anyNativeIterator) {
CurrentIteratorPrototype = getPrototypeOf$3(anyNativeIterator.call(new Iterable()));
- if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
+ if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
if (getPrototypeOf$3(CurrentIteratorPrototype) !== IteratorPrototype) {
if (setPrototypeOf$6) {
setPrototypeOf$6(CurrentIteratorPrototype, IteratorPrototype);
- } else if (typeof CurrentIteratorPrototype[ITERATOR$7] != 'function') {
- createNonEnumerableProperty$8(CurrentIteratorPrototype, ITERATOR$7, returnThis);
+ } else if (!isCallable$e(CurrentIteratorPrototype[ITERATOR$9])) {
+ redefine$d(CurrentIteratorPrototype, ITERATOR$9, returnThis);
}
}
// Set @@toStringTag to native iterators
@@ -1270,17 +1507,15 @@
}
// fix Array.prototype.{ values, @@iterator }.name in V8 / FF
- if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
- INCORRECT_VALUES_NAME = true;
- defaultIterator = function values() { return nativeIterator.call(this); };
+ if (PROPER_FUNCTION_NAME$4 && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
+ if (CONFIGURABLE_FUNCTION_NAME$1) {
+ createNonEnumerableProperty$7(IterablePrototype, 'name', VALUES);
+ } else {
+ INCORRECT_VALUES_NAME = true;
+ defaultIterator = function values() { return call$l(nativeIterator, this); };
+ }
}
- // define iterator
- if (IterablePrototype[ITERATOR$7] !== defaultIterator) {
- createNonEnumerableProperty$8(IterablePrototype, ITERATOR$7, defaultIterator);
- }
- Iterators$3[NAME] = defaultIterator;
-
// export additional methods
if (DEFAULT) {
methods = {
@@ -1292,14 +1527,20 @@
if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
redefine$d(IterablePrototype, KEY, methods[KEY]);
}
- } else $$15({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
+ } else $$1c({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
}
+ // define iterator
+ if (IterablePrototype[ITERATOR$9] !== defaultIterator) {
+ redefine$d(IterablePrototype, ITERATOR$9, defaultIterator, { name: DEFAULT });
+ }
+ Iterators$3[NAME] = defaultIterator;
+
return methods;
};
- var toIndexedObject$7 = toIndexedObject$b;
- var addToUnscopables$4 = addToUnscopables$5;
+ var toIndexedObject$7 = toIndexedObject$c;
+ var addToUnscopables$5 = addToUnscopables$6;
var Iterators$2 = iterators;
var InternalStateModule$8 = internalState;
var defineIterator$2 = defineIterator$3;
@@ -1347,11 +1588,11 @@
Iterators$2.Arguments = Iterators$2.Array;
// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables$4('keys');
- addToUnscopables$4('values');
- addToUnscopables$4('entries');
+ addToUnscopables$5('keys');
+ addToUnscopables$5('values');
+ addToUnscopables$5('entries');
- var wellKnownSymbol$m = wellKnownSymbol$s;
+ var wellKnownSymbol$m = wellKnownSymbol$t;
var TO_STRING_TAG$3 = wellKnownSymbol$m('toStringTag');
var test$2 = {};
@@ -1360,11 +1601,15 @@
var toStringTagSupport = String(test$2) === '[object z]';
+ var global$Y = global$1m;
var TO_STRING_TAG_SUPPORT$2 = toStringTagSupport;
+ var isCallable$d = isCallable$r;
var classofRaw = classofRaw$1;
- var wellKnownSymbol$l = wellKnownSymbol$s;
+ var wellKnownSymbol$l = wellKnownSymbol$t;
var TO_STRING_TAG$2 = wellKnownSymbol$l('toStringTag');
+ var Object$1 = global$Y.Object;
+
// ES3 wrong here
var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
@@ -1376,52 +1621,71 @@
};
// getting tag from ES6+ `Object.prototype.toString`
- var classof$b = TO_STRING_TAG_SUPPORT$2 ? classofRaw : function (it) {
+ var classof$d = TO_STRING_TAG_SUPPORT$2 ? classofRaw : function (it) {
var O, tag, result;
return it === undefined ? 'Undefined' : it === null ? 'Null'
// @@toStringTag case
- : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG$2)) == 'string' ? tag
+ : typeof (tag = tryGet(O = Object$1(it), TO_STRING_TAG$2)) == 'string' ? tag
// builtinTag case
: CORRECT_ARGUMENTS ? classofRaw(O)
// ES3 arguments fallback
- : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
+ : (result = classofRaw(O)) == 'Object' && isCallable$d(O.callee) ? 'Arguments' : result;
};
var TO_STRING_TAG_SUPPORT$1 = toStringTagSupport;
- var classof$a = classof$b;
+ var classof$c = classof$d;
// `Object.prototype.toString` method implementation
// https://tc39.es/ecma262/#sec-object.prototype.tostring
var objectToString$1 = TO_STRING_TAG_SUPPORT$1 ? {}.toString : function toString() {
- return '[object ' + classof$a(this) + ']';
+ return '[object ' + classof$c(this) + ']';
};
var TO_STRING_TAG_SUPPORT = toStringTagSupport;
- var redefine$c = redefine$g.exports;
- var toString$1 = objectToString$1;
+ var redefine$c = redefine$h.exports;
+ var toString$l = objectToString$1;
// `Object.prototype.toString` method
// https://tc39.es/ecma262/#sec-object.prototype.tostring
if (!TO_STRING_TAG_SUPPORT) {
- redefine$c(Object.prototype, 'toString', toString$1, { unsafe: true });
+ redefine$c(Object.prototype, 'toString', toString$l, { unsafe: true });
}
- var toInteger$8 = toInteger$b;
+ var global$X = global$1m;
+ var classof$b = classof$d;
+
+ var String$3 = global$X.String;
+
+ var toString$k = function (argument) {
+ if (classof$b(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');
+ return String$3(argument);
+ };
+
+ var uncurryThis$L = functionUncurryThis;
+ var toIntegerOrInfinity$8 = toIntegerOrInfinity$b;
+ var toString$j = toString$k;
var requireObjectCoercible$b = requireObjectCoercible$e;
- // `String.prototype.{ codePointAt, at }` methods implementation
+ var charAt$8 = uncurryThis$L(''.charAt);
+ var charCodeAt$2 = uncurryThis$L(''.charCodeAt);
+ var stringSlice$b = uncurryThis$L(''.slice);
+
var createMethod$5 = function (CONVERT_TO_STRING) {
return function ($this, pos) {
- var S = String(requireObjectCoercible$b($this));
- var position = toInteger$8(pos);
+ var S = toString$j(requireObjectCoercible$b($this));
+ var position = toIntegerOrInfinity$8(pos);
var size = S.length;
var first, second;
if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
- first = S.charCodeAt(position);
+ first = charCodeAt$2(S, position);
return first < 0xD800 || first > 0xDBFF || position + 1 === size
- || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF
- ? CONVERT_TO_STRING ? S.charAt(position) : first
- : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
+ || (second = charCodeAt$2(S, position + 1)) < 0xDC00 || second > 0xDFFF
+ ? CONVERT_TO_STRING
+ ? charAt$8(S, position)
+ : first
+ : CONVERT_TO_STRING
+ ? stringSlice$b(S, position, position + 2)
+ : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
};
};
@@ -1434,7 +1698,8 @@
charAt: createMethod$5(true)
};
- var charAt$1 = stringMultibyte.charAt;
+ var charAt$7 = stringMultibyte.charAt;
+ var toString$i = toString$k;
var InternalStateModule$7 = internalState;
var defineIterator$1 = defineIterator$3;
@@ -1447,7 +1712,7 @@
defineIterator$1(String, 'String', function (iterated) {
setInternalState$7(this, {
type: STRING_ITERATOR,
- string: String(iterated),
+ string: toString$i(iterated),
index: 0
});
// `%StringIteratorPrototype%.next` method
@@ -1458,7 +1723,7 @@
var index = state.index;
var point;
if (index >= string.length) return { value: undefined, done: true };
- point = charAt$1(string, index);
+ point = charAt$7(string, index);
state.index += point.length;
return { value: point, done: false };
});
@@ -1499,57 +1764,84 @@
TouchList: 0
};
- var global$t = global$F;
- var DOMIterables$1 = domIterables;
- var ArrayIteratorMethods = es_array_iterator;
- var createNonEnumerableProperty$7 = createNonEnumerableProperty$e;
- var wellKnownSymbol$k = wellKnownSymbol$s;
+ // in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`
+ var documentCreateElement = documentCreateElement$2;
- var ITERATOR$6 = wellKnownSymbol$k('iterator');
+ var classList$1 = documentCreateElement('span').classList;
+ var DOMTokenListPrototype$2 = classList$1 && classList$1.constructor && classList$1.constructor.prototype;
+
+ var domTokenListPrototype = DOMTokenListPrototype$2 === Object.prototype ? undefined : DOMTokenListPrototype$2;
+
+ var global$W = global$1m;
+ var DOMIterables$1 = domIterables;
+ var DOMTokenListPrototype$1 = domTokenListPrototype;
+ var ArrayIteratorMethods = es_array_iterator;
+ var createNonEnumerableProperty$6 = createNonEnumerableProperty$b;
+ var wellKnownSymbol$k = wellKnownSymbol$t;
+
+ var ITERATOR$8 = wellKnownSymbol$k('iterator');
var TO_STRING_TAG$1 = wellKnownSymbol$k('toStringTag');
var ArrayValues = ArrayIteratorMethods.values;
- for (var COLLECTION_NAME$1 in DOMIterables$1) {
- var Collection$1 = global$t[COLLECTION_NAME$1];
- var CollectionPrototype$1 = Collection$1 && Collection$1.prototype;
- if (CollectionPrototype$1) {
+ var handlePrototype$1 = function (CollectionPrototype, COLLECTION_NAME) {
+ if (CollectionPrototype) {
// some Chrome versions have non-configurable methods on DOMTokenList
- if (CollectionPrototype$1[ITERATOR$6] !== ArrayValues) try {
- createNonEnumerableProperty$7(CollectionPrototype$1, ITERATOR$6, ArrayValues);
+ if (CollectionPrototype[ITERATOR$8] !== ArrayValues) try {
+ createNonEnumerableProperty$6(CollectionPrototype, ITERATOR$8, ArrayValues);
} catch (error) {
- CollectionPrototype$1[ITERATOR$6] = ArrayValues;
+ CollectionPrototype[ITERATOR$8] = ArrayValues;
}
- if (!CollectionPrototype$1[TO_STRING_TAG$1]) {
- createNonEnumerableProperty$7(CollectionPrototype$1, TO_STRING_TAG$1, COLLECTION_NAME$1);
+ if (!CollectionPrototype[TO_STRING_TAG$1]) {
+ createNonEnumerableProperty$6(CollectionPrototype, TO_STRING_TAG$1, COLLECTION_NAME);
}
- if (DOMIterables$1[COLLECTION_NAME$1]) for (var METHOD_NAME in ArrayIteratorMethods) {
+ if (DOMIterables$1[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {
// some Chrome versions have non-configurable methods on DOMTokenList
- if (CollectionPrototype$1[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {
- createNonEnumerableProperty$7(CollectionPrototype$1, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);
+ if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {
+ createNonEnumerableProperty$6(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);
} catch (error) {
- CollectionPrototype$1[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];
+ CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];
}
}
}
+ };
+
+ for (var COLLECTION_NAME$1 in DOMIterables$1) {
+ handlePrototype$1(global$W[COLLECTION_NAME$1] && global$W[COLLECTION_NAME$1].prototype, COLLECTION_NAME$1);
}
- var classof$9 = classofRaw$1;
+ handlePrototype$1(DOMTokenListPrototype$1, 'DOMTokenList');
+
+ var FunctionPrototype$1 = Function.prototype;
+ var apply$9 = FunctionPrototype$1.apply;
+ var bind$g = FunctionPrototype$1.bind;
+ var call$k = FunctionPrototype$1.call;
+
+ // eslint-disable-next-line es/no-reflect -- safe
+ var functionApply = typeof Reflect == 'object' && Reflect.apply || (bind$g ? call$k.bind(apply$9) : function () {
+ return call$k.apply(apply$9, arguments);
+ });
+
+ var classof$a = classofRaw$1;
// `IsArray` abstract operation
// https://tc39.es/ecma262/#sec-isarray
// eslint-disable-next-line es/no-array-isarray -- safe
- var isArray$6 = Array.isArray || function isArray(arg) {
- return classof$9(arg) == 'Array';
+ var isArray$8 = Array.isArray || function isArray(argument) {
+ return classof$a(argument) == 'Array';
};
var objectGetOwnPropertyNamesExternal = {};
+ var uncurryThis$K = functionUncurryThis;
+
+ var arraySlice$c = uncurryThis$K([].slice);
+
/* eslint-disable es/no-object-getownpropertynames -- safe */
- var toIndexedObject$6 = toIndexedObject$b;
+ var classof$9 = classofRaw$1;
+ var toIndexedObject$6 = toIndexedObject$c;
var $getOwnPropertyNames$1 = objectGetOwnPropertyNames.f;
-
- var toString = {}.toString;
+ var arraySlice$b = arraySlice$c;
var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
? Object.getOwnPropertyNames(window) : [];
@@ -1558,94 +1850,132 @@
try {
return $getOwnPropertyNames$1(it);
} catch (error) {
- return windowNames.slice();
+ return arraySlice$b(windowNames);
}
};
// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
objectGetOwnPropertyNamesExternal.f = function getOwnPropertyNames(it) {
- return windowNames && toString.call(it) == '[object Window]'
+ return windowNames && classof$9(it) == 'Window'
? getWindowNames(it)
: $getOwnPropertyNames$1(toIndexedObject$6(it));
};
- var aFunction$9 = function (it) {
- if (typeof it != 'function') {
- throw TypeError(String(it) + ' is not a function');
- } return it;
- };
+ var uncurryThis$J = functionUncurryThis;
+ var aCallable$8 = aCallable$a;
- var aFunction$8 = aFunction$9;
+ var bind$f = uncurryThis$J(uncurryThis$J.bind);
// optional / simple context binding
- var functionBindContext = function (fn, that, length) {
- aFunction$8(fn);
- if (that === undefined) return fn;
- switch (length) {
- case 0: return function () {
- return fn.call(that);
- };
- case 1: return function (a) {
- return fn.call(that, a);
- };
- case 2: return function (a, b) {
- return fn.call(that, a, b);
- };
- case 3: return function (a, b, c) {
- return fn.call(that, a, b, c);
- };
- }
- return function (/* ...args */) {
+ var functionBindContext = function (fn, that) {
+ aCallable$8(fn);
+ return that === undefined ? fn : bind$f ? bind$f(fn, that) : function (/* ...args */) {
return fn.apply(that, arguments);
};
};
- var isObject$l = isObject$r;
- var isArray$5 = isArray$6;
- var wellKnownSymbol$j = wellKnownSymbol$s;
+ var uncurryThis$I = functionUncurryThis;
+ var fails$K = fails$S;
+ var isCallable$c = isCallable$r;
+ var classof$8 = classof$d;
+ var getBuiltIn$6 = getBuiltIn$b;
+ var inspectSource$1 = inspectSource$4;
+
+ var noop$2 = function () { /* empty */ };
+ var empty$1 = [];
+ var construct$1 = getBuiltIn$6('Reflect', 'construct');
+ var constructorRegExp = /^\s*(?:class|function)\b/;
+ var exec$6 = uncurryThis$I(constructorRegExp.exec);
+ var INCORRECT_TO_STRING = !constructorRegExp.exec(noop$2);
+
+ var isConstructorModern = function (argument) {
+ if (!isCallable$c(argument)) return false;
+ try {
+ construct$1(noop$2, empty$1, argument);
+ return true;
+ } catch (error) {
+ return false;
+ }
+ };
+
+ var isConstructorLegacy = function (argument) {
+ if (!isCallable$c(argument)) return false;
+ switch (classof$8(argument)) {
+ case 'AsyncFunction':
+ case 'GeneratorFunction':
+ case 'AsyncGeneratorFunction': return false;
+ // we can't check .prototype since constructors produced by .bind haven't it
+ } return INCORRECT_TO_STRING || !!exec$6(constructorRegExp, inspectSource$1(argument));
+ };
+
+ // `IsConstructor` abstract operation
+ // https://tc39.es/ecma262/#sec-isconstructor
+ var isConstructor$4 = !construct$1 || fails$K(function () {
+ var called;
+ return isConstructorModern(isConstructorModern.call)
+ || !isConstructorModern(Object)
+ || !isConstructorModern(function () { called = true; })
+ || called;
+ }) ? isConstructorLegacy : isConstructorModern;
+
+ var global$V = global$1m;
+ var isArray$7 = isArray$8;
+ var isConstructor$3 = isConstructor$4;
+ var isObject$m = isObject$s;
+ var wellKnownSymbol$j = wellKnownSymbol$t;
var SPECIES$6 = wellKnownSymbol$j('species');
+ var Array$6 = global$V.Array;
- // `ArraySpeciesCreate` abstract operation
+ // a part of `ArraySpeciesCreate` abstract operation
// https://tc39.es/ecma262/#sec-arrayspeciescreate
- var arraySpeciesCreate$3 = function (originalArray, length) {
+ var arraySpeciesConstructor$1 = function (originalArray) {
var C;
- if (isArray$5(originalArray)) {
+ if (isArray$7(originalArray)) {
C = originalArray.constructor;
// cross-realm fallback
- if (typeof C == 'function' && (C === Array || isArray$5(C.prototype))) C = undefined;
- else if (isObject$l(C)) {
+ if (isConstructor$3(C) && (C === Array$6 || isArray$7(C.prototype))) C = undefined;
+ else if (isObject$m(C)) {
C = C[SPECIES$6];
if (C === null) C = undefined;
}
- } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);
+ } return C === undefined ? Array$6 : C;
};
- var bind$b = functionBindContext;
+ var arraySpeciesConstructor = arraySpeciesConstructor$1;
+
+ // `ArraySpeciesCreate` abstract operation
+ // https://tc39.es/ecma262/#sec-arrayspeciescreate
+ var arraySpeciesCreate$4 = function (originalArray, length) {
+ return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
+ };
+
+ var bind$e = functionBindContext;
+ var uncurryThis$H = functionUncurryThis;
var IndexedObject$3 = indexedObject;
- var toObject$f = toObject$i;
- var toLength$o = toLength$q;
- var arraySpeciesCreate$2 = arraySpeciesCreate$3;
+ var toObject$g = toObject$j;
+ var lengthOfArrayLike$e = lengthOfArrayLike$g;
+ var arraySpeciesCreate$3 = arraySpeciesCreate$4;
- var push = [].push;
+ var push$9 = uncurryThis$H([].push);
- // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation
+ // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation
var createMethod$4 = function (TYPE) {
var IS_MAP = TYPE == 1;
var IS_FILTER = TYPE == 2;
var IS_SOME = TYPE == 3;
var IS_EVERY = TYPE == 4;
var IS_FIND_INDEX = TYPE == 6;
- var IS_FILTER_OUT = TYPE == 7;
+ var IS_FILTER_REJECT = TYPE == 7;
var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
return function ($this, callbackfn, that, specificCreate) {
- var O = toObject$f($this);
+ var O = toObject$g($this);
var self = IndexedObject$3(O);
- var boundFunction = bind$b(callbackfn, that, 3);
- var length = toLength$o(self.length);
+ var boundFunction = bind$e(callbackfn, that);
+ var length = lengthOfArrayLike$e(self);
var index = 0;
- var create = specificCreate || arraySpeciesCreate$2;
- var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;
+ var create = specificCreate || arraySpeciesCreate$3;
+ var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;
var value, result;
for (;length > index; index++) if (NO_HOLES || index in self) {
value = self[index];
@@ -1656,10 +1986,10 @@
case 3: return true; // some
case 5: return value; // find
case 6: return index; // findIndex
- case 2: push.call(target, value); // filter
+ case 2: push$9(target, value); // filter
} else switch (TYPE) {
case 4: return false; // every
- case 7: push.call(target, value); // filterOut
+ case 7: push$9(target, value); // filterReject
}
}
}
@@ -1689,41 +2019,47 @@
// `Array.prototype.findIndex` method
// https://tc39.es/ecma262/#sec-array.prototype.findIndex
findIndex: createMethod$4(6),
- // `Array.prototype.filterOut` method
+ // `Array.prototype.filterReject` method
// https://github.com/tc39/proposal-array-filtering
- filterOut: createMethod$4(7)
+ filterReject: createMethod$4(7)
};
- var $$14 = _export;
- var global$s = global$F;
- var getBuiltIn$5 = getBuiltIn$9;
+ var $$1b = _export;
+ var global$U = global$1m;
+ var getBuiltIn$5 = getBuiltIn$b;
+ var apply$8 = functionApply;
+ var call$j = functionCall;
+ var uncurryThis$G = functionUncurryThis;
var DESCRIPTORS$h = descriptors;
- var NATIVE_SYMBOL = nativeSymbol;
- var USE_SYMBOL_AS_UID = useSymbolAsUid;
- var fails$F = fails$N;
- var has$8 = has$j;
- var isArray$4 = isArray$6;
- var isObject$k = isObject$r;
- var anObject$g = anObject$m;
- var toObject$e = toObject$i;
- var toIndexedObject$5 = toIndexedObject$b;
- var toPrimitive$4 = toPrimitive$7;
+ var NATIVE_SYMBOL$1 = nativeSymbol;
+ var fails$J = fails$S;
+ var hasOwn$b = hasOwnProperty_1;
+ var isArray$6 = isArray$8;
+ var isCallable$b = isCallable$r;
+ var isObject$l = isObject$s;
+ var isPrototypeOf$8 = objectIsPrototypeOf;
+ var isSymbol$3 = isSymbol$6;
+ var anObject$h = anObject$n;
+ var toObject$f = toObject$j;
+ var toIndexedObject$5 = toIndexedObject$c;
+ var toPropertyKey$2 = toPropertyKey$5;
+ var $toString$3 = toString$k;
var createPropertyDescriptor$3 = createPropertyDescriptor$7;
var nativeObjectCreate = objectCreate;
var objectKeys$2 = objectKeys$4;
- var getOwnPropertyNamesModule = objectGetOwnPropertyNames;
+ var getOwnPropertyNamesModule$1 = objectGetOwnPropertyNames;
var getOwnPropertyNamesExternal = objectGetOwnPropertyNamesExternal;
var getOwnPropertySymbolsModule$1 = objectGetOwnPropertySymbols;
var getOwnPropertyDescriptorModule$2 = objectGetOwnPropertyDescriptor;
var definePropertyModule$3 = objectDefineProperty;
var propertyIsEnumerableModule$1 = objectPropertyIsEnumerable;
- var createNonEnumerableProperty$6 = createNonEnumerableProperty$e;
- var redefine$b = redefine$g.exports;
+ var arraySlice$a = arraySlice$c;
+ var redefine$b = redefine$h.exports;
var shared$1 = shared$5.exports;
var sharedKey = sharedKey$4;
var hiddenKeys$1 = hiddenKeys$6;
var uid$2 = uid$5;
- var wellKnownSymbol$i = wellKnownSymbol$s;
+ var wellKnownSymbol$i = wellKnownSymbol$t;
var wrappedWellKnownSymbolModule = wellKnownSymbolWrapped;
var defineWellKnownSymbol$2 = defineWellKnownSymbol$4;
var setToStringTag$7 = setToStringTag$a;
@@ -1734,40 +2070,47 @@
var SYMBOL = 'Symbol';
var PROTOTYPE$1 = 'prototype';
var TO_PRIMITIVE = wellKnownSymbol$i('toPrimitive');
+
var setInternalState$6 = InternalStateModule$6.set;
var getInternalState$4 = InternalStateModule$6.getterFor(SYMBOL);
- var ObjectPrototype$2 = Object[PROTOTYPE$1];
- var $Symbol = global$s.Symbol;
+
+ var ObjectPrototype$3 = Object[PROTOTYPE$1];
+ var $Symbol = global$U.Symbol;
+ var SymbolPrototype$1 = $Symbol && $Symbol[PROTOTYPE$1];
+ var TypeError$g = global$U.TypeError;
+ var QObject = global$U.QObject;
var $stringify = getBuiltIn$5('JSON', 'stringify');
var nativeGetOwnPropertyDescriptor$2 = getOwnPropertyDescriptorModule$2.f;
var nativeDefineProperty$1 = definePropertyModule$3.f;
var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
var nativePropertyIsEnumerable = propertyIsEnumerableModule$1.f;
+ var push$8 = uncurryThis$G([].push);
+
var AllSymbols = shared$1('symbols');
var ObjectPrototypeSymbols = shared$1('op-symbols');
var StringToSymbolRegistry = shared$1('string-to-symbol-registry');
var SymbolToStringRegistry = shared$1('symbol-to-string-registry');
var WellKnownSymbolsStore = shared$1('wks');
- var QObject = global$s.QObject;
+
// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
var USE_SETTER = !QObject || !QObject[PROTOTYPE$1] || !QObject[PROTOTYPE$1].findChild;
// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
- var setSymbolDescriptor = DESCRIPTORS$h && fails$F(function () {
+ var setSymbolDescriptor = DESCRIPTORS$h && fails$J(function () {
return nativeObjectCreate(nativeDefineProperty$1({}, 'a', {
get: function () { return nativeDefineProperty$1(this, 'a', { value: 7 }).a; }
})).a != 7;
}) ? function (O, P, Attributes) {
- var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$2(ObjectPrototype$2, P);
- if (ObjectPrototypeDescriptor) delete ObjectPrototype$2[P];
+ var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$2(ObjectPrototype$3, P);
+ if (ObjectPrototypeDescriptor) delete ObjectPrototype$3[P];
nativeDefineProperty$1(O, P, Attributes);
- if (ObjectPrototypeDescriptor && O !== ObjectPrototype$2) {
- nativeDefineProperty$1(ObjectPrototype$2, P, ObjectPrototypeDescriptor);
+ if (ObjectPrototypeDescriptor && O !== ObjectPrototype$3) {
+ nativeDefineProperty$1(ObjectPrototype$3, P, ObjectPrototypeDescriptor);
}
} : nativeDefineProperty$1;
var wrap$2 = function (tag, description) {
- var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE$1]);
+ var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype$1);
setInternalState$6(symbol, {
type: SYMBOL,
tag: tag,
@@ -1777,34 +2120,28 @@
return symbol;
};
- var isSymbol$1 = USE_SYMBOL_AS_UID ? function (it) {
- return typeof it == 'symbol';
- } : function (it) {
- return Object(it) instanceof $Symbol;
- };
-
var $defineProperty = function defineProperty(O, P, Attributes) {
- if (O === ObjectPrototype$2) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
- anObject$g(O);
- var key = toPrimitive$4(P, true);
- anObject$g(Attributes);
- if (has$8(AllSymbols, key)) {
+ if (O === ObjectPrototype$3) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
+ anObject$h(O);
+ var key = toPropertyKey$2(P);
+ anObject$h(Attributes);
+ if (hasOwn$b(AllSymbols, key)) {
if (!Attributes.enumerable) {
- if (!has$8(O, HIDDEN)) nativeDefineProperty$1(O, HIDDEN, createPropertyDescriptor$3(1, {}));
+ if (!hasOwn$b(O, HIDDEN)) nativeDefineProperty$1(O, HIDDEN, createPropertyDescriptor$3(1, {}));
O[HIDDEN][key] = true;
} else {
- if (has$8(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
+ if (hasOwn$b(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor$3(0, false) });
} return setSymbolDescriptor(O, key, Attributes);
} return nativeDefineProperty$1(O, key, Attributes);
};
var $defineProperties = function defineProperties(O, Properties) {
- anObject$g(O);
+ anObject$h(O);
var properties = toIndexedObject$5(Properties);
var keys = objectKeys$2(properties).concat($getOwnPropertySymbols(properties));
$forEach$2(keys, function (key) {
- if (!DESCRIPTORS$h || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);
+ if (!DESCRIPTORS$h || call$j($propertyIsEnumerable$1, properties, key)) $defineProperty(O, key, properties[key]);
});
return O;
};
@@ -1813,19 +2150,20 @@
return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
};
- var $propertyIsEnumerable = function propertyIsEnumerable(V) {
- var P = toPrimitive$4(V, true);
- var enumerable = nativePropertyIsEnumerable.call(this, P);
- if (this === ObjectPrototype$2 && has$8(AllSymbols, P) && !has$8(ObjectPrototypeSymbols, P)) return false;
- return enumerable || !has$8(this, P) || !has$8(AllSymbols, P) || has$8(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;
+ var $propertyIsEnumerable$1 = function propertyIsEnumerable(V) {
+ var P = toPropertyKey$2(V);
+ var enumerable = call$j(nativePropertyIsEnumerable, this, P);
+ if (this === ObjectPrototype$3 && hasOwn$b(AllSymbols, P) && !hasOwn$b(ObjectPrototypeSymbols, P)) return false;
+ return enumerable || !hasOwn$b(this, P) || !hasOwn$b(AllSymbols, P) || hasOwn$b(this, HIDDEN) && this[HIDDEN][P]
+ ? enumerable : true;
};
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
var it = toIndexedObject$5(O);
- var key = toPrimitive$4(P, true);
- if (it === ObjectPrototype$2 && has$8(AllSymbols, key) && !has$8(ObjectPrototypeSymbols, key)) return;
+ var key = toPropertyKey$2(P);
+ if (it === ObjectPrototype$3 && hasOwn$b(AllSymbols, key) && !hasOwn$b(ObjectPrototypeSymbols, key)) return;
var descriptor = nativeGetOwnPropertyDescriptor$2(it, key);
- if (descriptor && has$8(AllSymbols, key) && !(has$8(it, HIDDEN) && it[HIDDEN][key])) {
+ if (descriptor && hasOwn$b(AllSymbols, key) && !(hasOwn$b(it, HIDDEN) && it[HIDDEN][key])) {
descriptor.enumerable = true;
}
return descriptor;
@@ -1835,18 +2173,18 @@
var names = nativeGetOwnPropertyNames(toIndexedObject$5(O));
var result = [];
$forEach$2(names, function (key) {
- if (!has$8(AllSymbols, key) && !has$8(hiddenKeys$1, key)) result.push(key);
+ if (!hasOwn$b(AllSymbols, key) && !hasOwn$b(hiddenKeys$1, key)) push$8(result, key);
});
return result;
};
var $getOwnPropertySymbols = function getOwnPropertySymbols(O) {
- var IS_OBJECT_PROTOTYPE = O === ObjectPrototype$2;
+ var IS_OBJECT_PROTOTYPE = O === ObjectPrototype$3;
var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject$5(O));
var result = [];
$forEach$2(names, function (key) {
- if (has$8(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has$8(ObjectPrototype$2, key))) {
- result.push(AllSymbols[key]);
+ if (hasOwn$b(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn$b(ObjectPrototype$3, key))) {
+ push$8(result, AllSymbols[key]);
}
});
return result;
@@ -1854,21 +2192,23 @@
// `Symbol` constructor
// https://tc39.es/ecma262/#sec-symbol-constructor
- if (!NATIVE_SYMBOL) {
+ if (!NATIVE_SYMBOL$1) {
$Symbol = function Symbol() {
- if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');
- var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);
+ if (isPrototypeOf$8(SymbolPrototype$1, this)) throw TypeError$g('Symbol is not a constructor');
+ var description = !arguments.length || arguments[0] === undefined ? undefined : $toString$3(arguments[0]);
var tag = uid$2(description);
var setter = function (value) {
- if (this === ObjectPrototype$2) setter.call(ObjectPrototypeSymbols, value);
- if (has$8(this, HIDDEN) && has$8(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
+ if (this === ObjectPrototype$3) call$j(setter, ObjectPrototypeSymbols, value);
+ if (hasOwn$b(this, HIDDEN) && hasOwn$b(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
setSymbolDescriptor(this, tag, createPropertyDescriptor$3(1, value));
};
- if (DESCRIPTORS$h && USE_SETTER) setSymbolDescriptor(ObjectPrototype$2, tag, { configurable: true, set: setter });
+ if (DESCRIPTORS$h && USE_SETTER) setSymbolDescriptor(ObjectPrototype$3, tag, { configurable: true, set: setter });
return wrap$2(tag, description);
};
- redefine$b($Symbol[PROTOTYPE$1], 'toString', function toString() {
+ SymbolPrototype$1 = $Symbol[PROTOTYPE$1];
+
+ redefine$b(SymbolPrototype$1, 'toString', function toString() {
return getInternalState$4(this).tag;
});
@@ -1876,10 +2216,10 @@
return wrap$2(uid$2(description), description);
});
- propertyIsEnumerableModule$1.f = $propertyIsEnumerable;
+ propertyIsEnumerableModule$1.f = $propertyIsEnumerable$1;
definePropertyModule$3.f = $defineProperty;
getOwnPropertyDescriptorModule$2.f = $getOwnPropertyDescriptor;
- getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
+ getOwnPropertyNamesModule$1.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
getOwnPropertySymbolsModule$1.f = $getOwnPropertySymbols;
wrappedWellKnownSymbolModule.f = function (name) {
@@ -1888,19 +2228,19 @@
if (DESCRIPTORS$h) {
// https://github.com/tc39/proposal-Symbol-description
- nativeDefineProperty$1($Symbol[PROTOTYPE$1], 'description', {
+ nativeDefineProperty$1(SymbolPrototype$1, 'description', {
configurable: true,
get: function description() {
return getInternalState$4(this).description;
}
});
{
- redefine$b(ObjectPrototype$2, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });
+ redefine$b(ObjectPrototype$3, 'propertyIsEnumerable', $propertyIsEnumerable$1, { unsafe: true });
}
}
}
- $$14({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {
+ $$1b({ global: true, wrap: true, forced: !NATIVE_SYMBOL$1, sham: !NATIVE_SYMBOL$1 }, {
Symbol: $Symbol
});
@@ -1908,12 +2248,12 @@
defineWellKnownSymbol$2(name);
});
- $$14({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
+ $$1b({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL$1 }, {
// `Symbol.for` method
// https://tc39.es/ecma262/#sec-symbol.for
'for': function (key) {
- var string = String(key);
- if (has$8(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
+ var string = $toString$3(key);
+ if (hasOwn$b(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
var symbol = $Symbol(string);
StringToSymbolRegistry[string] = symbol;
SymbolToStringRegistry[symbol] = string;
@@ -1922,14 +2262,14 @@
// `Symbol.keyFor` method
// https://tc39.es/ecma262/#sec-symbol.keyfor
keyFor: function keyFor(sym) {
- if (!isSymbol$1(sym)) throw TypeError(sym + ' is not a symbol');
- if (has$8(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
+ if (!isSymbol$3(sym)) throw TypeError$g(sym + ' is not a symbol');
+ if (hasOwn$b(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
},
useSetter: function () { USE_SETTER = true; },
useSimple: function () { USE_SETTER = false; }
});
- $$14({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS$h }, {
+ $$1b({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL$1, sham: !DESCRIPTORS$h }, {
// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
create: $create,
@@ -1944,7 +2284,7 @@
getOwnPropertyDescriptor: $getOwnPropertyDescriptor
});
- $$14({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {
+ $$1b({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL$1 }, {
// `Object.getOwnPropertyNames` method
// https://tc39.es/ecma262/#sec-object.getownpropertynames
getOwnPropertyNames: $getOwnPropertyNames,
@@ -1955,16 +2295,16 @@
// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives
// https://bugs.chromium.org/p/v8/issues/detail?id=3443
- $$14({ target: 'Object', stat: true, forced: fails$F(function () { getOwnPropertySymbolsModule$1.f(1); }) }, {
+ $$1b({ target: 'Object', stat: true, forced: fails$J(function () { getOwnPropertySymbolsModule$1.f(1); }) }, {
getOwnPropertySymbols: function getOwnPropertySymbols(it) {
- return getOwnPropertySymbolsModule$1.f(toObject$e(it));
+ return getOwnPropertySymbolsModule$1.f(toObject$f(it));
}
});
// `JSON.stringify` method behavior with symbols
// https://tc39.es/ecma262/#sec-json.stringify
if ($stringify) {
- var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails$F(function () {
+ var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL$1 || fails$J(function () {
var symbol = $Symbol();
// MS Edge converts symbol values to JSON as {}
return $stringify([symbol]) != '[null]'
@@ -1974,29 +2314,31 @@
|| $stringify(Object(symbol)) != '{}';
});
- $$14({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {
+ $$1b({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
stringify: function stringify(it, replacer, space) {
- var args = [it];
- var index = 1;
- var $replacer;
- while (arguments.length > index) args.push(arguments[index++]);
- $replacer = replacer;
- if (!isObject$k(replacer) && it === undefined || isSymbol$1(it)) return; // IE8 returns string on undefined
- if (!isArray$4(replacer)) replacer = function (key, value) {
- if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
- if (!isSymbol$1(value)) return value;
+ var args = arraySlice$a(arguments);
+ var $replacer = replacer;
+ if (!isObject$l(replacer) && it === undefined || isSymbol$3(it)) return; // IE8 returns string on undefined
+ if (!isArray$6(replacer)) replacer = function (key, value) {
+ if (isCallable$b($replacer)) value = call$j($replacer, this, key, value);
+ if (!isSymbol$3(value)) return value;
};
args[1] = replacer;
- return $stringify.apply(null, args);
+ return apply$8($stringify, null, args);
}
});
}
// `Symbol.prototype[@@toPrimitive]` method
// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
- if (!$Symbol[PROTOTYPE$1][TO_PRIMITIVE]) {
- createNonEnumerableProperty$6($Symbol[PROTOTYPE$1], TO_PRIMITIVE, $Symbol[PROTOTYPE$1].valueOf);
+ if (!SymbolPrototype$1[TO_PRIMITIVE]) {
+ var valueOf = SymbolPrototype$1.valueOf;
+ // eslint-disable-next-line no-unused-vars -- required for .length
+ redefine$b(SymbolPrototype$1, TO_PRIMITIVE, function (hint) {
+ // TODO: improve hint logic
+ return call$j(valueOf, this);
+ });
}
// `Symbol.prototype[@@toStringTag]` property
// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag
@@ -2004,92 +2346,111 @@
hiddenKeys$1[HIDDEN] = true;
- var $$13 = _export;
+ var $$1a = _export;
var DESCRIPTORS$g = descriptors;
- var global$r = global$F;
- var has$7 = has$j;
- var isObject$j = isObject$r;
+ var global$T = global$1m;
+ var uncurryThis$F = functionUncurryThis;
+ var hasOwn$a = hasOwnProperty_1;
+ var isCallable$a = isCallable$r;
+ var isPrototypeOf$7 = objectIsPrototypeOf;
+ var toString$h = toString$k;
var defineProperty$8 = objectDefineProperty.f;
var copyConstructorProperties = copyConstructorProperties$2;
- var NativeSymbol = global$r.Symbol;
+ var NativeSymbol = global$T.Symbol;
+ var SymbolPrototype = NativeSymbol && NativeSymbol.prototype;
- if (DESCRIPTORS$g && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||
+ if (DESCRIPTORS$g && isCallable$a(NativeSymbol) && (!('description' in SymbolPrototype) ||
// Safari 12 bug
NativeSymbol().description !== undefined
)) {
var EmptyStringDescriptionStore = {};
// wrap Symbol constructor for correct work with undefined description
var SymbolWrapper = function Symbol() {
- var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);
- var result = this instanceof SymbolWrapper
+ var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString$h(arguments[0]);
+ var result = isPrototypeOf$7(SymbolPrototype, this)
? new NativeSymbol(description)
// in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'
: description === undefined ? NativeSymbol() : NativeSymbol(description);
if (description === '') EmptyStringDescriptionStore[result] = true;
return result;
};
- copyConstructorProperties(SymbolWrapper, NativeSymbol);
- var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;
- symbolPrototype.constructor = SymbolWrapper;
- var symbolToString = symbolPrototype.toString;
- var native = String(NativeSymbol('test')) == 'Symbol(test)';
+ copyConstructorProperties(SymbolWrapper, NativeSymbol);
+ SymbolWrapper.prototype = SymbolPrototype;
+ SymbolPrototype.constructor = SymbolWrapper;
+
+ var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';
+ var symbolToString$1 = uncurryThis$F(SymbolPrototype.toString);
+ var symbolValueOf = uncurryThis$F(SymbolPrototype.valueOf);
var regexp = /^Symbol\((.*)\)[^)]+$/;
- defineProperty$8(symbolPrototype, 'description', {
+ var replace$8 = uncurryThis$F(''.replace);
+ var stringSlice$a = uncurryThis$F(''.slice);
+
+ defineProperty$8(SymbolPrototype, 'description', {
configurable: true,
get: function description() {
- var symbol = isObject$j(this) ? this.valueOf() : this;
- var string = symbolToString.call(symbol);
- if (has$7(EmptyStringDescriptionStore, symbol)) return '';
- var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');
+ var symbol = symbolValueOf(this);
+ var string = symbolToString$1(symbol);
+ if (hasOwn$a(EmptyStringDescriptionStore, symbol)) return '';
+ var desc = NATIVE_SYMBOL ? stringSlice$a(string, 7, -1) : replace$8(string, regexp, '$1');
return desc === '' ? undefined : desc;
}
});
- $$13({ global: true, forced: true }, {
+ $$1a({ global: true, forced: true }, {
Symbol: SymbolWrapper
});
}
// eslint-disable-next-line es/no-typed-arrays -- safe
- var arrayBufferNative = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';
+ var arrayBufferNative = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';
- var redefine$a = redefine$g.exports;
+ var redefine$a = redefine$h.exports;
var redefineAll$4 = function (target, src, options) {
for (var key in src) redefine$a(target, key, src[key], options);
return target;
};
- var anInstance$7 = function (it, Constructor, name) {
- if (!(it instanceof Constructor)) {
- throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');
- } return it;
+ var global$S = global$1m;
+ var isPrototypeOf$6 = objectIsPrototypeOf;
+
+ var TypeError$f = global$S.TypeError;
+
+ var anInstance$7 = function (it, Prototype) {
+ if (isPrototypeOf$6(Prototype, it)) return it;
+ throw TypeError$f('Incorrect invocation');
};
- var toInteger$7 = toInteger$b;
- var toLength$n = toLength$q;
+ var global$R = global$1m;
+ var toIntegerOrInfinity$7 = toIntegerOrInfinity$b;
+ var toLength$a = toLength$c;
+
+ var RangeError$b = global$R.RangeError;
// `ToIndex` abstract operation
// https://tc39.es/ecma262/#sec-toindex
var toIndex$2 = function (it) {
if (it === undefined) return 0;
- var number = toInteger$7(it);
- var length = toLength$n(number);
- if (number !== length) throw RangeError('Wrong length or index');
+ var number = toIntegerOrInfinity$7(it);
+ var length = toLength$a(number);
+ if (number !== length) throw RangeError$b('Wrong length or index');
return length;
};
// IEEE754 conversions based on https://github.com/feross/ieee754
+ var global$Q = global$1m;
+
+ var Array$5 = global$Q.Array;
var abs$4 = Math.abs;
var pow$2 = Math.pow;
- var floor$6 = Math.floor;
+ var floor$7 = Math.floor;
var log$2 = Math.log;
var LN2 = Math.LN2;
var pack = function (number, mantissaLength, bytes) {
- var buffer = new Array(bytes);
+ var buffer = Array$5(bytes);
var exponentLength = bytes * 8 - mantissaLength - 1;
var eMax = (1 << exponentLength) - 1;
var eBias = eMax >> 1;
@@ -2104,7 +2465,7 @@
mantissa = number != number ? 1 : 0;
exponent = eMax;
} else {
- exponent = floor$6(log$2(number) / LN2);
+ exponent = floor$7(log$2(number) / LN2);
if (number * (c = pow$2(2, -exponent)) < 1) {
exponent--;
c *= 2;
@@ -2168,15 +2529,15 @@
unpack: unpack
};
- var toObject$d = toObject$i;
+ var toObject$e = toObject$j;
var toAbsoluteIndex$6 = toAbsoluteIndex$8;
- var toLength$m = toLength$q;
+ var lengthOfArrayLike$d = lengthOfArrayLike$g;
// `Array.prototype.fill` method implementation
// https://tc39.es/ecma262/#sec-array.prototype.fill
var arrayFill$1 = function fill(value /* , start = 0, end = @length */) {
- var O = toObject$d(this);
- var length = toLength$m(O.length);
+ var O = toObject$e(this);
+ var length = lengthOfArrayLike$d(O);
var argumentsLength = arguments.length;
var index = toAbsoluteIndex$6(argumentsLength > 1 ? arguments[1] : undefined, length);
var end = argumentsLength > 2 ? arguments[2] : undefined;
@@ -2185,15 +2546,17 @@
return O;
};
- var global$q = global$F;
+ var global$P = global$1m;
+ var uncurryThis$E = functionUncurryThis;
var DESCRIPTORS$f = descriptors;
var NATIVE_ARRAY_BUFFER$2 = arrayBufferNative;
- var createNonEnumerableProperty$5 = createNonEnumerableProperty$e;
+ var FunctionName = functionName;
+ var createNonEnumerableProperty$5 = createNonEnumerableProperty$b;
var redefineAll$3 = redefineAll$4;
- var fails$E = fails$N;
+ var fails$I = fails$S;
var anInstance$6 = anInstance$7;
- var toInteger$6 = toInteger$b;
- var toLength$l = toLength$q;
+ var toIntegerOrInfinity$6 = toIntegerOrInfinity$b;
+ var toLength$9 = toLength$c;
var toIndex$1 = toIndex$2;
var IEEE754 = ieee754$2;
var getPrototypeOf$2 = objectGetPrototypeOf;
@@ -2201,9 +2564,12 @@
var getOwnPropertyNames$4 = objectGetOwnPropertyNames.f;
var defineProperty$7 = objectDefineProperty.f;
var arrayFill = arrayFill$1;
+ var arraySlice$9 = arraySlice$c;
var setToStringTag$6 = setToStringTag$a;
var InternalStateModule$5 = internalState;
+ var PROPER_FUNCTION_NAME$3 = FunctionName.PROPER;
+ var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
var getInternalState$3 = InternalStateModule$5.get;
var setInternalState$5 = InternalStateModule$5.set;
var ARRAY_BUFFER$1 = 'ArrayBuffer';
@@ -2211,12 +2577,16 @@
var PROTOTYPE = 'prototype';
var WRONG_LENGTH$1 = 'Wrong length';
var WRONG_INDEX = 'Wrong index';
- var NativeArrayBuffer$1 = global$q[ARRAY_BUFFER$1];
+ var NativeArrayBuffer$1 = global$P[ARRAY_BUFFER$1];
var $ArrayBuffer = NativeArrayBuffer$1;
- var $DataView = global$q[DATA_VIEW];
- var $DataViewPrototype = $DataView && $DataView[PROTOTYPE];
- var ObjectPrototype$1 = Object.prototype;
- var RangeError$2 = global$q.RangeError;
+ var ArrayBufferPrototype$1 = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];
+ var $DataView = global$P[DATA_VIEW];
+ var DataViewPrototype$1 = $DataView && $DataView[PROTOTYPE];
+ var ObjectPrototype$2 = Object.prototype;
+ var Array$4 = global$P.Array;
+ var RangeError$a = global$P.RangeError;
+ var fill$1 = uncurryThis$E(arrayFill);
+ var reverse = uncurryThis$E([].reverse);
var packIEEE754 = IEEE754.pack;
var unpackIEEE754 = IEEE754.unpack;
@@ -2252,17 +2622,17 @@
var get$4 = function (view, count, index, isLittleEndian) {
var intIndex = toIndex$1(index);
var store = getInternalState$3(view);
- if (intIndex + count > store.byteLength) throw RangeError$2(WRONG_INDEX);
+ if (intIndex + count > store.byteLength) throw RangeError$a(WRONG_INDEX);
var bytes = getInternalState$3(store.buffer).bytes;
var start = intIndex + store.byteOffset;
- var pack = bytes.slice(start, start + count);
- return isLittleEndian ? pack : pack.reverse();
+ var pack = arraySlice$9(bytes, start, start + count);
+ return isLittleEndian ? pack : reverse(pack);
};
var set$3 = function (view, count, index, conversion, value, isLittleEndian) {
var intIndex = toIndex$1(index);
var store = getInternalState$3(view);
- if (intIndex + count > store.byteLength) throw RangeError$2(WRONG_INDEX);
+ if (intIndex + count > store.byteLength) throw RangeError$a(WRONG_INDEX);
var bytes = getInternalState$3(store.buffer).bytes;
var start = intIndex + store.byteOffset;
var pack = conversion(+value);
@@ -2271,23 +2641,25 @@
if (!NATIVE_ARRAY_BUFFER$2) {
$ArrayBuffer = function ArrayBuffer(length) {
- anInstance$6(this, $ArrayBuffer, ARRAY_BUFFER$1);
+ anInstance$6(this, ArrayBufferPrototype$1);
var byteLength = toIndex$1(length);
setInternalState$5(this, {
- bytes: arrayFill.call(new Array(byteLength), 0),
+ bytes: fill$1(Array$4(byteLength), 0),
byteLength: byteLength
});
if (!DESCRIPTORS$f) this.byteLength = byteLength;
};
+ ArrayBufferPrototype$1 = $ArrayBuffer[PROTOTYPE];
+
$DataView = function DataView(buffer, byteOffset, byteLength) {
- anInstance$6(this, $DataView, DATA_VIEW);
- anInstance$6(buffer, $ArrayBuffer, DATA_VIEW);
+ anInstance$6(this, DataViewPrototype$1);
+ anInstance$6(buffer, ArrayBufferPrototype$1);
var bufferLength = getInternalState$3(buffer).byteLength;
- var offset = toInteger$6(byteOffset);
- if (offset < 0 || offset > bufferLength) throw RangeError$2('Wrong offset');
- byteLength = byteLength === undefined ? bufferLength - offset : toLength$l(byteLength);
- if (offset + byteLength > bufferLength) throw RangeError$2(WRONG_LENGTH$1);
+ var offset = toIntegerOrInfinity$6(byteOffset);
+ if (offset < 0 || offset > bufferLength) throw RangeError$a('Wrong offset');
+ byteLength = byteLength === undefined ? bufferLength - offset : toLength$9(byteLength);
+ if (offset + byteLength > bufferLength) throw RangeError$a(WRONG_LENGTH$1);
setInternalState$5(this, {
buffer: buffer,
byteLength: byteLength,
@@ -2300,6 +2672,8 @@
}
};
+ DataViewPrototype$1 = $DataView[PROTOTYPE];
+
if (DESCRIPTORS$f) {
addGetter$1($ArrayBuffer, 'byteLength');
addGetter$1($DataView, 'buffer');
@@ -2307,7 +2681,7 @@
addGetter$1($DataView, 'byteOffset');
}
- redefineAll$3($DataView[PROTOTYPE], {
+ redefineAll$3(DataViewPrototype$1, {
getInt8: function getInt8(byteOffset) {
return get$4(this, 1, byteOffset)[0] << 24 >> 24;
},
@@ -2360,47 +2734,53 @@
}
});
} else {
+ var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME$3 && NativeArrayBuffer$1.name !== ARRAY_BUFFER$1;
/* eslint-disable no-new -- required for testing */
- if (!fails$E(function () {
+ if (!fails$I(function () {
NativeArrayBuffer$1(1);
- }) || !fails$E(function () {
+ }) || !fails$I(function () {
new NativeArrayBuffer$1(-1);
- }) || fails$E(function () {
+ }) || fails$I(function () {
new NativeArrayBuffer$1();
new NativeArrayBuffer$1(1.5);
new NativeArrayBuffer$1(NaN);
- return NativeArrayBuffer$1.name != ARRAY_BUFFER$1;
+ return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;
})) {
/* eslint-enable no-new -- required for testing */
$ArrayBuffer = function ArrayBuffer(length) {
- anInstance$6(this, $ArrayBuffer);
+ anInstance$6(this, ArrayBufferPrototype$1);
return new NativeArrayBuffer$1(toIndex$1(length));
};
- var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE] = NativeArrayBuffer$1[PROTOTYPE];
+
+ $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype$1;
+
for (var keys$2 = getOwnPropertyNames$4(NativeArrayBuffer$1), j$2 = 0, key$1; keys$2.length > j$2;) {
if (!((key$1 = keys$2[j$2++]) in $ArrayBuffer)) {
createNonEnumerableProperty$5($ArrayBuffer, key$1, NativeArrayBuffer$1[key$1]);
}
}
- ArrayBufferPrototype.constructor = $ArrayBuffer;
+
+ ArrayBufferPrototype$1.constructor = $ArrayBuffer;
+ } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {
+ createNonEnumerableProperty$5(NativeArrayBuffer$1, 'name', ARRAY_BUFFER$1);
}
// WebKit bug - the same parent prototype for typed arrays and data view
- if (setPrototypeOf$5 && getPrototypeOf$2($DataViewPrototype) !== ObjectPrototype$1) {
- setPrototypeOf$5($DataViewPrototype, ObjectPrototype$1);
+ if (setPrototypeOf$5 && getPrototypeOf$2(DataViewPrototype$1) !== ObjectPrototype$2) {
+ setPrototypeOf$5(DataViewPrototype$1, ObjectPrototype$2);
}
// iOS Safari 7.x bug
var testView = new $DataView(new $ArrayBuffer(2));
- var $setInt8 = $DataViewPrototype.setInt8;
+ var $setInt8 = uncurryThis$E(DataViewPrototype$1.setInt8);
testView.setInt8(0, 2147483648);
testView.setInt8(1, 2147483649);
- if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll$3($DataViewPrototype, {
+ if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll$3(DataViewPrototype$1, {
setInt8: function setInt8(byteOffset, value) {
- $setInt8.call(this, byteOffset, value << 24 >> 24);
+ $setInt8(this, byteOffset, value << 24 >> 24);
},
setUint8: function setUint8(byteOffset, value) {
- $setInt8.call(this, byteOffset, value << 24 >> 24);
+ $setInt8(this, byteOffset, value << 24 >> 24);
}
}, { unsafe: true });
}
@@ -2413,95 +2793,115 @@
DataView: $DataView
};
- var anObject$f = anObject$m;
- var aFunction$7 = aFunction$9;
- var wellKnownSymbol$h = wellKnownSymbol$s;
+ var global$O = global$1m;
+ var isConstructor$2 = isConstructor$4;
+ var tryToString$3 = tryToString$5;
+
+ var TypeError$e = global$O.TypeError;
+
+ // `Assert: IsConstructor(argument) is true`
+ var aConstructor$3 = function (argument) {
+ if (isConstructor$2(argument)) return argument;
+ throw TypeError$e(tryToString$3(argument) + ' is not a constructor');
+ };
+
+ var anObject$g = anObject$n;
+ var aConstructor$2 = aConstructor$3;
+ var wellKnownSymbol$h = wellKnownSymbol$t;
var SPECIES$5 = wellKnownSymbol$h('species');
// `SpeciesConstructor` abstract operation
// https://tc39.es/ecma262/#sec-speciesconstructor
- var speciesConstructor$8 = function (O, defaultConstructor) {
- var C = anObject$f(O).constructor;
+ var speciesConstructor$5 = function (O, defaultConstructor) {
+ var C = anObject$g(O).constructor;
var S;
- return C === undefined || (S = anObject$f(C)[SPECIES$5]) == undefined ? defaultConstructor : aFunction$7(S);
+ return C === undefined || (S = anObject$g(C)[SPECIES$5]) == undefined ? defaultConstructor : aConstructor$2(S);
};
- var $$12 = _export;
- var fails$D = fails$N;
+ var $$19 = _export;
+ var uncurryThis$D = functionUncurryThis;
+ var fails$H = fails$S;
var ArrayBufferModule$2 = arrayBuffer;
- var anObject$e = anObject$m;
+ var anObject$f = anObject$n;
var toAbsoluteIndex$5 = toAbsoluteIndex$8;
- var toLength$k = toLength$q;
- var speciesConstructor$7 = speciesConstructor$8;
+ var toLength$8 = toLength$c;
+ var speciesConstructor$4 = speciesConstructor$5;
var ArrayBuffer$4 = ArrayBufferModule$2.ArrayBuffer;
var DataView$2 = ArrayBufferModule$2.DataView;
- var nativeArrayBufferSlice = ArrayBuffer$4.prototype.slice;
+ var DataViewPrototype = DataView$2.prototype;
+ var un$ArrayBufferSlice = uncurryThis$D(ArrayBuffer$4.prototype.slice);
+ var getUint8 = uncurryThis$D(DataViewPrototype.getUint8);
+ var setUint8 = uncurryThis$D(DataViewPrototype.setUint8);
- var INCORRECT_SLICE = fails$D(function () {
+ var INCORRECT_SLICE = fails$H(function () {
return !new ArrayBuffer$4(2).slice(1, undefined).byteLength;
});
// `ArrayBuffer.prototype.slice` method
// https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice
- $$12({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {
+ $$19({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {
slice: function slice(start, end) {
- if (nativeArrayBufferSlice !== undefined && end === undefined) {
- return nativeArrayBufferSlice.call(anObject$e(this), start); // FF fix
+ if (un$ArrayBufferSlice && end === undefined) {
+ return un$ArrayBufferSlice(anObject$f(this), start); // FF fix
}
- var length = anObject$e(this).byteLength;
+ var length = anObject$f(this).byteLength;
var first = toAbsoluteIndex$5(start, length);
var fin = toAbsoluteIndex$5(end === undefined ? length : end, length);
- var result = new (speciesConstructor$7(this, ArrayBuffer$4))(toLength$k(fin - first));
+ var result = new (speciesConstructor$4(this, ArrayBuffer$4))(toLength$8(fin - first));
var viewSource = new DataView$2(this);
var viewTarget = new DataView$2(result);
var index = 0;
while (first < fin) {
- viewTarget.setUint8(index++, viewSource.getUint8(first++));
+ setUint8(viewTarget, index++, getUint8(viewSource, first++));
} return result;
}
});
- var $$11 = _export;
+ var $$18 = _export;
var ArrayBufferModule$1 = arrayBuffer;
var NATIVE_ARRAY_BUFFER$1 = arrayBufferNative;
// `DataView` constructor
// https://tc39.es/ecma262/#sec-dataview-constructor
- $$11({ global: true, forced: !NATIVE_ARRAY_BUFFER$1 }, {
+ $$18({ global: true, forced: !NATIVE_ARRAY_BUFFER$1 }, {
DataView: ArrayBufferModule$1.DataView
});
var NATIVE_ARRAY_BUFFER = arrayBufferNative;
var DESCRIPTORS$e = descriptors;
- var global$p = global$F;
- var isObject$i = isObject$r;
- var has$6 = has$j;
- var classof$8 = classof$b;
- var createNonEnumerableProperty$4 = createNonEnumerableProperty$e;
- var redefine$9 = redefine$g.exports;
+ var global$N = global$1m;
+ var isCallable$9 = isCallable$r;
+ var isObject$k = isObject$s;
+ var hasOwn$9 = hasOwnProperty_1;
+ var classof$7 = classof$d;
+ var tryToString$2 = tryToString$5;
+ var createNonEnumerableProperty$4 = createNonEnumerableProperty$b;
+ var redefine$9 = redefine$h.exports;
var defineProperty$6 = objectDefineProperty.f;
+ var isPrototypeOf$5 = objectIsPrototypeOf;
var getPrototypeOf$1 = objectGetPrototypeOf;
var setPrototypeOf$4 = objectSetPrototypeOf;
- var wellKnownSymbol$g = wellKnownSymbol$s;
+ var wellKnownSymbol$g = wellKnownSymbol$t;
var uid$1 = uid$5;
- var Int8Array$3 = global$p.Int8Array;
+ var Int8Array$3 = global$N.Int8Array;
var Int8ArrayPrototype = Int8Array$3 && Int8Array$3.prototype;
- var Uint8ClampedArray = global$p.Uint8ClampedArray;
+ var Uint8ClampedArray = global$N.Uint8ClampedArray;
var Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;
var TypedArray$1 = Int8Array$3 && getPrototypeOf$1(Int8Array$3);
var TypedArrayPrototype$1 = Int8ArrayPrototype && getPrototypeOf$1(Int8ArrayPrototype);
- var ObjectPrototype = Object.prototype;
- var isPrototypeOf = ObjectPrototype.isPrototypeOf;
+ var ObjectPrototype$1 = Object.prototype;
+ var TypeError$d = global$N.TypeError;
var TO_STRING_TAG = wellKnownSymbol$g('toStringTag');
var TYPED_ARRAY_TAG$1 = uid$1('TYPED_ARRAY_TAG');
+ var TYPED_ARRAY_CONSTRUCTOR$2 = uid$1('TYPED_ARRAY_CONSTRUCTOR');
// Fixing native typed arrays in Opera Presto crashes the browser, see #595
- var NATIVE_ARRAY_BUFFER_VIEWS$3 = NATIVE_ARRAY_BUFFER && !!setPrototypeOf$4 && classof$8(global$p.opera) !== 'Opera';
+ var NATIVE_ARRAY_BUFFER_VIEWS$3 = NATIVE_ARRAY_BUFFER && !!setPrototypeOf$4 && classof$7(global$N.opera) !== 'Opera';
var TYPED_ARRAY_TAG_REQIRED = false;
- var NAME$1;
+ var NAME$1, Constructor, Prototype;
var TypedArrayConstructorsList = {
Int8Array: 1,
@@ -2521,41 +2921,35 @@
};
var isView = function isView(it) {
- if (!isObject$i(it)) return false;
- var klass = classof$8(it);
+ if (!isObject$k(it)) return false;
+ var klass = classof$7(it);
return klass === 'DataView'
- || has$6(TypedArrayConstructorsList, klass)
- || has$6(BigIntArrayConstructorsList, klass);
+ || hasOwn$9(TypedArrayConstructorsList, klass)
+ || hasOwn$9(BigIntArrayConstructorsList, klass);
};
var isTypedArray$1 = function (it) {
- if (!isObject$i(it)) return false;
- var klass = classof$8(it);
- return has$6(TypedArrayConstructorsList, klass)
- || has$6(BigIntArrayConstructorsList, klass);
+ if (!isObject$k(it)) return false;
+ var klass = classof$7(it);
+ return hasOwn$9(TypedArrayConstructorsList, klass)
+ || hasOwn$9(BigIntArrayConstructorsList, klass);
};
var aTypedArray$m = function (it) {
if (isTypedArray$1(it)) return it;
- throw TypeError('Target is not a typed array');
+ throw TypeError$d('Target is not a typed array');
};
- var aTypedArrayConstructor$5 = function (C) {
- if (setPrototypeOf$4) {
- if (isPrototypeOf.call(TypedArray$1, C)) return C;
- } else for (var ARRAY in TypedArrayConstructorsList) if (has$6(TypedArrayConstructorsList, NAME$1)) {
- var TypedArrayConstructor = global$p[ARRAY];
- if (TypedArrayConstructor && (C === TypedArrayConstructor || isPrototypeOf.call(TypedArrayConstructor, C))) {
- return C;
- }
- } throw TypeError('Target is not a typed array constructor');
+ var aTypedArrayConstructor$3 = function (C) {
+ if (isCallable$9(C) && (!setPrototypeOf$4 || isPrototypeOf$5(TypedArray$1, C))) return C;
+ throw TypeError$d(tryToString$2(C) + ' is not a typed array constructor');
};
var exportTypedArrayMethod$n = function (KEY, property, forced) {
if (!DESCRIPTORS$e) return;
if (forced) for (var ARRAY in TypedArrayConstructorsList) {
- var TypedArrayConstructor = global$p[ARRAY];
- if (TypedArrayConstructor && has$6(TypedArrayConstructor.prototype, KEY)) try {
+ var TypedArrayConstructor = global$N[ARRAY];
+ if (TypedArrayConstructor && hasOwn$9(TypedArrayConstructor.prototype, KEY)) try {
delete TypedArrayConstructor.prototype[KEY];
} catch (error) { /* empty */ }
}
@@ -2570,8 +2964,8 @@
if (!DESCRIPTORS$e) return;
if (setPrototypeOf$4) {
if (forced) for (ARRAY in TypedArrayConstructorsList) {
- TypedArrayConstructor = global$p[ARRAY];
- if (TypedArrayConstructor && has$6(TypedArrayConstructor, KEY)) try {
+ TypedArrayConstructor = global$N[ARRAY];
+ if (TypedArrayConstructor && hasOwn$9(TypedArrayConstructor, KEY)) try {
delete TypedArrayConstructor[KEY];
} catch (error) { /* empty */ }
}
@@ -2583,7 +2977,7 @@
} else return;
}
for (ARRAY in TypedArrayConstructorsList) {
- TypedArrayConstructor = global$p[ARRAY];
+ TypedArrayConstructor = global$N[ARRAY];
if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {
redefine$9(TypedArrayConstructor, KEY, property);
}
@@ -2591,24 +2985,33 @@
};
for (NAME$1 in TypedArrayConstructorsList) {
- if (!global$p[NAME$1]) NATIVE_ARRAY_BUFFER_VIEWS$3 = false;
+ Constructor = global$N[NAME$1];
+ Prototype = Constructor && Constructor.prototype;
+ if (Prototype) createNonEnumerableProperty$4(Prototype, TYPED_ARRAY_CONSTRUCTOR$2, Constructor);
+ else NATIVE_ARRAY_BUFFER_VIEWS$3 = false;
+ }
+
+ for (NAME$1 in BigIntArrayConstructorsList) {
+ Constructor = global$N[NAME$1];
+ Prototype = Constructor && Constructor.prototype;
+ if (Prototype) createNonEnumerableProperty$4(Prototype, TYPED_ARRAY_CONSTRUCTOR$2, Constructor);
}
// WebKit bug - typed arrays constructors prototype is Object.prototype
- if (!NATIVE_ARRAY_BUFFER_VIEWS$3 || typeof TypedArray$1 != 'function' || TypedArray$1 === Function.prototype) {
+ if (!NATIVE_ARRAY_BUFFER_VIEWS$3 || !isCallable$9(TypedArray$1) || TypedArray$1 === Function.prototype) {
// eslint-disable-next-line no-shadow -- safe
TypedArray$1 = function TypedArray() {
- throw TypeError('Incorrect invocation');
+ throw TypeError$d('Incorrect invocation');
};
if (NATIVE_ARRAY_BUFFER_VIEWS$3) for (NAME$1 in TypedArrayConstructorsList) {
- if (global$p[NAME$1]) setPrototypeOf$4(global$p[NAME$1], TypedArray$1);
+ if (global$N[NAME$1]) setPrototypeOf$4(global$N[NAME$1], TypedArray$1);
}
}
- if (!NATIVE_ARRAY_BUFFER_VIEWS$3 || !TypedArrayPrototype$1 || TypedArrayPrototype$1 === ObjectPrototype) {
+ if (!NATIVE_ARRAY_BUFFER_VIEWS$3 || !TypedArrayPrototype$1 || TypedArrayPrototype$1 === ObjectPrototype$1) {
TypedArrayPrototype$1 = TypedArray$1.prototype;
if (NATIVE_ARRAY_BUFFER_VIEWS$3) for (NAME$1 in TypedArrayConstructorsList) {
- if (global$p[NAME$1]) setPrototypeOf$4(global$p[NAME$1].prototype, TypedArrayPrototype$1);
+ if (global$N[NAME$1]) setPrototypeOf$4(global$N[NAME$1].prototype, TypedArrayPrototype$1);
}
}
@@ -2617,21 +3020,22 @@
setPrototypeOf$4(Uint8ClampedArrayPrototype, TypedArrayPrototype$1);
}
- if (DESCRIPTORS$e && !has$6(TypedArrayPrototype$1, TO_STRING_TAG)) {
+ if (DESCRIPTORS$e && !hasOwn$9(TypedArrayPrototype$1, TO_STRING_TAG)) {
TYPED_ARRAY_TAG_REQIRED = true;
defineProperty$6(TypedArrayPrototype$1, TO_STRING_TAG, { get: function () {
- return isObject$i(this) ? this[TYPED_ARRAY_TAG$1] : undefined;
+ return isObject$k(this) ? this[TYPED_ARRAY_TAG$1] : undefined;
} });
- for (NAME$1 in TypedArrayConstructorsList) if (global$p[NAME$1]) {
- createNonEnumerableProperty$4(global$p[NAME$1], TYPED_ARRAY_TAG$1, NAME$1);
+ for (NAME$1 in TypedArrayConstructorsList) if (global$N[NAME$1]) {
+ createNonEnumerableProperty$4(global$N[NAME$1], TYPED_ARRAY_TAG$1, NAME$1);
}
}
var arrayBufferViewCore = {
NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS$3,
+ TYPED_ARRAY_CONSTRUCTOR: TYPED_ARRAY_CONSTRUCTOR$2,
TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG$1,
aTypedArray: aTypedArray$m,
- aTypedArrayConstructor: aTypedArrayConstructor$5,
+ aTypedArrayConstructor: aTypedArrayConstructor$3,
exportTypedArrayMethod: exportTypedArrayMethod$n,
exportTypedArrayStaticMethod: exportTypedArrayStaticMethod$1,
isView: isView,
@@ -2640,20 +3044,20 @@
TypedArrayPrototype: TypedArrayPrototype$1
};
- var $$10 = _export;
- var ArrayBufferViewCore$n = arrayBufferViewCore;
+ var $$17 = _export;
+ var ArrayBufferViewCore$o = arrayBufferViewCore;
- var NATIVE_ARRAY_BUFFER_VIEWS$2 = ArrayBufferViewCore$n.NATIVE_ARRAY_BUFFER_VIEWS;
+ var NATIVE_ARRAY_BUFFER_VIEWS$2 = ArrayBufferViewCore$o.NATIVE_ARRAY_BUFFER_VIEWS;
// `ArrayBuffer.isView` method
// https://tc39.es/ecma262/#sec-arraybuffer.isview
- $$10({ target: 'ArrayBuffer', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS$2 }, {
- isView: ArrayBufferViewCore$n.isView
+ $$17({ target: 'ArrayBuffer', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS$2 }, {
+ isView: ArrayBufferViewCore$o.isView
});
- var getBuiltIn$4 = getBuiltIn$9;
+ var getBuiltIn$4 = getBuiltIn$b;
var definePropertyModule$2 = objectDefineProperty;
- var wellKnownSymbol$f = wellKnownSymbol$s;
+ var wellKnownSymbol$f = wellKnownSymbol$t;
var DESCRIPTORS$d = descriptors;
var SPECIES$4 = wellKnownSymbol$f('species');
@@ -2670,56 +3074,245 @@
}
};
- var $$$ = _export;
- var global$o = global$F;
+ var $$16 = _export;
+ var global$M = global$1m;
var arrayBufferModule = arrayBuffer;
var setSpecies$4 = setSpecies$5;
var ARRAY_BUFFER = 'ArrayBuffer';
var ArrayBuffer$3 = arrayBufferModule[ARRAY_BUFFER];
- var NativeArrayBuffer = global$o[ARRAY_BUFFER];
+ var NativeArrayBuffer = global$M[ARRAY_BUFFER];
// `ArrayBuffer` constructor
// https://tc39.es/ecma262/#sec-arraybuffer-constructor
- $$$({ global: true, forced: NativeArrayBuffer !== ArrayBuffer$3 }, {
+ $$16({ global: true, forced: NativeArrayBuffer !== ArrayBuffer$3 }, {
ArrayBuffer: ArrayBuffer$3
});
setSpecies$4(ARRAY_BUFFER);
- var fails$C = fails$N;
+ var fails$G = fails$S;
- var arrayMethodIsStrict$8 = function (METHOD_NAME, argument) {
+ var arrayMethodIsStrict$9 = function (METHOD_NAME, argument) {
var method = [][METHOD_NAME];
- return !!method && fails$C(function () {
+ return !!method && fails$G(function () {
// eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing
method.call(null, argument || function () { throw 1; }, 1);
});
};
/* eslint-disable es/no-array-prototype-indexof -- required for testing */
- var $$_ = _export;
- var $indexOf$1 = arrayIncludes.indexOf;
- var arrayMethodIsStrict$7 = arrayMethodIsStrict$8;
+ var $$15 = _export;
+ var uncurryThis$C = functionUncurryThis;
+ var $IndexOf = arrayIncludes.indexOf;
+ var arrayMethodIsStrict$8 = arrayMethodIsStrict$9;
- var nativeIndexOf = [].indexOf;
+ var un$IndexOf = uncurryThis$C([].indexOf);
- var NEGATIVE_ZERO$1 = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;
- var STRICT_METHOD$7 = arrayMethodIsStrict$7('indexOf');
+ var NEGATIVE_ZERO$1 = !!un$IndexOf && 1 / un$IndexOf([1], 1, -0) < 0;
+ var STRICT_METHOD$8 = arrayMethodIsStrict$8('indexOf');
// `Array.prototype.indexOf` method
// https://tc39.es/ecma262/#sec-array.prototype.indexof
- $$_({ target: 'Array', proto: true, forced: NEGATIVE_ZERO$1 || !STRICT_METHOD$7 }, {
+ $$15({ target: 'Array', proto: true, forced: NEGATIVE_ZERO$1 || !STRICT_METHOD$8 }, {
indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {
+ var fromIndex = arguments.length > 1 ? arguments[1] : undefined;
return NEGATIVE_ZERO$1
// convert -0 to +0
- ? nativeIndexOf.apply(this, arguments) || 0
- : $indexOf$1(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);
+ ? un$IndexOf(this, searchElement, fromIndex) || 0
+ : $IndexOf(this, searchElement, fromIndex);
}
});
- var fails$B = fails$N;
- var wellKnownSymbol$e = wellKnownSymbol$s;
+ var anObject$e = anObject$n;
+
+ // `RegExp.prototype.flags` getter implementation
+ // https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
+ var regexpFlags$1 = function () {
+ var that = anObject$e(this);
+ var result = '';
+ if (that.global) result += 'g';
+ if (that.ignoreCase) result += 'i';
+ if (that.multiline) result += 'm';
+ if (that.dotAll) result += 's';
+ if (that.unicode) result += 'u';
+ if (that.sticky) result += 'y';
+ return result;
+ };
+
+ var regexpStickyHelpers = {};
+
+ var fails$F = fails$S;
+ var global$L = global$1m;
+
+ // babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
+ var $RegExp$2 = global$L.RegExp;
+
+ regexpStickyHelpers.UNSUPPORTED_Y = fails$F(function () {
+ var re = $RegExp$2('a', 'y');
+ re.lastIndex = 2;
+ return re.exec('abcd') != null;
+ });
+
+ regexpStickyHelpers.BROKEN_CARET = fails$F(function () {
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
+ var re = $RegExp$2('^r', 'gy');
+ re.lastIndex = 2;
+ return re.exec('str') != null;
+ });
+
+ var fails$E = fails$S;
+ var global$K = global$1m;
+
+ // babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError
+ var $RegExp$1 = global$K.RegExp;
+
+ var regexpUnsupportedDotAll = fails$E(function () {
+ var re = $RegExp$1('.', 's');
+ return !(re.dotAll && re.exec('\n') && re.flags === 's');
+ });
+
+ var fails$D = fails$S;
+ var global$J = global$1m;
+
+ // babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError
+ var $RegExp = global$J.RegExp;
+
+ var regexpUnsupportedNcg = fails$D(function () {
+ var re = $RegExp('(?b)', 'g');
+ return re.exec('b').groups.a !== 'b' ||
+ 'b'.replace(re, '$c') !== 'bc';
+ });
+
+ /* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */
+ /* eslint-disable regexp/no-useless-quantifier -- testing */
+ var call$i = functionCall;
+ var uncurryThis$B = functionUncurryThis;
+ var toString$g = toString$k;
+ var regexpFlags = regexpFlags$1;
+ var stickyHelpers$2 = regexpStickyHelpers;
+ var shared = shared$5.exports;
+ var create$8 = objectCreate;
+ var getInternalState$2 = internalState.get;
+ var UNSUPPORTED_DOT_ALL$1 = regexpUnsupportedDotAll;
+ var UNSUPPORTED_NCG$1 = regexpUnsupportedNcg;
+
+ var nativeReplace = shared('native-string-replace', String.prototype.replace);
+ var nativeExec = RegExp.prototype.exec;
+ var patchedExec = nativeExec;
+ var charAt$6 = uncurryThis$B(''.charAt);
+ var indexOf = uncurryThis$B(''.indexOf);
+ var replace$7 = uncurryThis$B(''.replace);
+ var stringSlice$9 = uncurryThis$B(''.slice);
+
+ var UPDATES_LAST_INDEX_WRONG = (function () {
+ var re1 = /a/;
+ var re2 = /b*/g;
+ call$i(nativeExec, re1, 'a');
+ call$i(nativeExec, re2, 'a');
+ return re1.lastIndex !== 0 || re2.lastIndex !== 0;
+ })();
+
+ var UNSUPPORTED_Y$2 = stickyHelpers$2.UNSUPPORTED_Y || stickyHelpers$2.BROKEN_CARET;
+
+ // nonparticipating capturing group, copied from es5-shim's String#split patch.
+ var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
+
+ var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$2 || UNSUPPORTED_DOT_ALL$1 || UNSUPPORTED_NCG$1;
+
+ if (PATCH) {
+ // eslint-disable-next-line max-statements -- TODO
+ patchedExec = function exec(string) {
+ var re = this;
+ var state = getInternalState$2(re);
+ var str = toString$g(string);
+ var raw = state.raw;
+ var result, reCopy, lastIndex, match, i, object, group;
+
+ if (raw) {
+ raw.lastIndex = re.lastIndex;
+ result = call$i(patchedExec, raw, str);
+ re.lastIndex = raw.lastIndex;
+ return result;
+ }
+
+ var groups = state.groups;
+ var sticky = UNSUPPORTED_Y$2 && re.sticky;
+ var flags = call$i(regexpFlags, re);
+ var source = re.source;
+ var charsAdded = 0;
+ var strCopy = str;
+
+ if (sticky) {
+ flags = replace$7(flags, 'y', '');
+ if (indexOf(flags, 'g') === -1) {
+ flags += 'g';
+ }
+
+ strCopy = stringSlice$9(str, re.lastIndex);
+ // Support anchored sticky behavior.
+ if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt$6(str, re.lastIndex - 1) !== '\n')) {
+ source = '(?: ' + source + ')';
+ strCopy = ' ' + strCopy;
+ charsAdded++;
+ }
+ // ^(? + rx + ) is needed, in combination with some str slicing, to
+ // simulate the 'y' flag.
+ reCopy = new RegExp('^(?:' + source + ')', flags);
+ }
+
+ if (NPCG_INCLUDED) {
+ reCopy = new RegExp('^' + source + '$(?!\\s)', flags);
+ }
+ if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
+
+ match = call$i(nativeExec, sticky ? reCopy : re, strCopy);
+
+ if (sticky) {
+ if (match) {
+ match.input = stringSlice$9(match.input, charsAdded);
+ match[0] = stringSlice$9(match[0], charsAdded);
+ match.index = re.lastIndex;
+ re.lastIndex += match[0].length;
+ } else re.lastIndex = 0;
+ } else if (UPDATES_LAST_INDEX_WRONG && match) {
+ re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
+ }
+ if (NPCG_INCLUDED && match && match.length > 1) {
+ // Fix browsers whose `exec` methods don't consistently return `undefined`
+ // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
+ call$i(nativeReplace, match[0], reCopy, function () {
+ for (i = 1; i < arguments.length - 2; i++) {
+ if (arguments[i] === undefined) match[i] = undefined;
+ }
+ });
+ }
+
+ if (match && groups) {
+ match.groups = object = create$8(null);
+ for (i = 0; i < groups.length; i++) {
+ group = groups[i];
+ object[group[0]] = match[group[1]];
+ }
+ }
+
+ return match;
+ };
+ }
+
+ var regexpExec$3 = patchedExec;
+
+ var $$14 = _export;
+ var exec$5 = regexpExec$3;
+
+ // `RegExp.prototype.exec` method
+ // https://tc39.es/ecma262/#sec-regexp.prototype.exec
+ $$14({ target: 'RegExp', proto: true, forced: /./.exec !== exec$5 }, {
+ exec: exec$5
+ });
+
+ var fails$C = fails$S;
+ var wellKnownSymbol$e = wellKnownSymbol$t;
var V8_VERSION$2 = engineV8Version;
var SPECIES$3 = wellKnownSymbol$e('species');
@@ -2728,7 +3321,7 @@
// We can't use this feature detection in V8 since it causes
// deoptimization and serious performance degradation
// https://github.com/zloirock/core-js/issues/677
- return V8_VERSION$2 >= 51 || !fails$B(function () {
+ return V8_VERSION$2 >= 51 || !fails$C(function () {
var array = [];
var constructor = array.constructor = {};
constructor[SPECIES$3] = function () {
@@ -2738,7 +3331,7 @@
});
};
- var $$Z = _export;
+ var $$13 = _export;
var $map$1 = arrayIteration.map;
var arrayMethodHasSpeciesSupport$4 = arrayMethodHasSpeciesSupport$5;
@@ -2747,136 +3340,183 @@
// `Array.prototype.map` method
// https://tc39.es/ecma262/#sec-array.prototype.map
// with adding support of @@species
- $$Z({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$3 }, {
+ $$13({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$3 }, {
map: function map(callbackfn /* , thisArg */) {
return $map$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
var $forEach$1 = arrayIteration.forEach;
- var arrayMethodIsStrict$6 = arrayMethodIsStrict$8;
+ var arrayMethodIsStrict$7 = arrayMethodIsStrict$9;
- var STRICT_METHOD$6 = arrayMethodIsStrict$6('forEach');
+ var STRICT_METHOD$7 = arrayMethodIsStrict$7('forEach');
// `Array.prototype.forEach` method implementation
// https://tc39.es/ecma262/#sec-array.prototype.foreach
- var arrayForEach = !STRICT_METHOD$6 ? function forEach(callbackfn /* , thisArg */) {
+ var arrayForEach = !STRICT_METHOD$7 ? function forEach(callbackfn /* , thisArg */) {
return $forEach$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
// eslint-disable-next-line es/no-array-prototype-foreach -- safe
} : [].forEach;
- var $$Y = _export;
+ var $$12 = _export;
var forEach$3 = arrayForEach;
// `Array.prototype.forEach` method
// https://tc39.es/ecma262/#sec-array.prototype.foreach
// eslint-disable-next-line es/no-array-prototype-foreach -- safe
- $$Y({ target: 'Array', proto: true, forced: [].forEach != forEach$3 }, {
+ $$12({ target: 'Array', proto: true, forced: [].forEach != forEach$3 }, {
forEach: forEach$3
});
- var global$n = global$F;
+ var global$I = global$1m;
var DOMIterables = domIterables;
+ var DOMTokenListPrototype = domTokenListPrototype;
var forEach$2 = arrayForEach;
- var createNonEnumerableProperty$3 = createNonEnumerableProperty$e;
+ var createNonEnumerableProperty$3 = createNonEnumerableProperty$b;
- for (var COLLECTION_NAME in DOMIterables) {
- var Collection = global$n[COLLECTION_NAME];
- var CollectionPrototype = Collection && Collection.prototype;
+ var handlePrototype = function (CollectionPrototype) {
// some Chrome versions have non-configurable methods on DOMTokenList
if (CollectionPrototype && CollectionPrototype.forEach !== forEach$2) try {
createNonEnumerableProperty$3(CollectionPrototype, 'forEach', forEach$2);
} catch (error) {
CollectionPrototype.forEach = forEach$2;
}
+ };
+
+ for (var COLLECTION_NAME in DOMIterables) {
+ if (DOMIterables[COLLECTION_NAME]) {
+ handlePrototype(global$I[COLLECTION_NAME] && global$I[COLLECTION_NAME].prototype);
+ }
}
- var $$X = _export;
- var isArray$3 = isArray$6;
+ handlePrototype(DOMTokenListPrototype);
+
+ var $$11 = _export;
+ var isArray$5 = isArray$8;
// `Array.isArray` method
// https://tc39.es/ecma262/#sec-array.isarray
- $$X({ target: 'Array', stat: true }, {
- isArray: isArray$3
+ $$11({ target: 'Array', stat: true }, {
+ isArray: isArray$5
});
- var $$W = _export;
- var fails$A = fails$N;
+ var $$10 = _export;
+ var fails$B = fails$S;
var getOwnPropertyNames$3 = objectGetOwnPropertyNamesExternal.f;
// eslint-disable-next-line es/no-object-getownpropertynames -- required for testing
- var FAILS_ON_PRIMITIVES$4 = fails$A(function () { return !Object.getOwnPropertyNames(1); });
+ var FAILS_ON_PRIMITIVES$5 = fails$B(function () { return !Object.getOwnPropertyNames(1); });
// `Object.getOwnPropertyNames` method
// https://tc39.es/ecma262/#sec-object.getownpropertynames
- $$W({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$4 }, {
+ $$10({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$5 }, {
getOwnPropertyNames: getOwnPropertyNames$3
});
- var global$m = global$F;
+ var global$H = global$1m;
- var nativePromiseConstructor = global$m.Promise;
+ var nativePromiseConstructor = global$H.Promise;
- var wellKnownSymbol$d = wellKnownSymbol$s;
+ var wellKnownSymbol$d = wellKnownSymbol$t;
var Iterators$1 = iterators;
- var ITERATOR$5 = wellKnownSymbol$d('iterator');
+ var ITERATOR$7 = wellKnownSymbol$d('iterator');
var ArrayPrototype = Array.prototype;
// check on default Array iterator
var isArrayIteratorMethod$3 = function (it) {
- return it !== undefined && (Iterators$1.Array === it || ArrayPrototype[ITERATOR$5] === it);
+ return it !== undefined && (Iterators$1.Array === it || ArrayPrototype[ITERATOR$7] === it);
};
- var classof$7 = classof$b;
+ var classof$6 = classof$d;
+ var getMethod$5 = getMethod$7;
var Iterators = iterators;
- var wellKnownSymbol$c = wellKnownSymbol$s;
+ var wellKnownSymbol$c = wellKnownSymbol$t;
- var ITERATOR$4 = wellKnownSymbol$c('iterator');
+ var ITERATOR$6 = wellKnownSymbol$c('iterator');
var getIteratorMethod$5 = function (it) {
- if (it != undefined) return it[ITERATOR$4]
- || it['@@iterator']
- || Iterators[classof$7(it)];
+ if (it != undefined) return getMethod$5(it, ITERATOR$6)
+ || getMethod$5(it, '@@iterator')
+ || Iterators[classof$6(it)];
};
- var anObject$d = anObject$m;
-
- var iteratorClose$2 = function (iterator) {
- var returnMethod = iterator['return'];
- if (returnMethod !== undefined) {
- return anObject$d(returnMethod.call(iterator)).value;
- }
- };
-
- var anObject$c = anObject$m;
- var isArrayIteratorMethod$2 = isArrayIteratorMethod$3;
- var toLength$j = toLength$q;
- var bind$a = functionBindContext;
+ var global$G = global$1m;
+ var call$h = functionCall;
+ var aCallable$7 = aCallable$a;
+ var anObject$d = anObject$n;
+ var tryToString$1 = tryToString$5;
var getIteratorMethod$4 = getIteratorMethod$5;
+
+ var TypeError$c = global$G.TypeError;
+
+ var getIterator$4 = function (argument, usingIterator) {
+ var iteratorMethod = arguments.length < 2 ? getIteratorMethod$4(argument) : usingIterator;
+ if (aCallable$7(iteratorMethod)) return anObject$d(call$h(iteratorMethod, argument));
+ throw TypeError$c(tryToString$1(argument) + ' is not iterable');
+ };
+
+ var call$g = functionCall;
+ var anObject$c = anObject$n;
+ var getMethod$4 = getMethod$7;
+
+ var iteratorClose$2 = function (iterator, kind, value) {
+ var innerResult, innerError;
+ anObject$c(iterator);
+ try {
+ innerResult = getMethod$4(iterator, 'return');
+ if (!innerResult) {
+ if (kind === 'throw') throw value;
+ return value;
+ }
+ innerResult = call$g(innerResult, iterator);
+ } catch (error) {
+ innerError = true;
+ innerResult = error;
+ }
+ if (kind === 'throw') throw value;
+ if (innerError) throw innerResult;
+ anObject$c(innerResult);
+ return value;
+ };
+
+ var global$F = global$1m;
+ var bind$d = functionBindContext;
+ var call$f = functionCall;
+ var anObject$b = anObject$n;
+ var tryToString = tryToString$5;
+ var isArrayIteratorMethod$2 = isArrayIteratorMethod$3;
+ var lengthOfArrayLike$c = lengthOfArrayLike$g;
+ var isPrototypeOf$4 = objectIsPrototypeOf;
+ var getIterator$3 = getIterator$4;
+ var getIteratorMethod$3 = getIteratorMethod$5;
var iteratorClose$1 = iteratorClose$2;
+ var TypeError$b = global$F.TypeError;
+
var Result = function (stopped, result) {
this.stopped = stopped;
this.result = result;
};
+ var ResultPrototype = Result.prototype;
+
var iterate$3 = function (iterable, unboundFunction, options) {
var that = options && options.that;
var AS_ENTRIES = !!(options && options.AS_ENTRIES);
var IS_ITERATOR = !!(options && options.IS_ITERATOR);
var INTERRUPTED = !!(options && options.INTERRUPTED);
- var fn = bind$a(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);
+ var fn = bind$d(unboundFunction, that);
var iterator, iterFn, index, length, result, next, step;
var stop = function (condition) {
- if (iterator) iteratorClose$1(iterator);
+ if (iterator) iteratorClose$1(iterator, 'normal', condition);
return new Result(true, condition);
};
var callFn = function (value) {
if (AS_ENTRIES) {
- anObject$c(value);
+ anObject$b(value);
return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
} return INTERRUPTED ? fn(value, stop) : fn(value);
};
@@ -2884,33 +3524,32 @@
if (IS_ITERATOR) {
iterator = iterable;
} else {
- iterFn = getIteratorMethod$4(iterable);
- if (typeof iterFn != 'function') throw TypeError('Target is not iterable');
+ iterFn = getIteratorMethod$3(iterable);
+ if (!iterFn) throw TypeError$b(tryToString(iterable) + ' is not iterable');
// optimisation for array iterators
if (isArrayIteratorMethod$2(iterFn)) {
- for (index = 0, length = toLength$j(iterable.length); length > index; index++) {
+ for (index = 0, length = lengthOfArrayLike$c(iterable); length > index; index++) {
result = callFn(iterable[index]);
- if (result && result instanceof Result) return result;
+ if (result && isPrototypeOf$4(ResultPrototype, result)) return result;
} return new Result(false);
}
- iterator = iterFn.call(iterable);
+ iterator = getIterator$3(iterable, iterFn);
}
next = iterator.next;
- while (!(step = next.call(iterator)).done) {
+ while (!(step = call$f(next, iterator)).done) {
try {
result = callFn(step.value);
} catch (error) {
- iteratorClose$1(iterator);
- throw error;
+ iteratorClose$1(iterator, 'throw', error);
}
- if (typeof result == 'object' && result && result instanceof Result) return result;
+ if (typeof result == 'object' && result && isPrototypeOf$4(ResultPrototype, result)) return result;
} return new Result(false);
};
- var wellKnownSymbol$b = wellKnownSymbol$s;
+ var wellKnownSymbol$b = wellKnownSymbol$t;
- var ITERATOR$3 = wellKnownSymbol$b('iterator');
+ var ITERATOR$5 = wellKnownSymbol$b('iterator');
var SAFE_CLOSING = false;
try {
@@ -2923,7 +3562,7 @@
SAFE_CLOSING = true;
}
};
- iteratorWithReturn[ITERATOR$3] = function () {
+ iteratorWithReturn[ITERATOR$5] = function () {
return this;
};
// eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing
@@ -2935,7 +3574,7 @@
var ITERATION_SUPPORT = false;
try {
var object = {};
- object[ITERATOR$3] = function () {
+ object[ITERATOR$5] = function () {
return {
next: function () {
return { done: ITERATION_SUPPORT = true };
@@ -2947,37 +3586,46 @@
return ITERATION_SUPPORT;
};
- var userAgent$4 = engineUserAgent;
+ var userAgent$6 = engineUserAgent;
- var engineIsIos = /(?:iphone|ipod|ipad).*applewebkit/i.test(userAgent$4);
+ var engineIsIos = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent$6);
- var classof$6 = classofRaw$1;
- var global$l = global$F;
+ var classof$5 = classofRaw$1;
+ var global$E = global$1m;
- var engineIsNode = classof$6(global$l.process) == 'process';
+ var engineIsNode = classof$5(global$E.process) == 'process';
- var global$k = global$F;
- var fails$z = fails$N;
- var bind$9 = functionBindContext;
+ var global$D = global$1m;
+ var apply$7 = functionApply;
+ var bind$c = functionBindContext;
+ var isCallable$8 = isCallable$r;
+ var hasOwn$8 = hasOwnProperty_1;
+ var fails$A = fails$S;
var html = html$2;
- var createElement = documentCreateElement$1;
+ var arraySlice$8 = arraySlice$c;
+ var createElement = documentCreateElement$2;
var IS_IOS$1 = engineIsIos;
- var IS_NODE$3 = engineIsNode;
+ var IS_NODE$4 = engineIsNode;
- var location$1 = global$k.location;
- var set$2 = global$k.setImmediate;
- var clear = global$k.clearImmediate;
- var process$3 = global$k.process;
- var MessageChannel = global$k.MessageChannel;
- var Dispatch$1 = global$k.Dispatch;
+ var set$2 = global$D.setImmediate;
+ var clear = global$D.clearImmediate;
+ var process$3 = global$D.process;
+ var Dispatch$1 = global$D.Dispatch;
+ var Function$3 = global$D.Function;
+ var MessageChannel = global$D.MessageChannel;
+ var String$2 = global$D.String;
var counter = 0;
var queue = {};
var ONREADYSTATECHANGE = 'onreadystatechange';
- var defer, channel, port;
+ var location$1, defer, channel, port;
+
+ try {
+ // Deno throws a ReferenceError on `location` access without `--location` flag
+ location$1 = global$D.location;
+ } catch (error) { /* empty */ }
var run = function (id) {
- // eslint-disable-next-line no-prototype-builtins -- safe
- if (queue.hasOwnProperty(id)) {
+ if (hasOwn$8(queue, id)) {
var fn = queue[id];
delete queue[id];
fn();
@@ -2996,18 +3644,15 @@
var post = function (id) {
// old engines have not location.origin
- global$k.postMessage(id + '', location$1.protocol + '//' + location$1.host);
+ global$D.postMessage(String$2(id), location$1.protocol + '//' + location$1.host);
};
// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
if (!set$2 || !clear) {
set$2 = function setImmediate(fn) {
- var args = [];
- var i = 1;
- while (arguments.length > i) args.push(arguments[i++]);
+ var args = arraySlice$8(arguments, 1);
queue[++counter] = function () {
- // eslint-disable-next-line no-new-func -- spec requirement
- (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);
+ apply$7(isCallable$8(fn) ? fn : Function$3(fn), undefined, args);
};
defer(counter);
return counter;
@@ -3016,7 +3661,7 @@
delete queue[id];
};
// Node.js 0.8-
- if (IS_NODE$3) {
+ if (IS_NODE$4) {
defer = function (id) {
process$3.nextTick(runner(id));
};
@@ -3031,18 +3676,18 @@
channel = new MessageChannel();
port = channel.port2;
channel.port1.onmessage = listener;
- defer = bind$9(port.postMessage, port, 1);
+ defer = bind$c(port.postMessage, port);
// Browsers with postMessage, skip WebWorkers
// IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
} else if (
- global$k.addEventListener &&
- typeof postMessage == 'function' &&
- !global$k.importScripts &&
+ global$D.addEventListener &&
+ isCallable$8(global$D.postMessage) &&
+ !global$D.importScripts &&
location$1 && location$1.protocol !== 'file:' &&
- !fails$z(post)
+ !fails$A(post)
) {
defer = post;
- global$k.addEventListener('message', listener, false);
+ global$D.addEventListener('message', listener, false);
// IE8-
} else if (ONREADYSTATECHANGE in createElement('script')) {
defer = function (id) {
@@ -3064,23 +3709,30 @@
clear: clear
};
- var userAgent$3 = engineUserAgent;
+ var userAgent$5 = engineUserAgent;
+ var global$C = global$1m;
- var engineIsWebosWebkit = /web0s(?!.*chrome)/i.test(userAgent$3);
+ var engineIsIosPebble = /ipad|iphone|ipod/i.test(userAgent$5) && global$C.Pebble !== undefined;
- var global$j = global$F;
+ var userAgent$4 = engineUserAgent;
+
+ var engineIsWebosWebkit = /web0s(?!.*chrome)/i.test(userAgent$4);
+
+ var global$B = global$1m;
+ var bind$b = functionBindContext;
var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f;
var macrotask = task$1.set;
var IS_IOS = engineIsIos;
+ var IS_IOS_PEBBLE = engineIsIosPebble;
var IS_WEBOS_WEBKIT = engineIsWebosWebkit;
- var IS_NODE$2 = engineIsNode;
+ var IS_NODE$3 = engineIsNode;
- var MutationObserver = global$j.MutationObserver || global$j.WebKitMutationObserver;
- var document$2 = global$j.document;
- var process$2 = global$j.process;
- var Promise$1 = global$j.Promise;
+ var MutationObserver = global$B.MutationObserver || global$B.WebKitMutationObserver;
+ var document$2 = global$B.document;
+ var process$2 = global$B.process;
+ var Promise$1 = global$B.Promise;
// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
- var queueMicrotaskDescriptor = getOwnPropertyDescriptor$3(global$j, 'queueMicrotask');
+ var queueMicrotaskDescriptor = getOwnPropertyDescriptor$3(global$B, 'queueMicrotask');
var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;
var flush, head, last, notify$1, toggle, node, promise, then;
@@ -3089,7 +3741,7 @@
if (!queueMicrotask) {
flush = function () {
var parent, fn;
- if (IS_NODE$2 && (parent = process$2.domain)) parent.exit();
+ if (IS_NODE$3 && (parent = process$2.domain)) parent.exit();
while (head) {
fn = head.fn;
head = head.next;
@@ -3106,7 +3758,7 @@
// browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
// also except WebOS Webkit https://github.com/zloirock/core-js/issues/898
- if (!IS_IOS && !IS_NODE$2 && !IS_WEBOS_WEBKIT && MutationObserver && document$2) {
+ if (!IS_IOS && !IS_NODE$3 && !IS_WEBOS_WEBKIT && MutationObserver && document$2) {
toggle = true;
node = document$2.createTextNode('');
new MutationObserver(flush).observe(node, { characterData: true });
@@ -3114,17 +3766,17 @@
node.data = toggle = !toggle;
};
// environments with maybe non-completely correct, but existent Promise
- } else if (Promise$1 && Promise$1.resolve) {
+ } else if (!IS_IOS_PEBBLE && Promise$1 && Promise$1.resolve) {
// Promise.resolve without an argument throws an error in LG WebOS 2
promise = Promise$1.resolve(undefined);
// workaround of WebKit ~ iOS Safari 10.1 bug
promise.constructor = Promise$1;
- then = promise.then;
+ then = bind$b(promise.then, promise);
notify$1 = function () {
- then.call(promise, flush);
+ then(flush);
};
// Node.js without promises
- } else if (IS_NODE$2) {
+ } else if (IS_NODE$3) {
notify$1 = function () {
process$2.nextTick(flush);
};
@@ -3135,9 +3787,10 @@
// - onreadystatechange
// - setTimeout
} else {
+ // strange IE + webpack dev server bug - use .bind(global)
+ macrotask = bind$b(macrotask, global$B);
notify$1 = function () {
- // strange IE + webpack dev server bug - use .call(global)
- macrotask.call(global$j, flush);
+ macrotask(flush);
};
}
}
@@ -3153,7 +3806,7 @@
var newPromiseCapability$2 = {};
- var aFunction$6 = aFunction$9;
+ var aCallable$6 = aCallable$a;
var PromiseCapability = function (C) {
var resolve, reject;
@@ -3162,8 +3815,8 @@
resolve = $$resolve;
reject = $$reject;
});
- this.resolve = aFunction$6(resolve);
- this.reject = aFunction$6(reject);
+ this.resolve = aCallable$6(resolve);
+ this.reject = aCallable$6(reject);
};
// `NewPromiseCapability` abstract operation
@@ -3172,25 +3825,25 @@
return new PromiseCapability(C);
};
- var anObject$b = anObject$m;
- var isObject$h = isObject$r;
+ var anObject$a = anObject$n;
+ var isObject$j = isObject$s;
var newPromiseCapability$1 = newPromiseCapability$2;
var promiseResolve$2 = function (C, x) {
- anObject$b(C);
- if (isObject$h(x) && x.constructor === C) return x;
+ anObject$a(C);
+ if (isObject$j(x) && x.constructor === C) return x;
var promiseCapability = newPromiseCapability$1.f(C);
var resolve = promiseCapability.resolve;
resolve(x);
return promiseCapability.promise;
};
- var global$i = global$F;
+ var global$A = global$1m;
var hostReportErrors$1 = function (a, b) {
- var console = global$i.console;
+ var console = global$A.console;
if (console && console.error) {
- arguments.length === 1 ? console.error(a) : console.error(a, b);
+ arguments.length == 1 ? console.error(a) : console.error(a, b);
}
};
@@ -3204,22 +3857,24 @@
var engineIsBrowser = typeof window == 'object';
- var $$V = _export;
- var global$h = global$F;
- var getBuiltIn$3 = getBuiltIn$9;
+ var $$$ = _export;
+ var global$z = global$1m;
+ var getBuiltIn$3 = getBuiltIn$b;
+ var call$e = functionCall;
var NativePromise$1 = nativePromiseConstructor;
- var redefine$8 = redefine$g.exports;
+ var redefine$8 = redefine$h.exports;
var redefineAll$2 = redefineAll$4;
var setPrototypeOf$3 = objectSetPrototypeOf;
var setToStringTag$5 = setToStringTag$a;
var setSpecies$3 = setSpecies$5;
- var isObject$g = isObject$r;
- var aFunction$5 = aFunction$9;
+ var aCallable$5 = aCallable$a;
+ var isCallable$7 = isCallable$r;
+ var isObject$i = isObject$s;
var anInstance$5 = anInstance$7;
- var inspectSource = inspectSource$3;
+ var inspectSource = inspectSource$4;
var iterate$2 = iterate$3;
var checkCorrectnessOfIteration$3 = checkCorrectnessOfIteration$4;
- var speciesConstructor$6 = speciesConstructor$8;
+ var speciesConstructor$3 = speciesConstructor$5;
var task = task$1.set;
var microtask = microtask$1;
var promiseResolve$1 = promiseResolve$2;
@@ -3228,26 +3883,28 @@
var perform = perform$1;
var InternalStateModule$4 = internalState;
var isForced$3 = isForced_1;
- var wellKnownSymbol$a = wellKnownSymbol$s;
+ var wellKnownSymbol$a = wellKnownSymbol$t;
var IS_BROWSER = engineIsBrowser;
- var IS_NODE$1 = engineIsNode;
+ var IS_NODE$2 = engineIsNode;
var V8_VERSION$1 = engineV8Version;
var SPECIES$2 = wellKnownSymbol$a('species');
var PROMISE = 'Promise';
- var getInternalState$2 = InternalStateModule$4.get;
+
+ var getInternalState$1 = InternalStateModule$4.get;
var setInternalState$4 = InternalStateModule$4.set;
var getInternalPromiseState = InternalStateModule$4.getterFor(PROMISE);
var NativePromisePrototype = NativePromise$1 && NativePromise$1.prototype;
var PromiseConstructor = NativePromise$1;
- var PromiseConstructorPrototype = NativePromisePrototype;
- var TypeError$1 = global$h.TypeError;
- var document$1 = global$h.document;
- var process$1 = global$h.process;
+ var PromisePrototype = NativePromisePrototype;
+ var TypeError$a = global$z.TypeError;
+ var document$1 = global$z.document;
+ var process$1 = global$z.process;
var newPromiseCapability = newPromiseCapabilityModule.f;
var newGenericPromiseCapability = newPromiseCapability;
- var DISPATCH_EVENT = !!(document$1 && document$1.createEvent && global$h.dispatchEvent);
- var NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';
+
+ var DISPATCH_EVENT = !!(document$1 && document$1.createEvent && global$z.dispatchEvent);
+ var NATIVE_REJECTION_EVENT = isCallable$7(global$z.PromiseRejectionEvent);
var UNHANDLED_REJECTION = 'unhandledrejection';
var REJECTION_HANDLED = 'rejectionhandled';
var PENDING = 0;
@@ -3256,10 +3913,12 @@
var HANDLED = 1;
var UNHANDLED = 2;
var SUBCLASSING = false;
+
var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;
- var FORCED$f = isForced$3(PROMISE, function () {
- var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);
+ var FORCED$h = isForced$3(PROMISE, function () {
+ var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);
+ var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);
// V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
// https://bugs.chromium.org/p/chromium/issues/detail?id=830565
// We can't detect it synchronously, so just check versions
@@ -3267,7 +3926,7 @@
// We can't use @@species feature detection in V8 since it causes
// deoptimization and performance degradation
// https://github.com/zloirock/core-js/issues/679
- if (V8_VERSION$1 >= 51 && /native code/.test(PromiseConstructor)) return false;
+ if (V8_VERSION$1 >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;
// Detect correctness of subclassing with @@species support
var promise = new PromiseConstructor(function (resolve) { resolve(1); });
var FakePromise = function (exec) {
@@ -3281,14 +3940,14 @@
return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;
});
- var INCORRECT_ITERATION$1 = FORCED$f || !checkCorrectnessOfIteration$3(function (iterable) {
+ var INCORRECT_ITERATION$1 = FORCED$h || !checkCorrectnessOfIteration$3(function (iterable) {
PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });
});
// helpers
var isThenable = function (it) {
var then;
- return isObject$g(it) && typeof (then = it.then) == 'function' ? then : false;
+ return isObject$i(it) && isCallable$7(then = it.then) ? then : false;
};
var notify = function (state, isReject) {
@@ -3323,9 +3982,9 @@
}
}
if (result === reaction.promise) {
- reject(TypeError$1('Promise-chain cycle'));
+ reject(TypeError$a('Promise-chain cycle'));
} else if (then = isThenable(result)) {
- then.call(result, resolve, reject);
+ call$e(then, result, resolve, reject);
} else resolve(result);
} else reject(value);
} catch (error) {
@@ -3346,26 +4005,26 @@
event.promise = promise;
event.reason = reason;
event.initEvent(name, false, true);
- global$h.dispatchEvent(event);
+ global$z.dispatchEvent(event);
} else event = { promise: promise, reason: reason };
- if (!NATIVE_REJECTION_EVENT && (handler = global$h['on' + name])) handler(event);
+ if (!NATIVE_REJECTION_EVENT && (handler = global$z['on' + name])) handler(event);
else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);
};
var onUnhandled = function (state) {
- task.call(global$h, function () {
+ call$e(task, global$z, function () {
var promise = state.facade;
var value = state.value;
var IS_UNHANDLED = isUnhandled(state);
var result;
if (IS_UNHANDLED) {
result = perform(function () {
- if (IS_NODE$1) {
+ if (IS_NODE$2) {
process$1.emit('unhandledRejection', value, promise);
} else dispatchEvent$1(UNHANDLED_REJECTION, promise, value);
});
// Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
- state.rejection = IS_NODE$1 || isUnhandled(state) ? UNHANDLED : HANDLED;
+ state.rejection = IS_NODE$2 || isUnhandled(state) ? UNHANDLED : HANDLED;
if (result.error) throw result.value;
}
});
@@ -3376,15 +4035,15 @@
};
var onHandleUnhandled = function (state) {
- task.call(global$h, function () {
+ call$e(task, global$z, function () {
var promise = state.facade;
- if (IS_NODE$1) {
+ if (IS_NODE$2) {
process$1.emit('rejectionHandled', promise);
} else dispatchEvent$1(REJECTION_HANDLED, promise, state.value);
});
};
- var bind$8 = function (fn, state, unwrap) {
+ var bind$a = function (fn, state, unwrap) {
return function (value) {
fn(state, value, unwrap);
};
@@ -3404,15 +4063,15 @@
state.done = true;
if (unwrap) state = unwrap;
try {
- if (state.facade === value) throw TypeError$1("Promise can't be resolved itself");
+ if (state.facade === value) throw TypeError$a("Promise can't be resolved itself");
var then = isThenable(value);
if (then) {
microtask(function () {
var wrapper = { done: false };
try {
- then.call(value,
- bind$8(internalResolve, wrapper, state),
- bind$8(internalReject, wrapper, state)
+ call$e(then, value,
+ bind$a(internalResolve, wrapper, state),
+ bind$a(internalReject, wrapper, state)
);
} catch (error) {
internalReject(wrapper, error, state);
@@ -3429,20 +4088,20 @@
};
// constructor polyfill
- if (FORCED$f) {
+ if (FORCED$h) {
// 25.4.3.1 Promise(executor)
PromiseConstructor = function Promise(executor) {
- anInstance$5(this, PromiseConstructor, PROMISE);
- aFunction$5(executor);
- Internal.call(this);
- var state = getInternalState$2(this);
+ anInstance$5(this, PromisePrototype);
+ aCallable$5(executor);
+ call$e(Internal, this);
+ var state = getInternalState$1(this);
try {
- executor(bind$8(internalResolve, state), bind$8(internalReject, state));
+ executor(bind$a(internalResolve, state), bind$a(internalReject, state));
} catch (error) {
internalReject(state, error);
}
};
- PromiseConstructorPrototype = PromiseConstructor.prototype;
+ PromisePrototype = PromiseConstructor.prototype;
// eslint-disable-next-line no-unused-vars -- required for `.length`
Internal = function Promise(executor) {
setInternalState$4(this, {
@@ -3456,17 +4115,18 @@
value: undefined
});
};
- Internal.prototype = redefineAll$2(PromiseConstructorPrototype, {
+ Internal.prototype = redefineAll$2(PromisePrototype, {
// `Promise.prototype.then` method
// https://tc39.es/ecma262/#sec-promise.prototype.then
then: function then(onFulfilled, onRejected) {
var state = getInternalPromiseState(this);
- var reaction = newPromiseCapability(speciesConstructor$6(this, PromiseConstructor));
- reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
- reaction.fail = typeof onRejected == 'function' && onRejected;
- reaction.domain = IS_NODE$1 ? process$1.domain : undefined;
+ var reactions = state.reactions;
+ var reaction = newPromiseCapability(speciesConstructor$3(this, PromiseConstructor));
+ reaction.ok = isCallable$7(onFulfilled) ? onFulfilled : true;
+ reaction.fail = isCallable$7(onRejected) && onRejected;
+ reaction.domain = IS_NODE$2 ? process$1.domain : undefined;
state.parent = true;
- state.reactions.push(reaction);
+ reactions[reactions.length] = reaction;
if (state.state != PENDING) notify(state, false);
return reaction.promise;
},
@@ -3478,10 +4138,10 @@
});
OwnPromiseCapability = function () {
var promise = new Internal();
- var state = getInternalState$2(promise);
+ var state = getInternalState$1(promise);
this.promise = promise;
- this.resolve = bind$8(internalResolve, state);
- this.reject = bind$8(internalReject, state);
+ this.resolve = bind$a(internalResolve, state);
+ this.reject = bind$a(internalReject, state);
};
newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
return C === PromiseConstructor || C === PromiseWrapper
@@ -3489,7 +4149,7 @@
: newGenericPromiseCapability(C);
};
- if (typeof NativePromise$1 == 'function' && NativePromisePrototype !== Object.prototype) {
+ if (isCallable$7(NativePromise$1) && NativePromisePrototype !== Object.prototype) {
nativeThen = NativePromisePrototype.then;
if (!SUBCLASSING) {
@@ -3497,13 +4157,13 @@
redefine$8(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {
var that = this;
return new PromiseConstructor(function (resolve, reject) {
- nativeThen.call(that, resolve, reject);
+ call$e(nativeThen, that, resolve, reject);
}).then(onFulfilled, onRejected);
// https://github.com/zloirock/core-js/issues/640
}, { unsafe: true });
// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`
- redefine$8(NativePromisePrototype, 'catch', PromiseConstructorPrototype['catch'], { unsafe: true });
+ redefine$8(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });
}
// make `.constructor === Promise` work for native promise-based APIs
@@ -3513,12 +4173,12 @@
// make `instanceof Promise` work for native promise-based APIs
if (setPrototypeOf$3) {
- setPrototypeOf$3(NativePromisePrototype, PromiseConstructorPrototype);
+ setPrototypeOf$3(NativePromisePrototype, PromisePrototype);
}
}
}
- $$V({ global: true, wrap: true, forced: FORCED$f }, {
+ $$$({ global: true, wrap: true, forced: FORCED$h }, {
Promise: PromiseConstructor
});
@@ -3528,17 +4188,17 @@
PromiseWrapper = getBuiltIn$3(PROMISE);
// statics
- $$V({ target: PROMISE, stat: true, forced: FORCED$f }, {
+ $$$({ target: PROMISE, stat: true, forced: FORCED$h }, {
// `Promise.reject` method
// https://tc39.es/ecma262/#sec-promise.reject
reject: function reject(r) {
var capability = newPromiseCapability(this);
- capability.reject.call(undefined, r);
+ call$e(capability.reject, undefined, r);
return capability.promise;
}
});
- $$V({ target: PROMISE, stat: true, forced: FORCED$f }, {
+ $$$({ target: PROMISE, stat: true, forced: FORCED$h }, {
// `Promise.resolve` method
// https://tc39.es/ecma262/#sec-promise.resolve
resolve: function resolve(x) {
@@ -3546,7 +4206,7 @@
}
});
- $$V({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION$1 }, {
+ $$$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION$1 }, {
// `Promise.all` method
// https://tc39.es/ecma262/#sec-promise.all
all: function all(iterable) {
@@ -3555,16 +4215,15 @@
var resolve = capability.resolve;
var reject = capability.reject;
var result = perform(function () {
- var $promiseResolve = aFunction$5(C.resolve);
+ var $promiseResolve = aCallable$5(C.resolve);
var values = [];
var counter = 0;
var remaining = 1;
iterate$2(iterable, function (promise) {
var index = counter++;
var alreadyCalled = false;
- values.push(undefined);
remaining++;
- $promiseResolve.call(C, promise).then(function (value) {
+ call$e($promiseResolve, C, promise).then(function (value) {
if (alreadyCalled) return;
alreadyCalled = true;
values[index] = value;
@@ -3583,9 +4242,9 @@
var capability = newPromiseCapability(C);
var reject = capability.reject;
var result = perform(function () {
- var $promiseResolve = aFunction$5(C.resolve);
+ var $promiseResolve = aCallable$5(C.resolve);
iterate$2(iterable, function (promise) {
- $promiseResolve.call(C, promise).then(capability.resolve, reject);
+ call$e($promiseResolve, C, promise).then(capability.resolve, reject);
});
});
if (result.error) reject(result.value);
@@ -3597,78 +4256,100 @@
/* eslint-disable no-new -- required for testing */
- var global$g = global$F;
- var fails$y = fails$N;
+ var global$y = global$1m;
+ var fails$z = fails$S;
var checkCorrectnessOfIteration$2 = checkCorrectnessOfIteration$4;
var NATIVE_ARRAY_BUFFER_VIEWS$1 = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
- var ArrayBuffer$2 = global$g.ArrayBuffer;
- var Int8Array$2 = global$g.Int8Array;
+ var ArrayBuffer$2 = global$y.ArrayBuffer;
+ var Int8Array$2 = global$y.Int8Array;
- var typedArrayConstructorsRequireWrappers = !NATIVE_ARRAY_BUFFER_VIEWS$1 || !fails$y(function () {
+ var typedArrayConstructorsRequireWrappers = !NATIVE_ARRAY_BUFFER_VIEWS$1 || !fails$z(function () {
Int8Array$2(1);
- }) || !fails$y(function () {
+ }) || !fails$z(function () {
new Int8Array$2(-1);
}) || !checkCorrectnessOfIteration$2(function (iterable) {
new Int8Array$2();
new Int8Array$2(null);
new Int8Array$2(1.5);
new Int8Array$2(iterable);
- }, true) || fails$y(function () {
+ }, true) || fails$z(function () {
// Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill
return new Int8Array$2(new ArrayBuffer$2(2), 1, undefined).length !== 1;
});
- var toInteger$5 = toInteger$b;
+ var isObject$h = isObject$s;
+
+ var floor$6 = Math.floor;
+
+ // `IsIntegralNumber` abstract operation
+ // https://tc39.es/ecma262/#sec-isintegralnumber
+ // eslint-disable-next-line es/no-number-isinteger -- safe
+ var isIntegralNumber$1 = Number.isInteger || function isInteger(it) {
+ return !isObject$h(it) && isFinite(it) && floor$6(it) === it;
+ };
+
+ var global$x = global$1m;
+ var toIntegerOrInfinity$5 = toIntegerOrInfinity$b;
+
+ var RangeError$9 = global$x.RangeError;
var toPositiveInteger$1 = function (it) {
- var result = toInteger$5(it);
- if (result < 0) throw RangeError("The argument can't be less than 0");
+ var result = toIntegerOrInfinity$5(it);
+ if (result < 0) throw RangeError$9("The argument can't be less than 0");
return result;
};
+ var global$w = global$1m;
var toPositiveInteger = toPositiveInteger$1;
+ var RangeError$8 = global$w.RangeError;
+
var toOffset$2 = function (it, BYTES) {
var offset = toPositiveInteger(it);
- if (offset % BYTES) throw RangeError('Wrong offset');
+ if (offset % BYTES) throw RangeError$8('Wrong offset');
return offset;
};
- var toObject$c = toObject$i;
- var toLength$i = toLength$q;
- var getIteratorMethod$3 = getIteratorMethod$5;
+ var bind$9 = functionBindContext;
+ var call$d = functionCall;
+ var aConstructor$1 = aConstructor$3;
+ var toObject$d = toObject$j;
+ var lengthOfArrayLike$b = lengthOfArrayLike$g;
+ var getIterator$2 = getIterator$4;
+ var getIteratorMethod$2 = getIteratorMethod$5;
var isArrayIteratorMethod$1 = isArrayIteratorMethod$3;
- var bind$7 = functionBindContext;
- var aTypedArrayConstructor$4 = arrayBufferViewCore.aTypedArrayConstructor;
+ var aTypedArrayConstructor$2 = arrayBufferViewCore.aTypedArrayConstructor;
var typedArrayFrom$2 = function from(source /* , mapfn, thisArg */) {
- var O = toObject$c(source);
+ var C = aConstructor$1(this);
+ var O = toObject$d(source);
var argumentsLength = arguments.length;
var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
var mapping = mapfn !== undefined;
- var iteratorMethod = getIteratorMethod$3(O);
+ var iteratorMethod = getIteratorMethod$2(O);
var i, length, result, step, iterator, next;
- if (iteratorMethod != undefined && !isArrayIteratorMethod$1(iteratorMethod)) {
- iterator = iteratorMethod.call(O);
+ if (iteratorMethod && !isArrayIteratorMethod$1(iteratorMethod)) {
+ iterator = getIterator$2(O, iteratorMethod);
next = iterator.next;
O = [];
- while (!(step = next.call(iterator)).done) {
+ while (!(step = call$d(next, iterator)).done) {
O.push(step.value);
}
}
if (mapping && argumentsLength > 2) {
- mapfn = bind$7(mapfn, arguments[2], 2);
+ mapfn = bind$9(mapfn, arguments[2]);
}
- length = toLength$i(O.length);
- result = new (aTypedArrayConstructor$4(this))(length);
+ length = lengthOfArrayLike$b(O);
+ result = new (aTypedArrayConstructor$2(C))(length);
for (i = 0; length > i; i++) {
result[i] = mapping ? mapfn(O[i], i) : O[i];
}
return result;
};
- var isObject$f = isObject$r;
+ var isCallable$6 = isCallable$r;
+ var isObject$g = isObject$s;
var setPrototypeOf$2 = objectSetPrototypeOf;
// makes subclassing work correct for wrapped built-ins
@@ -3678,31 +4359,35 @@
// it can work only with native `setPrototypeOf`
setPrototypeOf$2 &&
// we haven't completely correct pre-ES6 way for getting `new.target`, so use this
- typeof (NewTarget = dummy.constructor) == 'function' &&
+ isCallable$6(NewTarget = dummy.constructor) &&
NewTarget !== Wrapper &&
- isObject$f(NewTargetPrototype = NewTarget.prototype) &&
+ isObject$g(NewTargetPrototype = NewTarget.prototype) &&
NewTargetPrototype !== Wrapper.prototype
) setPrototypeOf$2($this, NewTargetPrototype);
return $this;
};
- var $$U = _export;
- var global$f = global$F;
+ var $$_ = _export;
+ var global$v = global$1m;
+ var call$c = functionCall;
var DESCRIPTORS$c = descriptors;
var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$1 = typedArrayConstructorsRequireWrappers;
- var ArrayBufferViewCore$m = arrayBufferViewCore;
+ var ArrayBufferViewCore$n = arrayBufferViewCore;
var ArrayBufferModule = arrayBuffer;
var anInstance$4 = anInstance$7;
var createPropertyDescriptor$2 = createPropertyDescriptor$7;
- var createNonEnumerableProperty$2 = createNonEnumerableProperty$e;
- var toLength$h = toLength$q;
+ var createNonEnumerableProperty$2 = createNonEnumerableProperty$b;
+ var isIntegralNumber = isIntegralNumber$1;
+ var toLength$7 = toLength$c;
var toIndex = toIndex$2;
var toOffset$1 = toOffset$2;
- var toPrimitive$3 = toPrimitive$7;
- var has$5 = has$j;
- var classof$5 = classof$b;
- var isObject$e = isObject$r;
- var create$9 = objectCreate;
+ var toPropertyKey$1 = toPropertyKey$5;
+ var hasOwn$7 = hasOwnProperty_1;
+ var classof$4 = classof$d;
+ var isObject$f = isObject$s;
+ var isSymbol$2 = isSymbol$6;
+ var create$7 = objectCreate;
+ var isPrototypeOf$3 = objectIsPrototypeOf;
var setPrototypeOf$1 = objectSetPrototypeOf;
var getOwnPropertyNames$2 = objectGetOwnPropertyNames.f;
var typedArrayFrom$1 = typedArrayFrom$2;
@@ -3713,65 +4398,71 @@
var InternalStateModule$3 = internalState;
var inheritIfRequired$3 = inheritIfRequired$4;
- var getInternalState$1 = InternalStateModule$3.get;
+ var getInternalState = InternalStateModule$3.get;
var setInternalState$3 = InternalStateModule$3.set;
var nativeDefineProperty = definePropertyModule$1.f;
var nativeGetOwnPropertyDescriptor$1 = getOwnPropertyDescriptorModule$1.f;
var round = Math.round;
- var RangeError$1 = global$f.RangeError;
+ var RangeError$7 = global$v.RangeError;
var ArrayBuffer$1 = ArrayBufferModule.ArrayBuffer;
+ var ArrayBufferPrototype = ArrayBuffer$1.prototype;
var DataView$1 = ArrayBufferModule.DataView;
- var NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore$m.NATIVE_ARRAY_BUFFER_VIEWS;
- var TYPED_ARRAY_TAG = ArrayBufferViewCore$m.TYPED_ARRAY_TAG;
- var TypedArray = ArrayBufferViewCore$m.TypedArray;
- var TypedArrayPrototype = ArrayBufferViewCore$m.TypedArrayPrototype;
- var aTypedArrayConstructor$3 = ArrayBufferViewCore$m.aTypedArrayConstructor;
- var isTypedArray = ArrayBufferViewCore$m.isTypedArray;
+ var NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore$n.NATIVE_ARRAY_BUFFER_VIEWS;
+ var TYPED_ARRAY_CONSTRUCTOR$1 = ArrayBufferViewCore$n.TYPED_ARRAY_CONSTRUCTOR;
+ var TYPED_ARRAY_TAG = ArrayBufferViewCore$n.TYPED_ARRAY_TAG;
+ var TypedArray = ArrayBufferViewCore$n.TypedArray;
+ var TypedArrayPrototype = ArrayBufferViewCore$n.TypedArrayPrototype;
+ var aTypedArrayConstructor$1 = ArrayBufferViewCore$n.aTypedArrayConstructor;
+ var isTypedArray = ArrayBufferViewCore$n.isTypedArray;
var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
var WRONG_LENGTH = 'Wrong length';
var fromList = function (C, list) {
+ aTypedArrayConstructor$1(C);
var index = 0;
var length = list.length;
- var result = new (aTypedArrayConstructor$3(C))(length);
+ var result = new C(length);
while (length > index) result[index] = list[index++];
return result;
};
var addGetter = function (it, key) {
nativeDefineProperty(it, key, { get: function () {
- return getInternalState$1(this)[key];
+ return getInternalState(this)[key];
} });
};
var isArrayBuffer = function (it) {
var klass;
- return it instanceof ArrayBuffer$1 || (klass = classof$5(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';
+ return isPrototypeOf$3(ArrayBufferPrototype, it) || (klass = classof$4(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';
};
var isTypedArrayIndex = function (target, key) {
return isTypedArray(target)
- && typeof key != 'symbol'
+ && !isSymbol$2(key)
&& key in target
- && String(+key) == String(key);
+ && isIntegralNumber(+key)
+ && key >= 0;
};
var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {
- return isTypedArrayIndex(target, key = toPrimitive$3(key, true))
+ key = toPropertyKey$1(key);
+ return isTypedArrayIndex(target, key)
? createPropertyDescriptor$2(2, target[key])
: nativeGetOwnPropertyDescriptor$1(target, key);
};
var wrappedDefineProperty = function defineProperty(target, key, descriptor) {
- if (isTypedArrayIndex(target, key = toPrimitive$3(key, true))
- && isObject$e(descriptor)
- && has$5(descriptor, 'value')
- && !has$5(descriptor, 'get')
- && !has$5(descriptor, 'set')
+ key = toPropertyKey$1(key);
+ if (isTypedArrayIndex(target, key)
+ && isObject$f(descriptor)
+ && hasOwn$7(descriptor, 'value')
+ && !hasOwn$7(descriptor, 'get')
+ && !hasOwn$7(descriptor, 'set')
// TODO: add validation descriptor w/o calling accessors
&& !descriptor.configurable
- && (!has$5(descriptor, 'writable') || descriptor.writable)
- && (!has$5(descriptor, 'enumerable') || descriptor.enumerable)
+ && (!hasOwn$7(descriptor, 'writable') || descriptor.writable)
+ && (!hasOwn$7(descriptor, 'enumerable') || descriptor.enumerable)
) {
target[key] = descriptor.value;
return target;
@@ -3788,7 +4479,7 @@
addGetter(TypedArrayPrototype, 'length');
}
- $$U({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {
+ $$_({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {
getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,
defineProperty: wrappedDefineProperty
});
@@ -3798,18 +4489,18 @@
var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';
var GETTER = 'get' + TYPE;
var SETTER = 'set' + TYPE;
- var NativeTypedArrayConstructor = global$f[CONSTRUCTOR_NAME];
+ var NativeTypedArrayConstructor = global$v[CONSTRUCTOR_NAME];
var TypedArrayConstructor = NativeTypedArrayConstructor;
var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;
var exported = {};
var getter = function (that, index) {
- var data = getInternalState$1(that);
+ var data = getInternalState(that);
return data.view[GETTER](index * BYTES + data.byteOffset, true);
};
var setter = function (that, index, value) {
- var data = getInternalState$1(that);
+ var data = getInternalState(that);
if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;
data.view[SETTER](index * BYTES + data.byteOffset, value, true);
};
@@ -3828,11 +4519,11 @@
if (!NATIVE_ARRAY_BUFFER_VIEWS) {
TypedArrayConstructor = wrapper(function (that, data, offset, $length) {
- anInstance$4(that, TypedArrayConstructor, CONSTRUCTOR_NAME);
+ anInstance$4(that, TypedArrayConstructorPrototype);
var index = 0;
var byteOffset = 0;
var buffer, byteLength, length;
- if (!isObject$e(data)) {
+ if (!isObject$f(data)) {
length = toIndex(data);
byteLength = length * BYTES;
buffer = new ArrayBuffer$1(byteLength);
@@ -3841,18 +4532,18 @@
byteOffset = toOffset$1(offset, BYTES);
var $len = data.byteLength;
if ($length === undefined) {
- if ($len % BYTES) throw RangeError$1(WRONG_LENGTH);
+ if ($len % BYTES) throw RangeError$7(WRONG_LENGTH);
byteLength = $len - byteOffset;
- if (byteLength < 0) throw RangeError$1(WRONG_LENGTH);
+ if (byteLength < 0) throw RangeError$7(WRONG_LENGTH);
} else {
- byteLength = toLength$h($length) * BYTES;
- if (byteLength + byteOffset > $len) throw RangeError$1(WRONG_LENGTH);
+ byteLength = toLength$7($length) * BYTES;
+ if (byteLength + byteOffset > $len) throw RangeError$7(WRONG_LENGTH);
}
length = byteLength / BYTES;
} else if (isTypedArray(data)) {
return fromList(TypedArrayConstructor, data);
} else {
- return typedArrayFrom$1.call(TypedArrayConstructor, data);
+ return call$c(typedArrayFrom$1, TypedArrayConstructor, data);
}
setInternalState$3(that, {
buffer: buffer,
@@ -3865,19 +4556,19 @@
});
if (setPrototypeOf$1) setPrototypeOf$1(TypedArrayConstructor, TypedArray);
- TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create$9(TypedArrayPrototype);
+ TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create$7(TypedArrayPrototype);
} else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$1) {
TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {
- anInstance$4(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME);
+ anInstance$4(dummy, TypedArrayConstructorPrototype);
return inheritIfRequired$3(function () {
- if (!isObject$e(data)) return new NativeTypedArrayConstructor(toIndex(data));
+ if (!isObject$f(data)) return new NativeTypedArrayConstructor(toIndex(data));
if (isArrayBuffer(data)) return $length !== undefined
? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES), $length)
: typedArrayOffset !== undefined
? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES))
: new NativeTypedArrayConstructor(data);
if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);
- return typedArrayFrom$1.call(TypedArrayConstructor, data);
+ return call$c(typedArrayFrom$1, TypedArrayConstructor, data);
}(), dummy, TypedArrayConstructor);
});
@@ -3894,13 +4585,15 @@
createNonEnumerableProperty$2(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);
}
+ createNonEnumerableProperty$2(TypedArrayConstructorPrototype, TYPED_ARRAY_CONSTRUCTOR$1, TypedArrayConstructor);
+
if (TYPED_ARRAY_TAG) {
createNonEnumerableProperty$2(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);
}
exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;
- $$U({
+ $$_({
global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS
}, exported);
@@ -3926,9 +4619,9 @@
};
});
- var toObject$b = toObject$i;
+ var toObject$c = toObject$j;
var toAbsoluteIndex$4 = toAbsoluteIndex$8;
- var toLength$g = toLength$q;
+ var lengthOfArrayLike$a = lengthOfArrayLike$g;
var min$7 = Math.min;
@@ -3936,8 +4629,8 @@
// https://tc39.es/ecma262/#sec-array.prototype.copywithin
// eslint-disable-next-line es/no-array-prototype-copywithin -- safe
var arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
- var O = toObject$b(this);
- var len = toLength$g(O.length);
+ var O = toObject$c(this);
+ var len = lengthOfArrayLike$a(O);
var to = toAbsoluteIndex$4(target, len);
var from = toAbsoluteIndex$4(start, len);
var end = arguments.length > 2 ? arguments[2] : undefined;
@@ -3956,23 +4649,25 @@
} return O;
};
- var ArrayBufferViewCore$l = arrayBufferViewCore;
- var $copyWithin = arrayCopyWithin;
+ var uncurryThis$A = functionUncurryThis;
+ var ArrayBufferViewCore$m = arrayBufferViewCore;
+ var $ArrayCopyWithin = arrayCopyWithin;
- var aTypedArray$l = ArrayBufferViewCore$l.aTypedArray;
- var exportTypedArrayMethod$m = ArrayBufferViewCore$l.exportTypedArrayMethod;
+ var u$ArrayCopyWithin = uncurryThis$A($ArrayCopyWithin);
+ var aTypedArray$l = ArrayBufferViewCore$m.aTypedArray;
+ var exportTypedArrayMethod$m = ArrayBufferViewCore$m.exportTypedArrayMethod;
// `%TypedArray%.prototype.copyWithin` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin
exportTypedArrayMethod$m('copyWithin', function copyWithin(target, start /* , end */) {
- return $copyWithin.call(aTypedArray$l(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
+ return u$ArrayCopyWithin(aTypedArray$l(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
});
- var ArrayBufferViewCore$k = arrayBufferViewCore;
+ var ArrayBufferViewCore$l = arrayBufferViewCore;
var $every$1 = arrayIteration.every;
- var aTypedArray$k = ArrayBufferViewCore$k.aTypedArray;
- var exportTypedArrayMethod$l = ArrayBufferViewCore$k.exportTypedArrayMethod;
+ var aTypedArray$k = ArrayBufferViewCore$l.aTypedArray;
+ var exportTypedArrayMethod$l = ArrayBufferViewCore$l.exportTypedArrayMethod;
// `%TypedArray%.prototype.every` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every
@@ -3980,31 +4675,53 @@
return $every$1(aTypedArray$k(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
});
- var ArrayBufferViewCore$j = arrayBufferViewCore;
+ var ArrayBufferViewCore$k = arrayBufferViewCore;
+ var call$b = functionCall;
var $fill = arrayFill$1;
- var aTypedArray$j = ArrayBufferViewCore$j.aTypedArray;
- var exportTypedArrayMethod$k = ArrayBufferViewCore$j.exportTypedArrayMethod;
+ var aTypedArray$j = ArrayBufferViewCore$k.aTypedArray;
+ var exportTypedArrayMethod$k = ArrayBufferViewCore$k.exportTypedArrayMethod;
// `%TypedArray%.prototype.fill` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill
- // eslint-disable-next-line no-unused-vars -- required for `.length`
exportTypedArrayMethod$k('fill', function fill(value /* , start, end */) {
- return $fill.apply(aTypedArray$j(this), arguments);
+ var length = arguments.length;
+ return call$b(
+ $fill,
+ aTypedArray$j(this),
+ value,
+ length > 1 ? arguments[1] : undefined,
+ length > 2 ? arguments[2] : undefined
+ );
});
- var aTypedArrayConstructor$2 = arrayBufferViewCore.aTypedArrayConstructor;
- var speciesConstructor$5 = speciesConstructor$8;
-
- var typedArrayFromSpeciesAndList = function (instance, list) {
- var C = speciesConstructor$5(instance, instance.constructor);
+ var arrayFromConstructorAndList$1 = function (Constructor, list) {
var index = 0;
var length = list.length;
- var result = new (aTypedArrayConstructor$2(C))(length);
+ var result = new Constructor(length);
while (length > index) result[index] = list[index++];
return result;
};
+ var ArrayBufferViewCore$j = arrayBufferViewCore;
+ var speciesConstructor$2 = speciesConstructor$5;
+
+ var TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore$j.TYPED_ARRAY_CONSTRUCTOR;
+ var aTypedArrayConstructor = ArrayBufferViewCore$j.aTypedArrayConstructor;
+
+ // a part of `TypedArraySpeciesCreate` abstract operation
+ // https://tc39.es/ecma262/#typedarray-species-create
+ var typedArraySpeciesConstructor$4 = function (originalArray) {
+ return aTypedArrayConstructor(speciesConstructor$2(originalArray, originalArray[TYPED_ARRAY_CONSTRUCTOR]));
+ };
+
+ var arrayFromConstructorAndList = arrayFromConstructorAndList$1;
+ var typedArraySpeciesConstructor$3 = typedArraySpeciesConstructor$4;
+
+ var typedArrayFromSpeciesAndList = function (instance, list) {
+ return arrayFromConstructorAndList(typedArraySpeciesConstructor$3(instance), list);
+ };
+
var ArrayBufferViewCore$i = arrayBufferViewCore;
var $filter$1 = arrayIteration.filter;
var fromSpeciesAndList = typedArrayFromSpeciesAndList;
@@ -4079,84 +4796,87 @@
return $indexOf(aTypedArray$d(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
});
- var global$e = global$F;
+ var global$u = global$1m;
+ var uncurryThis$z = functionUncurryThis;
+ var PROPER_FUNCTION_NAME$2 = functionName.PROPER;
var ArrayBufferViewCore$c = arrayBufferViewCore;
var ArrayIterators = es_array_iterator;
- var wellKnownSymbol$9 = wellKnownSymbol$s;
+ var wellKnownSymbol$9 = wellKnownSymbol$t;
- var ITERATOR$2 = wellKnownSymbol$9('iterator');
- var Uint8Array$2 = global$e.Uint8Array;
- var arrayValues = ArrayIterators.values;
- var arrayKeys = ArrayIterators.keys;
- var arrayEntries = ArrayIterators.entries;
+ var ITERATOR$4 = wellKnownSymbol$9('iterator');
+ var Uint8Array$2 = global$u.Uint8Array;
+ var arrayValues = uncurryThis$z(ArrayIterators.values);
+ var arrayKeys = uncurryThis$z(ArrayIterators.keys);
+ var arrayEntries = uncurryThis$z(ArrayIterators.entries);
var aTypedArray$c = ArrayBufferViewCore$c.aTypedArray;
var exportTypedArrayMethod$d = ArrayBufferViewCore$c.exportTypedArrayMethod;
- var nativeTypedArrayIterator = Uint8Array$2 && Uint8Array$2.prototype[ITERATOR$2];
+ var nativeTypedArrayIterator = Uint8Array$2 && Uint8Array$2.prototype[ITERATOR$4];
- var CORRECT_ITER_NAME = !!nativeTypedArrayIterator
- && (nativeTypedArrayIterator.name == 'values' || nativeTypedArrayIterator.name == undefined);
+ var PROPER_ARRAY_VALUES_NAME = !!nativeTypedArrayIterator && nativeTypedArrayIterator.name === 'values';
var typedArrayValues = function values() {
- return arrayValues.call(aTypedArray$c(this));
+ return arrayValues(aTypedArray$c(this));
};
// `%TypedArray%.prototype.entries` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries
exportTypedArrayMethod$d('entries', function entries() {
- return arrayEntries.call(aTypedArray$c(this));
+ return arrayEntries(aTypedArray$c(this));
});
// `%TypedArray%.prototype.keys` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys
exportTypedArrayMethod$d('keys', function keys() {
- return arrayKeys.call(aTypedArray$c(this));
+ return arrayKeys(aTypedArray$c(this));
});
// `%TypedArray%.prototype.values` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values
- exportTypedArrayMethod$d('values', typedArrayValues, !CORRECT_ITER_NAME);
+ exportTypedArrayMethod$d('values', typedArrayValues, PROPER_FUNCTION_NAME$2 && !PROPER_ARRAY_VALUES_NAME);
// `%TypedArray%.prototype[@@iterator]` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator
- exportTypedArrayMethod$d(ITERATOR$2, typedArrayValues, !CORRECT_ITER_NAME);
+ exportTypedArrayMethod$d(ITERATOR$4, typedArrayValues, PROPER_FUNCTION_NAME$2 && !PROPER_ARRAY_VALUES_NAME);
var ArrayBufferViewCore$b = arrayBufferViewCore;
+ var uncurryThis$y = functionUncurryThis;
var aTypedArray$b = ArrayBufferViewCore$b.aTypedArray;
var exportTypedArrayMethod$c = ArrayBufferViewCore$b.exportTypedArrayMethod;
- var $join = [].join;
+ var $join = uncurryThis$y([].join);
// `%TypedArray%.prototype.join` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join
- // eslint-disable-next-line no-unused-vars -- required for `.length`
exportTypedArrayMethod$c('join', function join(separator) {
- return $join.apply(aTypedArray$b(this), arguments);
+ return $join(aTypedArray$b(this), separator);
});
/* eslint-disable es/no-array-prototype-lastindexof -- safe */
- var toIndexedObject$4 = toIndexedObject$b;
- var toInteger$4 = toInteger$b;
- var toLength$f = toLength$q;
- var arrayMethodIsStrict$5 = arrayMethodIsStrict$8;
+ var apply$6 = functionApply;
+ var toIndexedObject$4 = toIndexedObject$c;
+ var toIntegerOrInfinity$4 = toIntegerOrInfinity$b;
+ var lengthOfArrayLike$9 = lengthOfArrayLike$g;
+ var arrayMethodIsStrict$6 = arrayMethodIsStrict$9;
var min$6 = Math.min;
var $lastIndexOf$1 = [].lastIndexOf;
var NEGATIVE_ZERO = !!$lastIndexOf$1 && 1 / [1].lastIndexOf(1, -0) < 0;
- var STRICT_METHOD$5 = arrayMethodIsStrict$5('lastIndexOf');
- var FORCED$e = NEGATIVE_ZERO || !STRICT_METHOD$5;
+ var STRICT_METHOD$6 = arrayMethodIsStrict$6('lastIndexOf');
+ var FORCED$g = NEGATIVE_ZERO || !STRICT_METHOD$6;
// `Array.prototype.lastIndexOf` method implementation
// https://tc39.es/ecma262/#sec-array.prototype.lastindexof
- var arrayLastIndexOf = FORCED$e ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {
+ var arrayLastIndexOf = FORCED$g ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {
// convert -0 to +0
- if (NEGATIVE_ZERO) return $lastIndexOf$1.apply(this, arguments) || 0;
+ if (NEGATIVE_ZERO) return apply$6($lastIndexOf$1, this, arguments) || 0;
var O = toIndexedObject$4(this);
- var length = toLength$f(O.length);
+ var length = lengthOfArrayLike$9(O);
var index = length - 1;
- if (arguments.length > 1) index = min$6(index, toInteger$4(arguments[1]));
+ if (arguments.length > 1) index = min$6(index, toIntegerOrInfinity$4(arguments[1]));
if (index < 0) index = length + index;
for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;
return -1;
} : $lastIndexOf$1;
var ArrayBufferViewCore$a = arrayBufferViewCore;
+ var apply$5 = functionApply;
var $lastIndexOf = arrayLastIndexOf;
var aTypedArray$a = ArrayBufferViewCore$a.aTypedArray;
@@ -4164,39 +4884,41 @@
// `%TypedArray%.prototype.lastIndexOf` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof
- // eslint-disable-next-line no-unused-vars -- required for `.length`
exportTypedArrayMethod$b('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {
- return $lastIndexOf.apply(aTypedArray$a(this), arguments);
+ var length = arguments.length;
+ return apply$5($lastIndexOf, aTypedArray$a(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);
});
var ArrayBufferViewCore$9 = arrayBufferViewCore;
var $map = arrayIteration.map;
- var speciesConstructor$4 = speciesConstructor$8;
+ var typedArraySpeciesConstructor$2 = typedArraySpeciesConstructor$4;
var aTypedArray$9 = ArrayBufferViewCore$9.aTypedArray;
- var aTypedArrayConstructor$1 = ArrayBufferViewCore$9.aTypedArrayConstructor;
var exportTypedArrayMethod$a = ArrayBufferViewCore$9.exportTypedArrayMethod;
// `%TypedArray%.prototype.map` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map
exportTypedArrayMethod$a('map', function map(mapfn /* , thisArg */) {
return $map(aTypedArray$9(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {
- return new (aTypedArrayConstructor$1(speciesConstructor$4(O, O.constructor)))(length);
+ return new (typedArraySpeciesConstructor$2(O))(length);
});
});
- var aFunction$4 = aFunction$9;
- var toObject$a = toObject$i;
+ var global$t = global$1m;
+ var aCallable$4 = aCallable$a;
+ var toObject$b = toObject$j;
var IndexedObject$2 = indexedObject;
- var toLength$e = toLength$q;
+ var lengthOfArrayLike$8 = lengthOfArrayLike$g;
+
+ var TypeError$9 = global$t.TypeError;
// `Array.prototype.{ reduce, reduceRight }` methods implementation
var createMethod$3 = function (IS_RIGHT) {
return function (that, callbackfn, argumentsLength, memo) {
- aFunction$4(callbackfn);
- var O = toObject$a(that);
+ aCallable$4(callbackfn);
+ var O = toObject$b(that);
var self = IndexedObject$2(O);
- var length = toLength$e(O.length);
+ var length = lengthOfArrayLike$8(O);
var index = IS_RIGHT ? length - 1 : 0;
var i = IS_RIGHT ? -1 : 1;
if (argumentsLength < 2) while (true) {
@@ -4207,7 +4929,7 @@
}
index += i;
if (IS_RIGHT ? index < 0 : length <= index) {
- throw TypeError('Reduce of empty array with no initial value');
+ throw TypeError$9('Reduce of empty array with no initial value');
}
}
for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {
@@ -4235,11 +4957,12 @@
// `%TypedArray%.prototype.reduce` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce
exportTypedArrayMethod$9('reduce', function reduce(callbackfn /* , initialValue */) {
- return $reduce$1(aTypedArray$8(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
+ var length = arguments.length;
+ return $reduce$1(aTypedArray$8(this), callbackfn, length, length > 1 ? arguments[1] : undefined);
});
var ArrayBufferViewCore$7 = arrayBufferViewCore;
- var $reduceRight = arrayReduce.right;
+ var $reduceRight$1 = arrayReduce.right;
var aTypedArray$7 = ArrayBufferViewCore$7.aTypedArray;
var exportTypedArrayMethod$8 = ArrayBufferViewCore$7.exportTypedArrayMethod;
@@ -4247,7 +4970,8 @@
// `%TypedArray%.prototype.reduceRicht` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright
exportTypedArrayMethod$8('reduceRight', function reduceRight(callbackfn /* , initialValue */) {
- return $reduceRight(aTypedArray$7(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
+ var length = arguments.length;
+ return $reduceRight$1(aTypedArray$7(this), callbackfn, length, length > 1 ? arguments[1] : undefined);
});
var ArrayBufferViewCore$6 = arrayBufferViewCore;
@@ -4271,16 +4995,18 @@
} return that;
});
+ var global$s = global$1m;
var ArrayBufferViewCore$5 = arrayBufferViewCore;
- var toLength$d = toLength$q;
+ var lengthOfArrayLike$7 = lengthOfArrayLike$g;
var toOffset = toOffset$2;
- var toObject$9 = toObject$i;
- var fails$x = fails$N;
+ var toObject$a = toObject$j;
+ var fails$y = fails$S;
+ var RangeError$6 = global$s.RangeError;
var aTypedArray$5 = ArrayBufferViewCore$5.aTypedArray;
var exportTypedArrayMethod$6 = ArrayBufferViewCore$5.exportTypedArrayMethod;
- var FORCED$d = fails$x(function () {
+ var FORCED$f = fails$y(function () {
// eslint-disable-next-line es/no-typed-arrays -- required for testing
new Int8Array(1).set({});
});
@@ -4291,23 +5017,22 @@
aTypedArray$5(this);
var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);
var length = this.length;
- var src = toObject$9(arrayLike);
- var len = toLength$d(src.length);
+ var src = toObject$a(arrayLike);
+ var len = lengthOfArrayLike$7(src);
var index = 0;
- if (len + offset > length) throw RangeError('Wrong length');
+ if (len + offset > length) throw RangeError$6('Wrong length');
while (index < len) this[offset + index] = src[index++];
- }, FORCED$d);
+ }, FORCED$f);
var ArrayBufferViewCore$4 = arrayBufferViewCore;
- var speciesConstructor$3 = speciesConstructor$8;
- var fails$w = fails$N;
+ var typedArraySpeciesConstructor$1 = typedArraySpeciesConstructor$4;
+ var fails$x = fails$S;
+ var arraySlice$7 = arraySlice$c;
var aTypedArray$4 = ArrayBufferViewCore$4.aTypedArray;
- var aTypedArrayConstructor = ArrayBufferViewCore$4.aTypedArrayConstructor;
var exportTypedArrayMethod$5 = ArrayBufferViewCore$4.exportTypedArrayMethod;
- var $slice$1 = [].slice;
- var FORCED$c = fails$w(function () {
+ var FORCED$e = fails$x(function () {
// eslint-disable-next-line es/no-typed-arrays -- required for testing
new Int8Array(1).slice();
});
@@ -4315,14 +5040,14 @@
// `%TypedArray%.prototype.slice` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice
exportTypedArrayMethod$5('slice', function slice(start, end) {
- var list = $slice$1.call(aTypedArray$4(this), start, end);
- var C = speciesConstructor$3(this, this.constructor);
+ var list = arraySlice$7(aTypedArray$4(this), start, end);
+ var C = typedArraySpeciesConstructor$1(this);
var index = 0;
var length = list.length;
- var result = new (aTypedArrayConstructor(C))(length);
+ var result = new C(length);
while (length > index) result[index] = list[index++];
return result;
- }, FORCED$c);
+ }, FORCED$e);
var ArrayBufferViewCore$3 = arrayBufferViewCore;
var $some$1 = arrayIteration.some;
@@ -4336,15 +5061,17 @@
return $some$1(aTypedArray$3(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
});
- // TODO: use something more complex like timsort?
+ var arraySlice$6 = arraySlice$c;
+
var floor$4 = Math.floor;
var mergeSort = function (array, comparefn) {
var length = array.length;
var middle = floor$4(length / 2);
return length < 8 ? insertionSort(array, comparefn) : merge$5(
- mergeSort(array.slice(0, middle), comparefn),
- mergeSort(array.slice(middle), comparefn),
+ array,
+ mergeSort(arraySlice$6(array, 0, middle), comparefn),
+ mergeSort(arraySlice$6(array, middle), comparefn),
comparefn
);
};
@@ -4364,27 +5091,24 @@
} return array;
};
- var merge$5 = function (left, right, comparefn) {
+ var merge$5 = function (array, left, right, comparefn) {
var llength = left.length;
var rlength = right.length;
var lindex = 0;
var rindex = 0;
- var result = [];
while (lindex < llength || rindex < rlength) {
- if (lindex < llength && rindex < rlength) {
- result.push(comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]);
- } else {
- result.push(lindex < llength ? left[lindex++] : right[rindex++]);
- }
- } return result;
+ array[lindex + rindex] = (lindex < llength && rindex < rlength)
+ ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]
+ : lindex < llength ? left[lindex++] : right[rindex++];
+ } return array;
};
- var arraySort = mergeSort;
+ var arraySort$1 = mergeSort;
- var userAgent$2 = engineUserAgent;
+ var userAgent$3 = engineUserAgent;
- var firefox = userAgent$2.match(/firefox\/(\d+)/i);
+ var firefox = userAgent$3.match(/firefox\/(\d+)/i);
var engineFfVersion = !!firefox && +firefox[1];
@@ -4392,36 +5116,37 @@
var engineIsIeOrEdge = /MSIE|Trident/.test(UA);
- var userAgent$1 = engineUserAgent;
+ var userAgent$2 = engineUserAgent;
- var webkit = userAgent$1.match(/AppleWebKit\/(\d+)\./);
+ var webkit = userAgent$2.match(/AppleWebKit\/(\d+)\./);
var engineWebkitVersion = !!webkit && +webkit[1];
+ var global$r = global$1m;
+ var uncurryThis$x = functionUncurryThis;
+ var fails$w = fails$S;
+ var aCallable$3 = aCallable$a;
+ var internalSort$1 = arraySort$1;
var ArrayBufferViewCore$2 = arrayBufferViewCore;
- var global$d = global$F;
- var fails$v = fails$N;
- var aFunction$3 = aFunction$9;
- var toLength$c = toLength$q;
- var internalSort$1 = arraySort;
var FF$1 = engineFfVersion;
var IE_OR_EDGE$1 = engineIsIeOrEdge;
var V8$1 = engineV8Version;
var WEBKIT$1 = engineWebkitVersion;
+ var Array$3 = global$r.Array;
var aTypedArray$2 = ArrayBufferViewCore$2.aTypedArray;
var exportTypedArrayMethod$3 = ArrayBufferViewCore$2.exportTypedArrayMethod;
- var Uint16Array = global$d.Uint16Array;
- var nativeSort$1 = Uint16Array && Uint16Array.prototype.sort;
+ var Uint16Array = global$r.Uint16Array;
+ var un$Sort$1 = Uint16Array && uncurryThis$x(Uint16Array.prototype.sort);
// WebKit
- var ACCEPT_INCORRECT_ARGUMENTS = !!nativeSort$1 && !fails$v(function () {
- var array = new Uint16Array(2);
- array.sort(null);
- array.sort({});
- });
+ var ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort$1 && !(fails$w(function () {
+ un$Sort$1(new Uint16Array(2), null);
+ }) && fails$w(function () {
+ un$Sort$1(new Uint16Array(2), {});
+ }));
- var STABLE_SORT$1 = !!nativeSort$1 && !fails$v(function () {
+ var STABLE_SORT$1 = !!un$Sort$1 && !fails$w(function () {
// feature detection can be too slow, so check engines versions
if (V8$1) return V8$1 < 74;
if (FF$1) return FF$1 < 67;
@@ -4429,7 +5154,7 @@
if (WEBKIT$1) return WEBKIT$1 < 602;
var array = new Uint16Array(516);
- var expected = Array(516);
+ var expected = Array$3(516);
var index, mod;
for (index = 0; index < 516; index++) {
@@ -4438,7 +5163,7 @@
expected[index] = index - 2 * mod + 3;
}
- array.sort(function (a, b) {
+ un$Sort$1(array, function (a, b) {
return (a / 4 | 0) - (b / 4 | 0);
});
@@ -4462,32 +5187,16 @@
// `%TypedArray%.prototype.sort` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort
exportTypedArrayMethod$3('sort', function sort(comparefn) {
- var array = this;
- if (comparefn !== undefined) aFunction$3(comparefn);
- if (STABLE_SORT$1) return nativeSort$1.call(array, comparefn);
+ if (comparefn !== undefined) aCallable$3(comparefn);
+ if (STABLE_SORT$1) return un$Sort$1(this, comparefn);
- aTypedArray$2(array);
- var arrayLength = toLength$c(array.length);
- var items = Array(arrayLength);
- var index;
-
- for (index = 0; index < arrayLength; index++) {
- items[index] = array[index];
- }
-
- items = internalSort$1(array, getSortCompare$1(comparefn));
-
- for (index = 0; index < arrayLength; index++) {
- array[index] = items[index];
- }
-
- return array;
+ return internalSort$1(aTypedArray$2(this), getSortCompare$1(comparefn));
}, !STABLE_SORT$1 || ACCEPT_INCORRECT_ARGUMENTS);
var ArrayBufferViewCore$1 = arrayBufferViewCore;
- var toLength$b = toLength$q;
+ var toLength$6 = toLength$c;
var toAbsoluteIndex$3 = toAbsoluteIndex$8;
- var speciesConstructor$2 = speciesConstructor$8;
+ var typedArraySpeciesConstructor = typedArraySpeciesConstructor$4;
var aTypedArray$1 = ArrayBufferViewCore$1.aTypedArray;
var exportTypedArrayMethod$2 = ArrayBufferViewCore$1.exportTypedArrayMethod;
@@ -4498,52 +5207,59 @@
var O = aTypedArray$1(this);
var length = O.length;
var beginIndex = toAbsoluteIndex$3(begin, length);
- return new (speciesConstructor$2(O, O.constructor))(
+ var C = typedArraySpeciesConstructor(O);
+ return new C(
O.buffer,
O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,
- toLength$b((end === undefined ? length : toAbsoluteIndex$3(end, length)) - beginIndex)
+ toLength$6((end === undefined ? length : toAbsoluteIndex$3(end, length)) - beginIndex)
);
});
- var global$c = global$F;
+ var global$q = global$1m;
+ var apply$4 = functionApply;
var ArrayBufferViewCore = arrayBufferViewCore;
- var fails$u = fails$N;
+ var fails$v = fails$S;
+ var arraySlice$5 = arraySlice$c;
- var Int8Array$1 = global$c.Int8Array;
+ var Int8Array$1 = global$q.Int8Array;
var aTypedArray = ArrayBufferViewCore.aTypedArray;
var exportTypedArrayMethod$1 = ArrayBufferViewCore.exportTypedArrayMethod;
var $toLocaleString = [].toLocaleString;
- var $slice = [].slice;
// iOS Safari 6.x fails here
- var TO_LOCALE_STRING_BUG = !!Int8Array$1 && fails$u(function () {
+ var TO_LOCALE_STRING_BUG = !!Int8Array$1 && fails$v(function () {
$toLocaleString.call(new Int8Array$1(1));
});
- var FORCED$b = fails$u(function () {
+ var FORCED$d = fails$v(function () {
return [1, 2].toLocaleString() != new Int8Array$1([1, 2]).toLocaleString();
- }) || !fails$u(function () {
+ }) || !fails$v(function () {
Int8Array$1.prototype.toLocaleString.call([1, 2]);
});
// `%TypedArray%.prototype.toLocaleString` method
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring
exportTypedArrayMethod$1('toLocaleString', function toLocaleString() {
- return $toLocaleString.apply(TO_LOCALE_STRING_BUG ? $slice.call(aTypedArray(this)) : aTypedArray(this), arguments);
- }, FORCED$b);
+ return apply$4(
+ $toLocaleString,
+ TO_LOCALE_STRING_BUG ? arraySlice$5(aTypedArray(this)) : aTypedArray(this),
+ arraySlice$5(arguments)
+ );
+ }, FORCED$d);
var exportTypedArrayMethod = arrayBufferViewCore.exportTypedArrayMethod;
- var fails$t = fails$N;
- var global$b = global$F;
+ var fails$u = fails$S;
+ var global$p = global$1m;
+ var uncurryThis$w = functionUncurryThis;
- var Uint8Array$1 = global$b.Uint8Array;
+ var Uint8Array$1 = global$p.Uint8Array;
var Uint8ArrayPrototype = Uint8Array$1 && Uint8Array$1.prototype || {};
var arrayToString = [].toString;
- var arrayJoin = [].join;
+ var join$5 = uncurryThis$w([].join);
- if (fails$t(function () { arrayToString.call({}); })) {
+ if (fails$u(function () { arrayToString.call({}); })) {
arrayToString = function toString() {
- return arrayJoin.call(this);
+ return join$5(this);
};
}
@@ -4553,88 +5269,92 @@
// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring
exportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);
- var $$T = _export;
+ var $$Z = _export;
+ var uncurryThis$v = functionUncurryThis;
var IndexedObject$1 = indexedObject;
- var toIndexedObject$3 = toIndexedObject$b;
- var arrayMethodIsStrict$4 = arrayMethodIsStrict$8;
+ var toIndexedObject$3 = toIndexedObject$c;
+ var arrayMethodIsStrict$5 = arrayMethodIsStrict$9;
- var nativeJoin = [].join;
+ var un$Join = uncurryThis$v([].join);
var ES3_STRINGS = IndexedObject$1 != Object;
- var STRICT_METHOD$4 = arrayMethodIsStrict$4('join', ',');
+ var STRICT_METHOD$5 = arrayMethodIsStrict$5('join', ',');
// `Array.prototype.join` method
// https://tc39.es/ecma262/#sec-array.prototype.join
- $$T({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD$4 }, {
+ $$Z({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD$5 }, {
join: function join(separator) {
- return nativeJoin.call(toIndexedObject$3(this), separator === undefined ? ',' : separator);
+ return un$Join(toIndexedObject$3(this), separator === undefined ? ',' : separator);
}
});
- var toPrimitive$2 = toPrimitive$7;
+ var toPropertyKey = toPropertyKey$5;
var definePropertyModule = objectDefineProperty;
var createPropertyDescriptor$1 = createPropertyDescriptor$7;
var createProperty$4 = function (object, key, value) {
- var propertyKey = toPrimitive$2(key);
+ var propertyKey = toPropertyKey(key);
if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor$1(0, value));
else object[propertyKey] = value;
};
- var $$S = _export;
- var isObject$d = isObject$r;
- var isArray$2 = isArray$6;
+ var $$Y = _export;
+ var global$o = global$1m;
+ var isArray$4 = isArray$8;
+ var isConstructor$1 = isConstructor$4;
+ var isObject$e = isObject$s;
var toAbsoluteIndex$2 = toAbsoluteIndex$8;
- var toLength$a = toLength$q;
- var toIndexedObject$2 = toIndexedObject$b;
+ var lengthOfArrayLike$6 = lengthOfArrayLike$g;
+ var toIndexedObject$2 = toIndexedObject$c;
var createProperty$3 = createProperty$4;
- var wellKnownSymbol$8 = wellKnownSymbol$s;
+ var wellKnownSymbol$8 = wellKnownSymbol$t;
var arrayMethodHasSpeciesSupport$3 = arrayMethodHasSpeciesSupport$5;
+ var un$Slice = arraySlice$c;
var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport$3('slice');
var SPECIES$1 = wellKnownSymbol$8('species');
- var nativeSlice = [].slice;
+ var Array$2 = global$o.Array;
var max$3 = Math.max;
// `Array.prototype.slice` method
// https://tc39.es/ecma262/#sec-array.prototype.slice
// fallback for not array-like ES3 strings and DOM objects
- $$S({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$2 }, {
+ $$Y({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$2 }, {
slice: function slice(start, end) {
var O = toIndexedObject$2(this);
- var length = toLength$a(O.length);
+ var length = lengthOfArrayLike$6(O);
var k = toAbsoluteIndex$2(start, length);
var fin = toAbsoluteIndex$2(end === undefined ? length : end, length);
// inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible
var Constructor, result, n;
- if (isArray$2(O)) {
+ if (isArray$4(O)) {
Constructor = O.constructor;
// cross-realm fallback
- if (typeof Constructor == 'function' && (Constructor === Array || isArray$2(Constructor.prototype))) {
+ if (isConstructor$1(Constructor) && (Constructor === Array$2 || isArray$4(Constructor.prototype))) {
Constructor = undefined;
- } else if (isObject$d(Constructor)) {
+ } else if (isObject$e(Constructor)) {
Constructor = Constructor[SPECIES$1];
if (Constructor === null) Constructor = undefined;
}
- if (Constructor === Array || Constructor === undefined) {
- return nativeSlice.call(O, k, fin);
+ if (Constructor === Array$2 || Constructor === undefined) {
+ return un$Slice(O, k, fin);
}
}
- result = new (Constructor === undefined ? Array : Constructor)(max$3(fin - k, 0));
+ result = new (Constructor === undefined ? Array$2 : Constructor)(max$3(fin - k, 0));
for (n = 0; k < fin; k++, n++) if (k in O) createProperty$3(result, n, O[k]);
result.length = n;
return result;
}
});
- var fails$s = fails$N;
- var wellKnownSymbol$7 = wellKnownSymbol$s;
+ var fails$t = fails$S;
+ var wellKnownSymbol$7 = wellKnownSymbol$t;
var IS_PURE = isPure;
- var ITERATOR$1 = wellKnownSymbol$7('iterator');
+ var ITERATOR$3 = wellKnownSymbol$7('iterator');
- var nativeUrl = !fails$s(function () {
+ var nativeUrl = !fails$t(function () {
var url = new URL('b?a=1&b=2&c=3', 'http://a');
var searchParams = url.searchParams;
var result = '';
@@ -4648,7 +5368,7 @@
|| url.href !== 'http://a/c%20d?a=1&c=3'
|| searchParams.get('c') !== '3'
|| String(new URLSearchParams('?a=1')) !== 'a=1'
- || !searchParams[ITERATOR$1]
+ || !searchParams[ITERATOR$3]
// throws in Edge
|| new URL('https://a@b').username !== 'a'
|| new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'
@@ -4662,346 +5382,82 @@
|| new URL('http://x', undefined).host !== 'x';
});
- var DESCRIPTORS$b = descriptors;
- var fails$r = fails$N;
- var objectKeys$1 = objectKeys$4;
- var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols;
- var propertyIsEnumerableModule = objectPropertyIsEnumerable;
- var toObject$8 = toObject$i;
- var IndexedObject = indexedObject;
-
- // eslint-disable-next-line es/no-object-assign -- safe
- var $assign = Object.assign;
- // eslint-disable-next-line es/no-object-defineproperty -- required for testing
- var defineProperty$5 = Object.defineProperty;
-
- // `Object.assign` method
- // https://tc39.es/ecma262/#sec-object.assign
- var objectAssign = !$assign || fails$r(function () {
- // should have correct order of operations (Edge bug)
- if (DESCRIPTORS$b && $assign({ b: 1 }, $assign(defineProperty$5({}, 'a', {
- enumerable: true,
- get: function () {
- defineProperty$5(this, 'b', {
- value: 3,
- enumerable: false
- });
- }
- }), { b: 2 })).b !== 1) return true;
- // should work with symbols and should have deterministic property order (V8 bug)
- var A = {};
- var B = {};
- // eslint-disable-next-line es/no-symbol -- safe
- var symbol = Symbol();
- var alphabet = 'abcdefghijklmnopqrst';
- A[symbol] = 7;
- alphabet.split('').forEach(function (chr) { B[chr] = chr; });
- return $assign({}, A)[symbol] != 7 || objectKeys$1($assign({}, B)).join('') != alphabet;
- }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`
- var T = toObject$8(target);
- var argumentsLength = arguments.length;
- var index = 1;
- var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
- var propertyIsEnumerable = propertyIsEnumerableModule.f;
- while (argumentsLength > index) {
- var S = IndexedObject(arguments[index++]);
- var keys = getOwnPropertySymbols ? objectKeys$1(S).concat(getOwnPropertySymbols(S)) : objectKeys$1(S);
- var length = keys.length;
- var j = 0;
- var key;
- while (length > j) {
- key = keys[j++];
- if (!DESCRIPTORS$b || propertyIsEnumerable.call(S, key)) T[key] = S[key];
- }
- } return T;
- } : $assign;
-
- var anObject$a = anObject$m;
- var iteratorClose = iteratorClose$2;
-
- // call something on iterator step with safe closing on error
- var callWithSafeIterationClosing$1 = function (iterator, fn, value, ENTRIES) {
- try {
- return ENTRIES ? fn(anObject$a(value)[0], value[1]) : fn(value);
- } catch (error) {
- iteratorClose(iterator);
- throw error;
- }
- };
-
- var bind$6 = functionBindContext;
- var toObject$7 = toObject$i;
- var callWithSafeIterationClosing = callWithSafeIterationClosing$1;
- var isArrayIteratorMethod = isArrayIteratorMethod$3;
- var toLength$9 = toLength$q;
- var createProperty$2 = createProperty$4;
- var getIteratorMethod$2 = getIteratorMethod$5;
-
- // `Array.from` method implementation
- // https://tc39.es/ecma262/#sec-array.from
- var arrayFrom$1 = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
- var O = toObject$7(arrayLike);
- var C = typeof this == 'function' ? this : Array;
- var argumentsLength = arguments.length;
- var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
- var mapping = mapfn !== undefined;
- var iteratorMethod = getIteratorMethod$2(O);
- var index = 0;
- var length, result, step, iterator, next, value;
- if (mapping) mapfn = bind$6(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);
- // if the target is not iterable or it's an array with the default iterator - use a simple case
- if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {
- iterator = iteratorMethod.call(O);
- next = iterator.next;
- result = new C();
- for (;!(step = next.call(iterator)).done; index++) {
- value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
- createProperty$2(result, index, value);
- }
- } else {
- length = toLength$9(O.length);
- result = new C(length);
- for (;length > index; index++) {
- value = mapping ? mapfn(O[index], index) : O[index];
- createProperty$2(result, index, value);
- }
- }
- result.length = index;
- return result;
- };
-
- // based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js
- var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
- var base = 36;
- var tMin = 1;
- var tMax = 26;
- var skew = 38;
- var damp = 700;
- var initialBias = 72;
- var initialN = 128; // 0x80
- var delimiter = '-'; // '\x2D'
- var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars
- var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
- var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';
- var baseMinusTMin = base - tMin;
- var floor$3 = Math.floor;
- var stringFromCharCode = String.fromCharCode;
-
- /**
- * Creates an array containing the numeric code points of each Unicode
- * character in the string. While JavaScript uses UCS-2 internally,
- * this function will convert a pair of surrogate halves (each of which
- * UCS-2 exposes as separate characters) into a single code point,
- * matching UTF-16.
- */
- var ucs2decode = function (string) {
- var output = [];
- var counter = 0;
- var length = string.length;
- while (counter < length) {
- var value = string.charCodeAt(counter++);
- if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
- // It's a high surrogate, and there is a next character.
- var extra = string.charCodeAt(counter++);
- if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.
- output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
- } else {
- // It's an unmatched surrogate; only append this code unit, in case the
- // next code unit is the high surrogate of a surrogate pair.
- output.push(value);
- counter--;
- }
- } else {
- output.push(value);
- }
- }
- return output;
- };
-
- /**
- * Converts a digit/integer into a basic code point.
- */
- var digitToBasic = function (digit) {
- // 0..25 map to ASCII a..z or A..Z
- // 26..35 map to ASCII 0..9
- return digit + 22 + 75 * (digit < 26);
- };
-
- /**
- * Bias adaptation function as per section 3.4 of RFC 3492.
- * https://tools.ietf.org/html/rfc3492#section-3.4
- */
- var adapt = function (delta, numPoints, firstTime) {
- var k = 0;
- delta = firstTime ? floor$3(delta / damp) : delta >> 1;
- delta += floor$3(delta / numPoints);
- for (; delta > baseMinusTMin * tMax >> 1; k += base) {
- delta = floor$3(delta / baseMinusTMin);
- }
- return floor$3(k + (baseMinusTMin + 1) * delta / (delta + skew));
- };
-
- /**
- * Converts a string of Unicode symbols (e.g. a domain name label) to a
- * Punycode string of ASCII-only symbols.
- */
- // eslint-disable-next-line max-statements -- TODO
- var encode = function (input) {
- var output = [];
-
- // Convert the input in UCS-2 to an array of Unicode code points.
- input = ucs2decode(input);
-
- // Cache the length.
- var inputLength = input.length;
-
- // Initialize the state.
- var n = initialN;
- var delta = 0;
- var bias = initialBias;
- var i, currentValue;
-
- // Handle the basic code points.
- for (i = 0; i < input.length; i++) {
- currentValue = input[i];
- if (currentValue < 0x80) {
- output.push(stringFromCharCode(currentValue));
- }
- }
-
- var basicLength = output.length; // number of basic code points.
- var handledCPCount = basicLength; // number of code points that have been handled;
-
- // Finish the basic string with a delimiter unless it's empty.
- if (basicLength) {
- output.push(delimiter);
- }
-
- // Main encoding loop:
- while (handledCPCount < inputLength) {
- // All non-basic code points < n have been handled already. Find the next larger one:
- var m = maxInt;
- for (i = 0; i < input.length; i++) {
- currentValue = input[i];
- if (currentValue >= n && currentValue < m) {
- m = currentValue;
- }
- }
-
- // Increase `delta` enough to advance the decoder's state to , but guard against overflow.
- var handledCPCountPlusOne = handledCPCount + 1;
- if (m - n > floor$3((maxInt - delta) / handledCPCountPlusOne)) {
- throw RangeError(OVERFLOW_ERROR);
- }
-
- delta += (m - n) * handledCPCountPlusOne;
- n = m;
-
- for (i = 0; i < input.length; i++) {
- currentValue = input[i];
- if (currentValue < n && ++delta > maxInt) {
- throw RangeError(OVERFLOW_ERROR);
- }
- if (currentValue == n) {
- // Represent delta as a generalized variable-length integer.
- var q = delta;
- for (var k = base; /* no condition */; k += base) {
- var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
- if (q < t) break;
- var qMinusT = q - t;
- var baseMinusT = base - t;
- output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));
- q = floor$3(qMinusT / baseMinusT);
- }
-
- output.push(stringFromCharCode(digitToBasic(q)));
- bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
- delta = 0;
- ++handledCPCount;
- }
- }
-
- ++delta;
- ++n;
- }
- return output.join('');
- };
-
- var stringPunycodeToAscii = function (input) {
- var encoded = [];
- var labels = input.toLowerCase().replace(regexSeparators, '\u002E').split('.');
- var i, label;
- for (i = 0; i < labels.length; i++) {
- label = labels[i];
- encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);
- }
- return encoded.join('.');
- };
-
- var anObject$9 = anObject$m;
- var getIteratorMethod$1 = getIteratorMethod$5;
-
- var getIterator$1 = function (it) {
- var iteratorMethod = getIteratorMethod$1(it);
- if (typeof iteratorMethod != 'function') {
- throw TypeError(String(it) + ' is not iterable');
- } return anObject$9(iteratorMethod.call(it));
- };
-
// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
- var $$R = _export;
- var getBuiltIn$2 = getBuiltIn$9;
+ var $$X = _export;
+ var global$n = global$1m;
+ var getBuiltIn$2 = getBuiltIn$b;
+ var call$a = functionCall;
+ var uncurryThis$u = functionUncurryThis;
var USE_NATIVE_URL$1 = nativeUrl;
- var redefine$7 = redefine$g.exports;
+ var redefine$7 = redefine$h.exports;
var redefineAll$1 = redefineAll$4;
var setToStringTag$4 = setToStringTag$a;
var createIteratorConstructor = createIteratorConstructor$2;
var InternalStateModule$2 = internalState;
var anInstance$3 = anInstance$7;
- var hasOwn = has$j;
- var bind$5 = functionBindContext;
- var classof$4 = classof$b;
- var anObject$8 = anObject$m;
- var isObject$c = isObject$r;
- var create$8 = objectCreate;
+ var isCallable$5 = isCallable$r;
+ var hasOwn$6 = hasOwnProperty_1;
+ var bind$8 = functionBindContext;
+ var classof$3 = classof$d;
+ var anObject$9 = anObject$n;
+ var isObject$d = isObject$s;
+ var $toString$2 = toString$k;
+ var create$6 = objectCreate;
var createPropertyDescriptor = createPropertyDescriptor$7;
- var getIterator = getIterator$1;
- var getIteratorMethod = getIteratorMethod$5;
- var wellKnownSymbol$6 = wellKnownSymbol$s;
+ var getIterator$1 = getIterator$4;
+ var getIteratorMethod$1 = getIteratorMethod$5;
+ var wellKnownSymbol$6 = wellKnownSymbol$t;
+ var arraySort = arraySort$1;
- var $fetch = getBuiltIn$2('fetch');
- var Headers$1 = getBuiltIn$2('Headers');
- var ITERATOR = wellKnownSymbol$6('iterator');
+ var ITERATOR$2 = wellKnownSymbol$6('iterator');
var URL_SEARCH_PARAMS = 'URLSearchParams';
var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';
var setInternalState$2 = InternalStateModule$2.set;
var getInternalParamsState = InternalStateModule$2.getterFor(URL_SEARCH_PARAMS);
var getInternalIteratorState = InternalStateModule$2.getterFor(URL_SEARCH_PARAMS_ITERATOR);
+ var n$Fetch = getBuiltIn$2('fetch');
+ var N$Request = getBuiltIn$2('Request');
+ var Headers$1 = getBuiltIn$2('Headers');
+ var RequestPrototype = N$Request && N$Request.prototype;
+ var HeadersPrototype = Headers$1 && Headers$1.prototype;
+ var RegExp$1 = global$n.RegExp;
+ var TypeError$8 = global$n.TypeError;
+ var decodeURIComponent$1 = global$n.decodeURIComponent;
+ var encodeURIComponent$1 = global$n.encodeURIComponent;
+ var charAt$5 = uncurryThis$u(''.charAt);
+ var join$4 = uncurryThis$u([].join);
+ var push$7 = uncurryThis$u([].push);
+ var replace$6 = uncurryThis$u(''.replace);
+ var shift$1 = uncurryThis$u([].shift);
+ var splice = uncurryThis$u([].splice);
+ var split$3 = uncurryThis$u(''.split);
+ var stringSlice$8 = uncurryThis$u(''.slice);
+
var plus = /\+/g;
var sequences = Array(4);
var percentSequence = function (bytes) {
- return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\da-f]{2}){' + bytes + '})', 'gi'));
+ return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp$1('((?:%[\\da-f]{2}){' + bytes + '})', 'gi'));
};
var percentDecode = function (sequence) {
try {
- return decodeURIComponent(sequence);
+ return decodeURIComponent$1(sequence);
} catch (error) {
return sequence;
}
};
var deserialize = function (it) {
- var result = it.replace(plus, ' ');
+ var result = replace$6(it, plus, ' ');
var bytes = 4;
try {
- return decodeURIComponent(result);
+ return decodeURIComponent$1(result);
} catch (error) {
while (bytes) {
- result = result.replace(percentSequence(bytes--), percentDecode);
+ result = replace$6(result, percentSequence(bytes--), percentDecode);
}
return result;
}
@@ -5009,7 +5465,7 @@
var find$1 = /[!'()~]|%20/g;
- var replace$1 = {
+ var replacements = {
'!': '%21',
"'": '%27',
'(': '%28',
@@ -5019,25 +5475,25 @@
};
var replacer = function (match) {
- return replace$1[match];
+ return replacements[match];
};
var serialize = function (it) {
- return encodeURIComponent(it).replace(find$1, replacer);
+ return replace$6(encodeURIComponent$1(it), find$1, replacer);
};
var parseSearchParams = function (result, query) {
if (query) {
- var attributes = query.split('&');
+ var attributes = split$3(query, '&');
var index = 0;
var attribute, entry;
while (index < attributes.length) {
attribute = attributes[index++];
if (attribute.length) {
- entry = attribute.split('=');
- result.push({
- key: deserialize(entry.shift()),
- value: deserialize(entry.join('='))
+ entry = split$3(attribute, '=');
+ push$7(result, {
+ key: deserialize(shift$1(entry)),
+ value: deserialize(join$4(entry, '='))
});
}
}
@@ -5050,13 +5506,13 @@
};
var validateArgumentsLength = function (passed, required) {
- if (passed < required) throw TypeError('Not enough arguments');
+ if (passed < required) throw TypeError$8('Not enough arguments');
};
var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {
setInternalState$2(this, {
type: URL_SEARCH_PARAMS_ITERATOR,
- iterator: getIterator(getInternalParamsState(params).entries),
+ iterator: getIterator$1(getInternalParamsState(params).entries),
kind: kind
});
}, 'Iterator', function next() {
@@ -5072,7 +5528,7 @@
// `URLSearchParams` constructor
// https://url.spec.whatwg.org/#interface-urlsearchparams
var URLSearchParamsConstructor = function URLSearchParams(/* init */) {
- anInstance$3(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);
+ anInstance$3(this, URLSearchParamsPrototype);
var init = arguments.length > 0 ? arguments[0] : undefined;
var that = this;
var entries = [];
@@ -5086,24 +5542,27 @@
});
if (init !== undefined) {
- if (isObject$c(init)) {
- iteratorMethod = getIteratorMethod(init);
- if (typeof iteratorMethod === 'function') {
- iterator = iteratorMethod.call(init);
+ if (isObject$d(init)) {
+ iteratorMethod = getIteratorMethod$1(init);
+ if (iteratorMethod) {
+ iterator = getIterator$1(init, iteratorMethod);
next = iterator.next;
- while (!(step = next.call(iterator)).done) {
- entryIterator = getIterator(anObject$8(step.value));
+ while (!(step = call$a(next, iterator)).done) {
+ entryIterator = getIterator$1(anObject$9(step.value));
entryNext = entryIterator.next;
if (
- (first = entryNext.call(entryIterator)).done ||
- (second = entryNext.call(entryIterator)).done ||
- !entryNext.call(entryIterator).done
- ) throw TypeError('Expected sequence with length 2');
- entries.push({ key: first.value + '', value: second.value + '' });
+ (first = call$a(entryNext, entryIterator)).done ||
+ (second = call$a(entryNext, entryIterator)).done ||
+ !call$a(entryNext, entryIterator).done
+ ) throw TypeError$8('Expected sequence with length 2');
+ push$7(entries, { key: $toString$2(first.value), value: $toString$2(second.value) });
}
- } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });
+ } else for (key in init) if (hasOwn$6(init, key)) push$7(entries, { key: key, value: $toString$2(init[key]) });
} else {
- parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');
+ parseSearchParams(
+ entries,
+ typeof init == 'string' ? charAt$5(init, 0) === '?' ? stringSlice$8(init, 1) : init : $toString$2(init)
+ );
}
}
};
@@ -5116,7 +5575,7 @@
append: function append(name, value) {
validateArgumentsLength(arguments.length, 2);
var state = getInternalParamsState(this);
- state.entries.push({ key: name + '', value: value + '' });
+ push$7(state.entries, { key: $toString$2(name), value: $toString$2(value) });
state.updateURL();
},
// `URLSearchParams.prototype.delete` method
@@ -5125,10 +5584,10 @@
validateArgumentsLength(arguments.length, 1);
var state = getInternalParamsState(this);
var entries = state.entries;
- var key = name + '';
+ var key = $toString$2(name);
var index = 0;
while (index < entries.length) {
- if (entries[index].key === key) entries.splice(index, 1);
+ if (entries[index].key === key) splice(entries, index, 1);
else index++;
}
state.updateURL();
@@ -5138,7 +5597,7 @@
get: function get(name) {
validateArgumentsLength(arguments.length, 1);
var entries = getInternalParamsState(this).entries;
- var key = name + '';
+ var key = $toString$2(name);
var index = 0;
for (; index < entries.length; index++) {
if (entries[index].key === key) return entries[index].value;
@@ -5150,11 +5609,11 @@
getAll: function getAll(name) {
validateArgumentsLength(arguments.length, 1);
var entries = getInternalParamsState(this).entries;
- var key = name + '';
+ var key = $toString$2(name);
var result = [];
var index = 0;
for (; index < entries.length; index++) {
- if (entries[index].key === key) result.push(entries[index].value);
+ if (entries[index].key === key) push$7(result, entries[index].value);
}
return result;
},
@@ -5163,7 +5622,7 @@
has: function has(name) {
validateArgumentsLength(arguments.length, 1);
var entries = getInternalParamsState(this).entries;
- var key = name + '';
+ var key = $toString$2(name);
var index = 0;
while (index < entries.length) {
if (entries[index++].key === key) return true;
@@ -5177,48 +5636,36 @@
var state = getInternalParamsState(this);
var entries = state.entries;
var found = false;
- var key = name + '';
- var val = value + '';
+ var key = $toString$2(name);
+ var val = $toString$2(value);
var index = 0;
var entry;
for (; index < entries.length; index++) {
entry = entries[index];
if (entry.key === key) {
- if (found) entries.splice(index--, 1);
+ if (found) splice(entries, index--, 1);
else {
found = true;
entry.value = val;
}
}
}
- if (!found) entries.push({ key: key, value: val });
+ if (!found) push$7(entries, { key: key, value: val });
state.updateURL();
},
// `URLSearchParams.prototype.sort` method
// https://url.spec.whatwg.org/#dom-urlsearchparams-sort
sort: function sort() {
var state = getInternalParamsState(this);
- var entries = state.entries;
- // Array#sort is not stable in some engines
- var slice = entries.slice();
- var entry, entriesIndex, sliceIndex;
- entries.length = 0;
- for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {
- entry = slice[sliceIndex];
- for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {
- if (entries[entriesIndex].key > entry.key) {
- entries.splice(entriesIndex, 0, entry);
- break;
- }
- }
- if (entriesIndex === sliceIndex) entries.push(entry);
- }
+ arraySort(state.entries, function (a, b) {
+ return a.key > b.key ? 1 : -1;
+ });
state.updateURL();
},
// `URLSearchParams.prototype.forEach` method
forEach: function forEach(callback /* , thisArg */) {
var entries = getInternalParamsState(this).entries;
- var boundFunction = bind$5(callback, arguments.length > 1 ? arguments[1] : undefined, 3);
+ var boundFunction = bind$8(callback, arguments.length > 1 ? arguments[1] : undefined);
var index = 0;
var entry;
while (index < entries.length) {
@@ -5241,7 +5688,7 @@
}, { enumerable: true });
// `URLSearchParams.prototype[@@iterator]` method
- redefine$7(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);
+ redefine$7(URLSearchParamsPrototype, ITERATOR$2, URLSearchParamsPrototype.entries, { name: 'entries' });
// `URLSearchParams.prototype.toString` method
// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior
@@ -5252,42 +5699,59 @@
var entry;
while (index < entries.length) {
entry = entries[index++];
- result.push(serialize(entry.key) + '=' + serialize(entry.value));
- } return result.join('&');
+ push$7(result, serialize(entry.key) + '=' + serialize(entry.value));
+ } return join$4(result, '&');
}, { enumerable: true });
setToStringTag$4(URLSearchParamsConstructor, URL_SEARCH_PARAMS);
- $$R({ global: true, forced: !USE_NATIVE_URL$1 }, {
+ $$X({ global: true, forced: !USE_NATIVE_URL$1 }, {
URLSearchParams: URLSearchParamsConstructor
});
- // Wrap `fetch` for correct work with polyfilled `URLSearchParams`
- // https://github.com/zloirock/core-js/issues/674
- if (!USE_NATIVE_URL$1 && typeof $fetch == 'function' && typeof Headers$1 == 'function') {
- $$R({ global: true, enumerable: true, forced: true }, {
- fetch: function fetch(input /* , init */) {
- var args = [input];
- var init, body, headers;
- if (arguments.length > 1) {
- init = arguments[1];
- if (isObject$c(init)) {
- body = init.body;
- if (classof$4(body) === URL_SEARCH_PARAMS) {
- headers = init.headers ? new Headers$1(init.headers) : new Headers$1();
- if (!headers.has('content-type')) {
- headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
- }
- init = create$8(init, {
- body: createPropertyDescriptor(0, String(body)),
- headers: createPropertyDescriptor(0, headers)
- });
- }
+ // Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`
+ if (!USE_NATIVE_URL$1 && isCallable$5(Headers$1)) {
+ var headersHas = uncurryThis$u(HeadersPrototype.has);
+ var headersSet = uncurryThis$u(HeadersPrototype.set);
+
+ var wrapRequestOptions = function (init) {
+ if (isObject$d(init)) {
+ var body = init.body;
+ var headers;
+ if (classof$3(body) === URL_SEARCH_PARAMS) {
+ headers = init.headers ? new Headers$1(init.headers) : new Headers$1();
+ if (!headersHas(headers, 'content-type')) {
+ headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
}
- args.push(init);
- } return $fetch.apply(this, args);
- }
- });
+ return create$6(init, {
+ body: createPropertyDescriptor(0, $toString$2(body)),
+ headers: createPropertyDescriptor(0, headers)
+ });
+ }
+ } return init;
+ };
+
+ if (isCallable$5(n$Fetch)) {
+ $$X({ global: true, enumerable: true, forced: true }, {
+ fetch: function fetch(input /* , init */) {
+ return n$Fetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
+ }
+ });
+ }
+
+ if (isCallable$5(N$Request)) {
+ var RequestConstructor = function Request(input /* , init */) {
+ anInstance$3(this, RequestPrototype);
+ return new N$Request(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
+ };
+
+ RequestPrototype.constructor = RequestConstructor;
+ RequestConstructor.prototype = RequestPrototype;
+
+ $$X({ global: true, forced: true }, {
+ Request: RequestConstructor
+ });
+ }
}
var web_urlSearchParams = {
@@ -5295,1234 +5759,59 @@
getState: getInternalParamsState
};
- // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
-
- var $$Q = _export;
- var DESCRIPTORS$a = descriptors;
- var USE_NATIVE_URL = nativeUrl;
- var global$a = global$F;
- var defineProperties$1 = objectDefineProperties;
- var redefine$6 = redefine$g.exports;
- var anInstance$2 = anInstance$7;
- var has$4 = has$j;
- var assign$2 = objectAssign;
- var arrayFrom = arrayFrom$1;
- var codeAt = stringMultibyte.codeAt;
- var toASCII = stringPunycodeToAscii;
- var setToStringTag$3 = setToStringTag$a;
- var URLSearchParamsModule = web_urlSearchParams;
- var InternalStateModule$1 = internalState;
-
- var NativeURL = global$a.URL;
- var URLSearchParams$1 = URLSearchParamsModule.URLSearchParams;
- var getInternalSearchParamsState = URLSearchParamsModule.getState;
- var setInternalState$1 = InternalStateModule$1.set;
- var getInternalURLState = InternalStateModule$1.getterFor('URL');
- var floor$2 = Math.floor;
- var pow$1 = Math.pow;
-
- var INVALID_AUTHORITY = 'Invalid authority';
- var INVALID_SCHEME = 'Invalid scheme';
- var INVALID_HOST = 'Invalid host';
- var INVALID_PORT = 'Invalid port';
-
- var ALPHA = /[A-Za-z]/;
- // eslint-disable-next-line regexp/no-obscure-range -- safe
- var ALPHANUMERIC = /[\d+-.A-Za-z]/;
- var DIGIT = /\d/;
- var HEX_START = /^0x/i;
- var OCT = /^[0-7]+$/;
- var DEC = /^\d+$/;
- var HEX = /^[\dA-Fa-f]+$/;
- /* eslint-disable no-control-regex -- safe */
- var FORBIDDEN_HOST_CODE_POINT = /[\0\t\n\r #%/:<>?@[\\\]^|]/;
- var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\0\t\n\r #/:<>?@[\\\]^|]/;
- var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g;
- var TAB_AND_NEW_LINE = /[\t\n\r]/g;
- /* eslint-enable no-control-regex -- safe */
- var EOF;
-
- var parseHost = function (url, input) {
- var result, codePoints, index;
- if (input.charAt(0) == '[') {
- if (input.charAt(input.length - 1) != ']') return INVALID_HOST;
- result = parseIPv6(input.slice(1, -1));
- if (!result) return INVALID_HOST;
- url.host = result;
- // opaque host
- } else if (!isSpecial(url)) {
- if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;
- result = '';
- codePoints = arrayFrom(input);
- for (index = 0; index < codePoints.length; index++) {
- result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);
- }
- url.host = result;
- } else {
- input = toASCII(input);
- if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;
- result = parseIPv4(input);
- if (result === null) return INVALID_HOST;
- url.host = result;
- }
- };
-
- var parseIPv4 = function (input) {
- var parts = input.split('.');
- var partsLength, numbers, index, part, radix, number, ipv4;
- if (parts.length && parts[parts.length - 1] == '') {
- parts.pop();
- }
- partsLength = parts.length;
- if (partsLength > 4) return input;
- numbers = [];
- for (index = 0; index < partsLength; index++) {
- part = parts[index];
- if (part == '') return input;
- radix = 10;
- if (part.length > 1 && part.charAt(0) == '0') {
- radix = HEX_START.test(part) ? 16 : 8;
- part = part.slice(radix == 8 ? 1 : 2);
- }
- if (part === '') {
- number = 0;
- } else {
- if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;
- number = parseInt(part, radix);
- }
- numbers.push(number);
- }
- for (index = 0; index < partsLength; index++) {
- number = numbers[index];
- if (index == partsLength - 1) {
- if (number >= pow$1(256, 5 - partsLength)) return null;
- } else if (number > 255) return null;
- }
- ipv4 = numbers.pop();
- for (index = 0; index < numbers.length; index++) {
- ipv4 += numbers[index] * pow$1(256, 3 - index);
- }
- return ipv4;
- };
-
- // eslint-disable-next-line max-statements -- TODO
- var parseIPv6 = function (input) {
- var address = [0, 0, 0, 0, 0, 0, 0, 0];
- var pieceIndex = 0;
- var compress = null;
- var pointer = 0;
- var value, length, numbersSeen, ipv4Piece, number, swaps, swap;
-
- var char = function () {
- return input.charAt(pointer);
- };
-
- if (char() == ':') {
- if (input.charAt(1) != ':') return;
- pointer += 2;
- pieceIndex++;
- compress = pieceIndex;
- }
- while (char()) {
- if (pieceIndex == 8) return;
- if (char() == ':') {
- if (compress !== null) return;
- pointer++;
- pieceIndex++;
- compress = pieceIndex;
- continue;
- }
- value = length = 0;
- while (length < 4 && HEX.test(char())) {
- value = value * 16 + parseInt(char(), 16);
- pointer++;
- length++;
- }
- if (char() == '.') {
- if (length == 0) return;
- pointer -= length;
- if (pieceIndex > 6) return;
- numbersSeen = 0;
- while (char()) {
- ipv4Piece = null;
- if (numbersSeen > 0) {
- if (char() == '.' && numbersSeen < 4) pointer++;
- else return;
- }
- if (!DIGIT.test(char())) return;
- while (DIGIT.test(char())) {
- number = parseInt(char(), 10);
- if (ipv4Piece === null) ipv4Piece = number;
- else if (ipv4Piece == 0) return;
- else ipv4Piece = ipv4Piece * 10 + number;
- if (ipv4Piece > 255) return;
- pointer++;
- }
- address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;
- numbersSeen++;
- if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;
- }
- if (numbersSeen != 4) return;
- break;
- } else if (char() == ':') {
- pointer++;
- if (!char()) return;
- } else if (char()) return;
- address[pieceIndex++] = value;
- }
- if (compress !== null) {
- swaps = pieceIndex - compress;
- pieceIndex = 7;
- while (pieceIndex != 0 && swaps > 0) {
- swap = address[pieceIndex];
- address[pieceIndex--] = address[compress + swaps - 1];
- address[compress + --swaps] = swap;
- }
- } else if (pieceIndex != 8) return;
- return address;
- };
-
- var findLongestZeroSequence = function (ipv6) {
- var maxIndex = null;
- var maxLength = 1;
- var currStart = null;
- var currLength = 0;
- var index = 0;
- for (; index < 8; index++) {
- if (ipv6[index] !== 0) {
- if (currLength > maxLength) {
- maxIndex = currStart;
- maxLength = currLength;
- }
- currStart = null;
- currLength = 0;
- } else {
- if (currStart === null) currStart = index;
- ++currLength;
- }
- }
- if (currLength > maxLength) {
- maxIndex = currStart;
- maxLength = currLength;
- }
- return maxIndex;
- };
-
- var serializeHost = function (host) {
- var result, index, compress, ignore0;
- // ipv4
- if (typeof host == 'number') {
- result = [];
- for (index = 0; index < 4; index++) {
- result.unshift(host % 256);
- host = floor$2(host / 256);
- } return result.join('.');
- // ipv6
- } else if (typeof host == 'object') {
- result = '';
- compress = findLongestZeroSequence(host);
- for (index = 0; index < 8; index++) {
- if (ignore0 && host[index] === 0) continue;
- if (ignore0) ignore0 = false;
- if (compress === index) {
- result += index ? ':' : '::';
- ignore0 = true;
- } else {
- result += host[index].toString(16);
- if (index < 7) result += ':';
- }
- }
- return '[' + result + ']';
- } return host;
- };
-
- var C0ControlPercentEncodeSet = {};
- var fragmentPercentEncodeSet = assign$2({}, C0ControlPercentEncodeSet, {
- ' ': 1, '"': 1, '<': 1, '>': 1, '`': 1
- });
- var pathPercentEncodeSet = assign$2({}, fragmentPercentEncodeSet, {
- '#': 1, '?': 1, '{': 1, '}': 1
- });
- var userinfoPercentEncodeSet = assign$2({}, pathPercentEncodeSet, {
- '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1
- });
-
- var percentEncode = function (char, set) {
- var code = codeAt(char, 0);
- return code > 0x20 && code < 0x7F && !has$4(set, char) ? char : encodeURIComponent(char);
- };
-
- var specialSchemes = {
- ftp: 21,
- file: null,
- http: 80,
- https: 443,
- ws: 80,
- wss: 443
- };
-
- var isSpecial = function (url) {
- return has$4(specialSchemes, url.scheme);
- };
-
- var includesCredentials = function (url) {
- return url.username != '' || url.password != '';
- };
-
- var cannotHaveUsernamePasswordPort = function (url) {
- return !url.host || url.cannotBeABaseURL || url.scheme == 'file';
- };
-
- var isWindowsDriveLetter = function (string, normalized) {
- var second;
- return string.length == 2 && ALPHA.test(string.charAt(0))
- && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));
- };
-
- var startsWithWindowsDriveLetter = function (string) {
- var third;
- return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (
- string.length == 2 ||
- ((third = string.charAt(2)) === '/' || third === '\\' || third === '?' || third === '#')
- );
- };
-
- var shortenURLsPath = function (url) {
- var path = url.path;
- var pathSize = path.length;
- if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {
- path.pop();
- }
- };
-
- var isSingleDot = function (segment) {
- return segment === '.' || segment.toLowerCase() === '%2e';
- };
-
- var isDoubleDot = function (segment) {
- segment = segment.toLowerCase();
- return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';
- };
-
- // States:
- var SCHEME_START = {};
- var SCHEME = {};
- var NO_SCHEME = {};
- var SPECIAL_RELATIVE_OR_AUTHORITY = {};
- var PATH_OR_AUTHORITY = {};
- var RELATIVE = {};
- var RELATIVE_SLASH = {};
- var SPECIAL_AUTHORITY_SLASHES = {};
- var SPECIAL_AUTHORITY_IGNORE_SLASHES = {};
- var AUTHORITY = {};
- var HOST = {};
- var HOSTNAME = {};
- var PORT = {};
- var FILE = {};
- var FILE_SLASH = {};
- var FILE_HOST = {};
- var PATH_START = {};
- var PATH = {};
- var CANNOT_BE_A_BASE_URL_PATH = {};
- var QUERY = {};
- var FRAGMENT = {};
-
- // eslint-disable-next-line max-statements -- TODO
- var parseURL = function (url, input, stateOverride, base) {
- var state = stateOverride || SCHEME_START;
- var pointer = 0;
- var buffer = '';
- var seenAt = false;
- var seenBracket = false;
- var seenPasswordToken = false;
- var codePoints, char, bufferCodePoints, failure;
-
- if (!stateOverride) {
- url.scheme = '';
- url.username = '';
- url.password = '';
- url.host = null;
- url.port = null;
- url.path = [];
- url.query = null;
- url.fragment = null;
- url.cannotBeABaseURL = false;
- input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');
- }
-
- input = input.replace(TAB_AND_NEW_LINE, '');
-
- codePoints = arrayFrom(input);
-
- while (pointer <= codePoints.length) {
- char = codePoints[pointer];
- switch (state) {
- case SCHEME_START:
- if (char && ALPHA.test(char)) {
- buffer += char.toLowerCase();
- state = SCHEME;
- } else if (!stateOverride) {
- state = NO_SCHEME;
- continue;
- } else return INVALID_SCHEME;
- break;
-
- case SCHEME:
- if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {
- buffer += char.toLowerCase();
- } else if (char == ':') {
- if (stateOverride && (
- (isSpecial(url) != has$4(specialSchemes, buffer)) ||
- (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||
- (url.scheme == 'file' && !url.host)
- )) return;
- url.scheme = buffer;
- if (stateOverride) {
- if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;
- return;
- }
- buffer = '';
- if (url.scheme == 'file') {
- state = FILE;
- } else if (isSpecial(url) && base && base.scheme == url.scheme) {
- state = SPECIAL_RELATIVE_OR_AUTHORITY;
- } else if (isSpecial(url)) {
- state = SPECIAL_AUTHORITY_SLASHES;
- } else if (codePoints[pointer + 1] == '/') {
- state = PATH_OR_AUTHORITY;
- pointer++;
- } else {
- url.cannotBeABaseURL = true;
- url.path.push('');
- state = CANNOT_BE_A_BASE_URL_PATH;
- }
- } else if (!stateOverride) {
- buffer = '';
- state = NO_SCHEME;
- pointer = 0;
- continue;
- } else return INVALID_SCHEME;
- break;
-
- case NO_SCHEME:
- if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;
- if (base.cannotBeABaseURL && char == '#') {
- url.scheme = base.scheme;
- url.path = base.path.slice();
- url.query = base.query;
- url.fragment = '';
- url.cannotBeABaseURL = true;
- state = FRAGMENT;
- break;
- }
- state = base.scheme == 'file' ? FILE : RELATIVE;
- continue;
-
- case SPECIAL_RELATIVE_OR_AUTHORITY:
- if (char == '/' && codePoints[pointer + 1] == '/') {
- state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
- pointer++;
- } else {
- state = RELATIVE;
- continue;
- } break;
-
- case PATH_OR_AUTHORITY:
- if (char == '/') {
- state = AUTHORITY;
- break;
- } else {
- state = PATH;
- continue;
- }
-
- case RELATIVE:
- url.scheme = base.scheme;
- if (char == EOF) {
- url.username = base.username;
- url.password = base.password;
- url.host = base.host;
- url.port = base.port;
- url.path = base.path.slice();
- url.query = base.query;
- } else if (char == '/' || (char == '\\' && isSpecial(url))) {
- state = RELATIVE_SLASH;
- } else if (char == '?') {
- url.username = base.username;
- url.password = base.password;
- url.host = base.host;
- url.port = base.port;
- url.path = base.path.slice();
- url.query = '';
- state = QUERY;
- } else if (char == '#') {
- url.username = base.username;
- url.password = base.password;
- url.host = base.host;
- url.port = base.port;
- url.path = base.path.slice();
- url.query = base.query;
- url.fragment = '';
- state = FRAGMENT;
- } else {
- url.username = base.username;
- url.password = base.password;
- url.host = base.host;
- url.port = base.port;
- url.path = base.path.slice();
- url.path.pop();
- state = PATH;
- continue;
- } break;
-
- case RELATIVE_SLASH:
- if (isSpecial(url) && (char == '/' || char == '\\')) {
- state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
- } else if (char == '/') {
- state = AUTHORITY;
- } else {
- url.username = base.username;
- url.password = base.password;
- url.host = base.host;
- url.port = base.port;
- state = PATH;
- continue;
- } break;
-
- case SPECIAL_AUTHORITY_SLASHES:
- state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
- if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;
- pointer++;
- break;
-
- case SPECIAL_AUTHORITY_IGNORE_SLASHES:
- if (char != '/' && char != '\\') {
- state = AUTHORITY;
- continue;
- } break;
-
- case AUTHORITY:
- if (char == '@') {
- if (seenAt) buffer = '%40' + buffer;
- seenAt = true;
- bufferCodePoints = arrayFrom(buffer);
- for (var i = 0; i < bufferCodePoints.length; i++) {
- var codePoint = bufferCodePoints[i];
- if (codePoint == ':' && !seenPasswordToken) {
- seenPasswordToken = true;
- continue;
- }
- var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);
- if (seenPasswordToken) url.password += encodedCodePoints;
- else url.username += encodedCodePoints;
- }
- buffer = '';
- } else if (
- char == EOF || char == '/' || char == '?' || char == '#' ||
- (char == '\\' && isSpecial(url))
- ) {
- if (seenAt && buffer == '') return INVALID_AUTHORITY;
- pointer -= arrayFrom(buffer).length + 1;
- buffer = '';
- state = HOST;
- } else buffer += char;
- break;
-
- case HOST:
- case HOSTNAME:
- if (stateOverride && url.scheme == 'file') {
- state = FILE_HOST;
- continue;
- } else if (char == ':' && !seenBracket) {
- if (buffer == '') return INVALID_HOST;
- failure = parseHost(url, buffer);
- if (failure) return failure;
- buffer = '';
- state = PORT;
- if (stateOverride == HOSTNAME) return;
- } else if (
- char == EOF || char == '/' || char == '?' || char == '#' ||
- (char == '\\' && isSpecial(url))
- ) {
- if (isSpecial(url) && buffer == '') return INVALID_HOST;
- if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;
- failure = parseHost(url, buffer);
- if (failure) return failure;
- buffer = '';
- state = PATH_START;
- if (stateOverride) return;
- continue;
- } else {
- if (char == '[') seenBracket = true;
- else if (char == ']') seenBracket = false;
- buffer += char;
- } break;
-
- case PORT:
- if (DIGIT.test(char)) {
- buffer += char;
- } else if (
- char == EOF || char == '/' || char == '?' || char == '#' ||
- (char == '\\' && isSpecial(url)) ||
- stateOverride
- ) {
- if (buffer != '') {
- var port = parseInt(buffer, 10);
- if (port > 0xFFFF) return INVALID_PORT;
- url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;
- buffer = '';
- }
- if (stateOverride) return;
- state = PATH_START;
- continue;
- } else return INVALID_PORT;
- break;
-
- case FILE:
- url.scheme = 'file';
- if (char == '/' || char == '\\') state = FILE_SLASH;
- else if (base && base.scheme == 'file') {
- if (char == EOF) {
- url.host = base.host;
- url.path = base.path.slice();
- url.query = base.query;
- } else if (char == '?') {
- url.host = base.host;
- url.path = base.path.slice();
- url.query = '';
- state = QUERY;
- } else if (char == '#') {
- url.host = base.host;
- url.path = base.path.slice();
- url.query = base.query;
- url.fragment = '';
- state = FRAGMENT;
- } else {
- if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {
- url.host = base.host;
- url.path = base.path.slice();
- shortenURLsPath(url);
- }
- state = PATH;
- continue;
- }
- } else {
- state = PATH;
- continue;
- } break;
-
- case FILE_SLASH:
- if (char == '/' || char == '\\') {
- state = FILE_HOST;
- break;
- }
- if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {
- if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);
- else url.host = base.host;
- }
- state = PATH;
- continue;
-
- case FILE_HOST:
- if (char == EOF || char == '/' || char == '\\' || char == '?' || char == '#') {
- if (!stateOverride && isWindowsDriveLetter(buffer)) {
- state = PATH;
- } else if (buffer == '') {
- url.host = '';
- if (stateOverride) return;
- state = PATH_START;
- } else {
- failure = parseHost(url, buffer);
- if (failure) return failure;
- if (url.host == 'localhost') url.host = '';
- if (stateOverride) return;
- buffer = '';
- state = PATH_START;
- } continue;
- } else buffer += char;
- break;
-
- case PATH_START:
- if (isSpecial(url)) {
- state = PATH;
- if (char != '/' && char != '\\') continue;
- } else if (!stateOverride && char == '?') {
- url.query = '';
- state = QUERY;
- } else if (!stateOverride && char == '#') {
- url.fragment = '';
- state = FRAGMENT;
- } else if (char != EOF) {
- state = PATH;
- if (char != '/') continue;
- } break;
-
- case PATH:
- if (
- char == EOF || char == '/' ||
- (char == '\\' && isSpecial(url)) ||
- (!stateOverride && (char == '?' || char == '#'))
- ) {
- if (isDoubleDot(buffer)) {
- shortenURLsPath(url);
- if (char != '/' && !(char == '\\' && isSpecial(url))) {
- url.path.push('');
- }
- } else if (isSingleDot(buffer)) {
- if (char != '/' && !(char == '\\' && isSpecial(url))) {
- url.path.push('');
- }
- } else {
- if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {
- if (url.host) url.host = '';
- buffer = buffer.charAt(0) + ':'; // normalize windows drive letter
- }
- url.path.push(buffer);
- }
- buffer = '';
- if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {
- while (url.path.length > 1 && url.path[0] === '') {
- url.path.shift();
- }
- }
- if (char == '?') {
- url.query = '';
- state = QUERY;
- } else if (char == '#') {
- url.fragment = '';
- state = FRAGMENT;
- }
- } else {
- buffer += percentEncode(char, pathPercentEncodeSet);
- } break;
-
- case CANNOT_BE_A_BASE_URL_PATH:
- if (char == '?') {
- url.query = '';
- state = QUERY;
- } else if (char == '#') {
- url.fragment = '';
- state = FRAGMENT;
- } else if (char != EOF) {
- url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);
- } break;
-
- case QUERY:
- if (!stateOverride && char == '#') {
- url.fragment = '';
- state = FRAGMENT;
- } else if (char != EOF) {
- if (char == "'" && isSpecial(url)) url.query += '%27';
- else if (char == '#') url.query += '%23';
- else url.query += percentEncode(char, C0ControlPercentEncodeSet);
- } break;
-
- case FRAGMENT:
- if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);
- break;
- }
-
- pointer++;
- }
- };
-
- // `URL` constructor
- // https://url.spec.whatwg.org/#url-class
- var URLConstructor = function URL(url /* , base */) {
- var that = anInstance$2(this, URLConstructor, 'URL');
- var base = arguments.length > 1 ? arguments[1] : undefined;
- var urlString = String(url);
- var state = setInternalState$1(that, { type: 'URL' });
- var baseState, failure;
- if (base !== undefined) {
- if (base instanceof URLConstructor) baseState = getInternalURLState(base);
- else {
- failure = parseURL(baseState = {}, String(base));
- if (failure) throw TypeError(failure);
- }
- }
- failure = parseURL(state, urlString, null, baseState);
- if (failure) throw TypeError(failure);
- var searchParams = state.searchParams = new URLSearchParams$1();
- var searchParamsState = getInternalSearchParamsState(searchParams);
- searchParamsState.updateSearchParams(state.query);
- searchParamsState.updateURL = function () {
- state.query = String(searchParams) || null;
- };
- if (!DESCRIPTORS$a) {
- that.href = serializeURL.call(that);
- that.origin = getOrigin.call(that);
- that.protocol = getProtocol.call(that);
- that.username = getUsername.call(that);
- that.password = getPassword.call(that);
- that.host = getHost.call(that);
- that.hostname = getHostname.call(that);
- that.port = getPort.call(that);
- that.pathname = getPathname.call(that);
- that.search = getSearch.call(that);
- that.searchParams = getSearchParams.call(that);
- that.hash = getHash.call(that);
- }
- };
-
- var URLPrototype = URLConstructor.prototype;
-
- var serializeURL = function () {
- var url = getInternalURLState(this);
- var scheme = url.scheme;
- var username = url.username;
- var password = url.password;
- var host = url.host;
- var port = url.port;
- var path = url.path;
- var query = url.query;
- var fragment = url.fragment;
- var output = scheme + ':';
- if (host !== null) {
- output += '//';
- if (includesCredentials(url)) {
- output += username + (password ? ':' + password : '') + '@';
- }
- output += serializeHost(host);
- if (port !== null) output += ':' + port;
- } else if (scheme == 'file') output += '//';
- output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';
- if (query !== null) output += '?' + query;
- if (fragment !== null) output += '#' + fragment;
- return output;
- };
-
- var getOrigin = function () {
- var url = getInternalURLState(this);
- var scheme = url.scheme;
- var port = url.port;
- if (scheme == 'blob') try {
- return new URLConstructor(scheme.path[0]).origin;
- } catch (error) {
- return 'null';
- }
- if (scheme == 'file' || !isSpecial(url)) return 'null';
- return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');
- };
-
- var getProtocol = function () {
- return getInternalURLState(this).scheme + ':';
- };
-
- var getUsername = function () {
- return getInternalURLState(this).username;
- };
-
- var getPassword = function () {
- return getInternalURLState(this).password;
- };
-
- var getHost = function () {
- var url = getInternalURLState(this);
- var host = url.host;
- var port = url.port;
- return host === null ? ''
- : port === null ? serializeHost(host)
- : serializeHost(host) + ':' + port;
- };
-
- var getHostname = function () {
- var host = getInternalURLState(this).host;
- return host === null ? '' : serializeHost(host);
- };
-
- var getPort = function () {
- var port = getInternalURLState(this).port;
- return port === null ? '' : String(port);
- };
-
- var getPathname = function () {
- var url = getInternalURLState(this);
- var path = url.path;
- return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';
- };
-
- var getSearch = function () {
- var query = getInternalURLState(this).query;
- return query ? '?' + query : '';
- };
-
- var getSearchParams = function () {
- return getInternalURLState(this).searchParams;
- };
-
- var getHash = function () {
- var fragment = getInternalURLState(this).fragment;
- return fragment ? '#' + fragment : '';
- };
-
- var accessorDescriptor = function (getter, setter) {
- return { get: getter, set: setter, configurable: true, enumerable: true };
- };
-
- if (DESCRIPTORS$a) {
- defineProperties$1(URLPrototype, {
- // `URL.prototype.href` accessors pair
- // https://url.spec.whatwg.org/#dom-url-href
- href: accessorDescriptor(serializeURL, function (href) {
- var url = getInternalURLState(this);
- var urlString = String(href);
- var failure = parseURL(url, urlString);
- if (failure) throw TypeError(failure);
- getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);
- }),
- // `URL.prototype.origin` getter
- // https://url.spec.whatwg.org/#dom-url-origin
- origin: accessorDescriptor(getOrigin),
- // `URL.prototype.protocol` accessors pair
- // https://url.spec.whatwg.org/#dom-url-protocol
- protocol: accessorDescriptor(getProtocol, function (protocol) {
- var url = getInternalURLState(this);
- parseURL(url, String(protocol) + ':', SCHEME_START);
- }),
- // `URL.prototype.username` accessors pair
- // https://url.spec.whatwg.org/#dom-url-username
- username: accessorDescriptor(getUsername, function (username) {
- var url = getInternalURLState(this);
- var codePoints = arrayFrom(String(username));
- if (cannotHaveUsernamePasswordPort(url)) return;
- url.username = '';
- for (var i = 0; i < codePoints.length; i++) {
- url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);
- }
- }),
- // `URL.prototype.password` accessors pair
- // https://url.spec.whatwg.org/#dom-url-password
- password: accessorDescriptor(getPassword, function (password) {
- var url = getInternalURLState(this);
- var codePoints = arrayFrom(String(password));
- if (cannotHaveUsernamePasswordPort(url)) return;
- url.password = '';
- for (var i = 0; i < codePoints.length; i++) {
- url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);
- }
- }),
- // `URL.prototype.host` accessors pair
- // https://url.spec.whatwg.org/#dom-url-host
- host: accessorDescriptor(getHost, function (host) {
- var url = getInternalURLState(this);
- if (url.cannotBeABaseURL) return;
- parseURL(url, String(host), HOST);
- }),
- // `URL.prototype.hostname` accessors pair
- // https://url.spec.whatwg.org/#dom-url-hostname
- hostname: accessorDescriptor(getHostname, function (hostname) {
- var url = getInternalURLState(this);
- if (url.cannotBeABaseURL) return;
- parseURL(url, String(hostname), HOSTNAME);
- }),
- // `URL.prototype.port` accessors pair
- // https://url.spec.whatwg.org/#dom-url-port
- port: accessorDescriptor(getPort, function (port) {
- var url = getInternalURLState(this);
- if (cannotHaveUsernamePasswordPort(url)) return;
- port = String(port);
- if (port == '') url.port = null;
- else parseURL(url, port, PORT);
- }),
- // `URL.prototype.pathname` accessors pair
- // https://url.spec.whatwg.org/#dom-url-pathname
- pathname: accessorDescriptor(getPathname, function (pathname) {
- var url = getInternalURLState(this);
- if (url.cannotBeABaseURL) return;
- url.path = [];
- parseURL(url, pathname + '', PATH_START);
- }),
- // `URL.prototype.search` accessors pair
- // https://url.spec.whatwg.org/#dom-url-search
- search: accessorDescriptor(getSearch, function (search) {
- var url = getInternalURLState(this);
- search = String(search);
- if (search == '') {
- url.query = null;
- } else {
- if ('?' == search.charAt(0)) search = search.slice(1);
- url.query = '';
- parseURL(url, search, QUERY);
- }
- getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);
- }),
- // `URL.prototype.searchParams` getter
- // https://url.spec.whatwg.org/#dom-url-searchparams
- searchParams: accessorDescriptor(getSearchParams),
- // `URL.prototype.hash` accessors pair
- // https://url.spec.whatwg.org/#dom-url-hash
- hash: accessorDescriptor(getHash, function (hash) {
- var url = getInternalURLState(this);
- hash = String(hash);
- if (hash == '') {
- url.fragment = null;
- return;
- }
- if ('#' == hash.charAt(0)) hash = hash.slice(1);
- url.fragment = '';
- parseURL(url, hash, FRAGMENT);
- })
- });
- }
-
- // `URL.prototype.toJSON` method
- // https://url.spec.whatwg.org/#dom-url-tojson
- redefine$6(URLPrototype, 'toJSON', function toJSON() {
- return serializeURL.call(this);
- }, { enumerable: true });
-
- // `URL.prototype.toString` method
- // https://url.spec.whatwg.org/#URL-stringification-behavior
- redefine$6(URLPrototype, 'toString', function toString() {
- return serializeURL.call(this);
- }, { enumerable: true });
-
- if (NativeURL) {
- var nativeCreateObjectURL = NativeURL.createObjectURL;
- var nativeRevokeObjectURL = NativeURL.revokeObjectURL;
- // `URL.createObjectURL` method
- // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
- // eslint-disable-next-line no-unused-vars -- required for `.length`
- if (nativeCreateObjectURL) redefine$6(URLConstructor, 'createObjectURL', function createObjectURL(blob) {
- return nativeCreateObjectURL.apply(NativeURL, arguments);
- });
- // `URL.revokeObjectURL` method
- // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL
- // eslint-disable-next-line no-unused-vars -- required for `.length`
- if (nativeRevokeObjectURL) redefine$6(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {
- return nativeRevokeObjectURL.apply(NativeURL, arguments);
- });
- }
-
- setToStringTag$3(URLConstructor, 'URL');
-
- $$Q({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS$a }, {
- URL: URLConstructor
- });
-
- var anObject$7 = anObject$m;
-
- // `RegExp.prototype.flags` getter implementation
- // https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
- var regexpFlags$1 = function () {
- var that = anObject$7(this);
- var result = '';
- if (that.global) result += 'g';
- if (that.ignoreCase) result += 'i';
- if (that.multiline) result += 'm';
- if (that.dotAll) result += 's';
- if (that.unicode) result += 'u';
- if (that.sticky) result += 'y';
- return result;
- };
-
- var redefine$5 = redefine$g.exports;
- var anObject$6 = anObject$m;
- var fails$q = fails$N;
- var flags = regexpFlags$1;
+ var uncurryThis$t = functionUncurryThis;
+ var PROPER_FUNCTION_NAME$1 = functionName.PROPER;
+ var redefine$6 = redefine$h.exports;
+ var anObject$8 = anObject$n;
+ var isPrototypeOf$2 = objectIsPrototypeOf;
+ var $toString$1 = toString$k;
+ var fails$s = fails$S;
+ var regExpFlags$2 = regexpFlags$1;
var TO_STRING = 'toString';
- var RegExpPrototype$2 = RegExp.prototype;
- var nativeToString = RegExpPrototype$2[TO_STRING];
+ var RegExpPrototype$3 = RegExp.prototype;
+ var n$ToString = RegExpPrototype$3[TO_STRING];
+ var getFlags$1 = uncurryThis$t(regExpFlags$2);
- var NOT_GENERIC = fails$q(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });
+ var NOT_GENERIC = fails$s(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });
// FF44- RegExp#toString has a wrong name
- var INCORRECT_NAME = nativeToString.name != TO_STRING;
+ var INCORRECT_NAME = PROPER_FUNCTION_NAME$1 && n$ToString.name != TO_STRING;
// `RegExp.prototype.toString` method
// https://tc39.es/ecma262/#sec-regexp.prototype.tostring
if (NOT_GENERIC || INCORRECT_NAME) {
- redefine$5(RegExp.prototype, TO_STRING, function toString() {
- var R = anObject$6(this);
- var p = String(R.source);
+ redefine$6(RegExp.prototype, TO_STRING, function toString() {
+ var R = anObject$8(this);
+ var p = $toString$1(R.source);
var rf = R.flags;
- var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype$2) ? flags.call(R) : rf);
+ var f = $toString$1(rf === undefined && isPrototypeOf$2(RegExpPrototype$3, R) && !('flags' in RegExpPrototype$3) ? getFlags$1(R) : rf);
return '/' + p + '/' + f;
}, { unsafe: true });
}
- var regexpStickyHelpers = {};
-
- var fails$p = fails$N;
-
- // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,
- var RE = function (s, f) {
- return RegExp(s, f);
- };
-
- regexpStickyHelpers.UNSUPPORTED_Y = fails$p(function () {
- var re = RE('a', 'y');
- re.lastIndex = 2;
- return re.exec('abcd') != null;
- });
-
- regexpStickyHelpers.BROKEN_CARET = fails$p(function () {
- // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
- var re = RE('^r', 'gy');
- re.lastIndex = 2;
- return re.exec('str') != null;
- });
-
- var fails$o = fails$N;
-
- var regexpUnsupportedDotAll = fails$o(function () {
- // babel-minify transpiles RegExp('.', 's') -> /./s and it causes SyntaxError
- var re = RegExp('.', (typeof '').charAt(0));
- return !(re.dotAll && re.exec('\n') && re.flags === 's');
- });
-
- var fails$n = fails$N;
-
- var regexpUnsupportedNcg = fails$n(function () {
- // babel-minify transpiles RegExp('.', 'g') -> /./g and it causes SyntaxError
- var re = RegExp('(?b)', (typeof '').charAt(5));
- return re.exec('b').groups.a !== 'b' ||
- 'b'.replace(re, '$c') !== 'bc';
- });
-
- /* eslint-disable regexp/no-assertion-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */
- /* eslint-disable regexp/no-useless-quantifier -- testing */
- var regexpFlags = regexpFlags$1;
- var stickyHelpers$2 = regexpStickyHelpers;
- var shared = shared$5.exports;
- var create$7 = objectCreate;
- var getInternalState = internalState.get;
- var UNSUPPORTED_DOT_ALL$1 = regexpUnsupportedDotAll;
- var UNSUPPORTED_NCG$1 = regexpUnsupportedNcg;
-
- var nativeExec = RegExp.prototype.exec;
- var nativeReplace = shared('native-string-replace', String.prototype.replace);
-
- var patchedExec = nativeExec;
-
- var UPDATES_LAST_INDEX_WRONG = (function () {
- var re1 = /a/;
- var re2 = /b*/g;
- nativeExec.call(re1, 'a');
- nativeExec.call(re2, 'a');
- return re1.lastIndex !== 0 || re2.lastIndex !== 0;
- })();
-
- var UNSUPPORTED_Y$2 = stickyHelpers$2.UNSUPPORTED_Y || stickyHelpers$2.BROKEN_CARET;
-
- // nonparticipating capturing group, copied from es5-shim's String#split patch.
- var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
-
- var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$2 || UNSUPPORTED_DOT_ALL$1 || UNSUPPORTED_NCG$1;
-
- if (PATCH) {
- // eslint-disable-next-line max-statements -- TODO
- patchedExec = function exec(str) {
- var re = this;
- var state = getInternalState(re);
- var raw = state.raw;
- var result, reCopy, lastIndex, match, i, object, group;
-
- if (raw) {
- raw.lastIndex = re.lastIndex;
- result = patchedExec.call(raw, str);
- re.lastIndex = raw.lastIndex;
- return result;
- }
-
- var groups = state.groups;
- var sticky = UNSUPPORTED_Y$2 && re.sticky;
- var flags = regexpFlags.call(re);
- var source = re.source;
- var charsAdded = 0;
- var strCopy = str;
-
- if (sticky) {
- flags = flags.replace('y', '');
- if (flags.indexOf('g') === -1) {
- flags += 'g';
- }
-
- strCopy = String(str).slice(re.lastIndex);
- // Support anchored sticky behavior.
- if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) {
- source = '(?: ' + source + ')';
- strCopy = ' ' + strCopy;
- charsAdded++;
- }
- // ^(? + rx + ) is needed, in combination with some str slicing, to
- // simulate the 'y' flag.
- reCopy = new RegExp('^(?:' + source + ')', flags);
- }
-
- if (NPCG_INCLUDED) {
- reCopy = new RegExp('^' + source + '$(?!\\s)', flags);
- }
- if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
-
- match = nativeExec.call(sticky ? reCopy : re, strCopy);
-
- if (sticky) {
- if (match) {
- match.input = match.input.slice(charsAdded);
- match[0] = match[0].slice(charsAdded);
- match.index = re.lastIndex;
- re.lastIndex += match[0].length;
- } else re.lastIndex = 0;
- } else if (UPDATES_LAST_INDEX_WRONG && match) {
- re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
- }
- if (NPCG_INCLUDED && match && match.length > 1) {
- // Fix browsers whose `exec` methods don't consistently return `undefined`
- // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
- nativeReplace.call(match[0], reCopy, function () {
- for (i = 1; i < arguments.length - 2; i++) {
- if (arguments[i] === undefined) match[i] = undefined;
- }
- });
- }
-
- if (match && groups) {
- match.groups = object = create$7(null);
- for (i = 0; i < groups.length; i++) {
- group = groups[i];
- object[group[0]] = match[group[1]];
- }
- }
-
- return match;
- };
- }
-
- var regexpExec$3 = patchedExec;
-
- var $$P = _export;
- var exec = regexpExec$3;
-
- // `RegExp.prototype.exec` method
- // https://tc39.es/ecma262/#sec-regexp.prototype.exec
- $$P({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {
- exec: exec
- });
-
// TODO: Remove from `core-js@4` since it's moved to entry points
- var redefine$4 = redefine$g.exports;
+ var uncurryThis$s = functionUncurryThis;
+ var redefine$5 = redefine$h.exports;
var regexpExec$2 = regexpExec$3;
- var fails$m = fails$N;
- var wellKnownSymbol$5 = wellKnownSymbol$s;
- var createNonEnumerableProperty$1 = createNonEnumerableProperty$e;
+ var fails$r = fails$S;
+ var wellKnownSymbol$5 = wellKnownSymbol$t;
+ var createNonEnumerableProperty$1 = createNonEnumerableProperty$b;
var SPECIES = wellKnownSymbol$5('species');
- var RegExpPrototype$1 = RegExp.prototype;
+ var RegExpPrototype$2 = RegExp.prototype;
var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) {
var SYMBOL = wellKnownSymbol$5(KEY);
- var DELEGATES_TO_SYMBOL = !fails$m(function () {
+ var DELEGATES_TO_SYMBOL = !fails$r(function () {
// String methods call symbol-named RegEp methods
var O = {};
O[SYMBOL] = function () { return 7; };
return ''[KEY](O) != 7;
});
- var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$m(function () {
+ var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$r(function () {
// Symbol-named RegExp methods call .exec
var execCalled = false;
var re = /a/;
@@ -6551,40 +5840,44 @@
!DELEGATES_TO_EXEC ||
FORCED
) {
- var nativeRegExpMethod = /./[SYMBOL];
+ var uncurriedNativeRegExpMethod = uncurryThis$s(/./[SYMBOL]);
var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {
+ var uncurriedNativeMethod = uncurryThis$s(nativeMethod);
var $exec = regexp.exec;
- if ($exec === regexpExec$2 || $exec === RegExpPrototype$1.exec) {
+ if ($exec === regexpExec$2 || $exec === RegExpPrototype$2.exec) {
if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
// The native String method already delegates to @@method (this
// polyfilled function), leasing to infinite recursion.
// We avoid it by directly calling the native @@method method.
- return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };
+ return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };
}
- return { done: true, value: nativeMethod.call(str, regexp, arg2) };
+ return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };
}
return { done: false };
});
- redefine$4(String.prototype, KEY, methods[0]);
- redefine$4(RegExpPrototype$1, SYMBOL, methods[1]);
+ redefine$5(String.prototype, KEY, methods[0]);
+ redefine$5(RegExpPrototype$2, SYMBOL, methods[1]);
}
- if (SHAM) createNonEnumerableProperty$1(RegExpPrototype$1[SYMBOL], 'sham', true);
+ if (SHAM) createNonEnumerableProperty$1(RegExpPrototype$2[SYMBOL], 'sham', true);
};
- var charAt = stringMultibyte.charAt;
+ var charAt$4 = stringMultibyte.charAt;
// `AdvanceStringIndex` abstract operation
// https://tc39.es/ecma262/#sec-advancestringindex
var advanceStringIndex$3 = function (S, index, unicode) {
- return index + (unicode ? charAt(S, index).length : 1);
+ return index + (unicode ? charAt$4(S, index).length : 1);
};
- var toObject$6 = toObject$i;
+ var uncurryThis$r = functionUncurryThis;
+ var toObject$9 = toObject$j;
- var floor$1 = Math.floor;
- var replace = ''.replace;
+ var floor$3 = Math.floor;
+ var charAt$3 = uncurryThis$r(''.charAt);
+ var replace$5 = uncurryThis$r(''.replace);
+ var stringSlice$7 = uncurryThis$r(''.slice);
var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;
@@ -6595,26 +5888,26 @@
var m = captures.length;
var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
if (namedCaptures !== undefined) {
- namedCaptures = toObject$6(namedCaptures);
+ namedCaptures = toObject$9(namedCaptures);
symbols = SUBSTITUTION_SYMBOLS;
}
- return replace.call(replacement, symbols, function (match, ch) {
+ return replace$5(replacement, symbols, function (match, ch) {
var capture;
- switch (ch.charAt(0)) {
+ switch (charAt$3(ch, 0)) {
case '$': return '$';
case '&': return matched;
- case '`': return str.slice(0, position);
- case "'": return str.slice(tailPos);
+ case '`': return stringSlice$7(str, 0, position);
+ case "'": return stringSlice$7(str, tailPos);
case '<':
- capture = namedCaptures[ch.slice(1, -1)];
+ capture = namedCaptures[stringSlice$7(ch, 1, -1)];
break;
default: // \d\d?
var n = +ch;
if (n === 0) return match;
if (n > m) {
- var f = floor$1(n / 10);
+ var f = floor$3(n / 10);
if (f === 0) return match;
- if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);
+ if (f <= m) return captures[f - 1] === undefined ? charAt$3(ch, 1) : captures[f - 1] + charAt$3(ch, 1);
return match;
}
capture = captures[n - 1];
@@ -6623,42 +5916,52 @@
});
};
- var classof$3 = classofRaw$1;
+ var global$m = global$1m;
+ var call$9 = functionCall;
+ var anObject$7 = anObject$n;
+ var isCallable$4 = isCallable$r;
+ var classof$2 = classofRaw$1;
var regexpExec$1 = regexpExec$3;
+ var TypeError$7 = global$m.TypeError;
+
// `RegExpExec` abstract operation
// https://tc39.es/ecma262/#sec-regexpexec
var regexpExecAbstract = function (R, S) {
var exec = R.exec;
- if (typeof exec === 'function') {
- var result = exec.call(R, S);
- if (typeof result !== 'object') {
- throw TypeError('RegExp exec method returned something other than an Object or null');
- }
+ if (isCallable$4(exec)) {
+ var result = call$9(exec, R, S);
+ if (result !== null) anObject$7(result);
return result;
}
-
- if (classof$3(R) !== 'RegExp') {
- throw TypeError('RegExp#exec called on incompatible receiver');
- }
-
- return regexpExec$1.call(R, S);
+ if (classof$2(R) === 'RegExp') return call$9(regexpExec$1, R, S);
+ throw TypeError$7('RegExp#exec called on incompatible receiver');
};
+ var apply$3 = functionApply;
+ var call$8 = functionCall;
+ var uncurryThis$q = functionUncurryThis;
var fixRegExpWellKnownSymbolLogic$3 = fixRegexpWellKnownSymbolLogic;
- var fails$l = fails$N;
- var anObject$5 = anObject$m;
- var toLength$8 = toLength$q;
- var toInteger$3 = toInteger$b;
+ var fails$q = fails$S;
+ var anObject$6 = anObject$n;
+ var isCallable$3 = isCallable$r;
+ var toIntegerOrInfinity$3 = toIntegerOrInfinity$b;
+ var toLength$5 = toLength$c;
+ var toString$f = toString$k;
var requireObjectCoercible$a = requireObjectCoercible$e;
var advanceStringIndex$2 = advanceStringIndex$3;
+ var getMethod$3 = getMethod$7;
var getSubstitution = getSubstitution$1;
- var regExpExec$2 = regexpExecAbstract;
- var wellKnownSymbol$4 = wellKnownSymbol$s;
+ var regExpExec$3 = regexpExecAbstract;
+ var wellKnownSymbol$4 = wellKnownSymbol$t;
var REPLACE = wellKnownSymbol$4('replace');
var max$2 = Math.max;
var min$5 = Math.min;
+ var concat$2 = uncurryThis$q([].concat);
+ var push$6 = uncurryThis$q([].push);
+ var stringIndexOf$2 = uncurryThis$q(''.indexOf);
+ var stringSlice$6 = uncurryThis$q(''.slice);
var maybeToString = function (it) {
return it === undefined ? it : String(it);
@@ -6679,13 +5982,14 @@
return false;
})();
- var REPLACE_SUPPORTS_NAMED_GROUPS = !fails$l(function () {
+ var REPLACE_SUPPORTS_NAMED_GROUPS = !fails$q(function () {
var re = /./;
re.exec = function () {
var result = [];
result.groups = { a: '7' };
return result;
};
+ // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive
return ''.replace(re, '$') !== '7';
});
@@ -6698,28 +6002,28 @@
// https://tc39.es/ecma262/#sec-string.prototype.replace
function replace(searchValue, replaceValue) {
var O = requireObjectCoercible$a(this);
- var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];
- return replacer !== undefined
- ? replacer.call(searchValue, O, replaceValue)
- : nativeReplace.call(String(O), searchValue, replaceValue);
+ var replacer = searchValue == undefined ? undefined : getMethod$3(searchValue, REPLACE);
+ return replacer
+ ? call$8(replacer, searchValue, O, replaceValue)
+ : call$8(nativeReplace, toString$f(O), searchValue, replaceValue);
},
// `RegExp.prototype[@@replace]` method
// https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
function (string, replaceValue) {
+ var rx = anObject$6(this);
+ var S = toString$f(string);
+
if (
- typeof replaceValue === 'string' &&
- replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1 &&
- replaceValue.indexOf('$<') === -1
+ typeof replaceValue == 'string' &&
+ stringIndexOf$2(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&
+ stringIndexOf$2(replaceValue, '$<') === -1
) {
- var res = maybeCallNative(nativeReplace, this, string, replaceValue);
+ var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
if (res.done) return res.value;
}
- var rx = anObject$5(this);
- var S = String(string);
-
- var functionalReplace = typeof replaceValue === 'function';
- if (!functionalReplace) replaceValue = String(replaceValue);
+ var functionalReplace = isCallable$3(replaceValue);
+ if (!functionalReplace) replaceValue = toString$f(replaceValue);
var global = rx.global;
if (global) {
@@ -6728,14 +6032,14 @@
}
var results = [];
while (true) {
- var result = regExpExec$2(rx, S);
+ var result = regExpExec$3(rx, S);
if (result === null) break;
- results.push(result);
+ push$6(results, result);
if (!global) break;
- var matchStr = String(result[0]);
- if (matchStr === '') rx.lastIndex = advanceStringIndex$2(S, toLength$8(rx.lastIndex), fullUnicode);
+ var matchStr = toString$f(result[0]);
+ if (matchStr === '') rx.lastIndex = advanceStringIndex$2(S, toLength$5(rx.lastIndex), fullUnicode);
}
var accumulatedResult = '';
@@ -6743,36 +6047,36 @@
for (var i = 0; i < results.length; i++) {
result = results[i];
- var matched = String(result[0]);
- var position = max$2(min$5(toInteger$3(result.index), S.length), 0);
+ var matched = toString$f(result[0]);
+ var position = max$2(min$5(toIntegerOrInfinity$3(result.index), S.length), 0);
var captures = [];
// NOTE: This is equivalent to
// captures = result.slice(1).map(maybeToString)
// but for some reason `nativeSlice.call(result, 1, result.length)` (called in
// the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
// causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
- for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));
+ for (var j = 1; j < result.length; j++) push$6(captures, maybeToString(result[j]));
var namedCaptures = result.groups;
if (functionalReplace) {
- var replacerArgs = [matched].concat(captures, position, S);
- if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
- var replacement = String(replaceValue.apply(undefined, replacerArgs));
+ var replacerArgs = concat$2([matched], captures, position, S);
+ if (namedCaptures !== undefined) push$6(replacerArgs, namedCaptures);
+ var replacement = toString$f(apply$3(replaceValue, undefined, replacerArgs));
} else {
replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
}
if (position >= nextSourcePosition) {
- accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
+ accumulatedResult += stringSlice$6(S, nextSourcePosition, position) + replacement;
nextSourcePosition = position + matched.length;
}
}
- return accumulatedResult + S.slice(nextSourcePosition);
+ return accumulatedResult + stringSlice$6(S, nextSourcePosition);
}
];
}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
- var isObject$b = isObject$r;
- var classof$2 = classofRaw$1;
- var wellKnownSymbol$3 = wellKnownSymbol$s;
+ var isObject$c = isObject$s;
+ var classof$1 = classofRaw$1;
+ var wellKnownSymbol$3 = wellKnownSymbol$t;
var MATCH$2 = wellKnownSymbol$3('match');
@@ -6780,29 +6084,38 @@
// https://tc39.es/ecma262/#sec-isregexp
var isRegexp = function (it) {
var isRegExp;
- return isObject$b(it) && ((isRegExp = it[MATCH$2]) !== undefined ? !!isRegExp : classof$2(it) == 'RegExp');
+ return isObject$c(it) && ((isRegExp = it[MATCH$2]) !== undefined ? !!isRegExp : classof$1(it) == 'RegExp');
};
+ var apply$2 = functionApply;
+ var call$7 = functionCall;
+ var uncurryThis$p = functionUncurryThis;
var fixRegExpWellKnownSymbolLogic$2 = fixRegexpWellKnownSymbolLogic;
var isRegExp$2 = isRegexp;
- var anObject$4 = anObject$m;
+ var anObject$5 = anObject$n;
var requireObjectCoercible$9 = requireObjectCoercible$e;
- var speciesConstructor$1 = speciesConstructor$8;
+ var speciesConstructor$1 = speciesConstructor$5;
var advanceStringIndex$1 = advanceStringIndex$3;
- var toLength$7 = toLength$q;
+ var toLength$4 = toLength$c;
+ var toString$e = toString$k;
+ var getMethod$2 = getMethod$7;
+ var arraySlice$4 = arraySlice$c;
var callRegExpExec = regexpExecAbstract;
var regexpExec = regexpExec$3;
var stickyHelpers$1 = regexpStickyHelpers;
- var fails$k = fails$N;
+ var fails$p = fails$S;
var UNSUPPORTED_Y$1 = stickyHelpers$1.UNSUPPORTED_Y;
- var arrayPush = [].push;
- var min$4 = Math.min;
var MAX_UINT32 = 0xFFFFFFFF;
+ var min$4 = Math.min;
+ var $push = [].push;
+ var exec$4 = uncurryThis$p(/./.exec);
+ var push$5 = uncurryThis$p($push);
+ var stringSlice$5 = uncurryThis$p(''.slice);
// Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
// Weex JS has frozen built-in prototypes, so use try / catch wrapper
- var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails$k(function () {
+ var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails$p(function () {
// eslint-disable-next-line regexp/no-empty-group -- required for testing
var re = /(?:)/;
var originalExec = re.exec;
@@ -6820,19 +6133,19 @@
'test'.split(/(?:)/, -1).length != 4 ||
'ab'.split(/(?:ab)*/).length != 2 ||
'.'.split(/(.?)(.?)/).length != 4 ||
- // eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing
+ // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing
'.'.split(/()()/).length > 1 ||
''.split(/.?/).length
) {
// based on es5-shim implementation, need to rework it
internalSplit = function (separator, limit) {
- var string = String(requireObjectCoercible$9(this));
+ var string = toString$e(requireObjectCoercible$9(this));
var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
if (lim === 0) return [];
if (separator === undefined) return [string];
// If `separator` is not a regex, use native split
if (!isRegExp$2(separator)) {
- return nativeSplit.call(string, separator, lim);
+ return call$7(nativeSplit, string, separator, lim);
}
var output = [];
var flags = (separator.ignoreCase ? 'i' : '') +
@@ -6843,11 +6156,11 @@
// Make `global` and avoid `lastIndex` issues by working with a copy
var separatorCopy = new RegExp(separator.source, flags + 'g');
var match, lastIndex, lastLength;
- while (match = regexpExec.call(separatorCopy, string)) {
+ while (match = call$7(regexpExec, separatorCopy, string)) {
lastIndex = separatorCopy.lastIndex;
if (lastIndex > lastLastIndex) {
- output.push(string.slice(lastLastIndex, match.index));
- if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));
+ push$5(output, stringSlice$5(string, lastLastIndex, match.index));
+ if (match.length > 1 && match.index < string.length) apply$2($push, output, arraySlice$4(match, 1));
lastLength = match[0].length;
lastLastIndex = lastIndex;
if (output.length >= lim) break;
@@ -6855,14 +6168,14 @@
if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
}
if (lastLastIndex === string.length) {
- if (lastLength || !separatorCopy.test('')) output.push('');
- } else output.push(string.slice(lastLastIndex));
- return output.length > lim ? output.slice(0, lim) : output;
+ if (lastLength || !exec$4(separatorCopy, '')) push$5(output, '');
+ } else push$5(output, stringSlice$5(string, lastLastIndex));
+ return output.length > lim ? arraySlice$4(output, 0, lim) : output;
};
// Chakra, V8
} else if ('0'.split(undefined, 0).length) {
internalSplit = function (separator, limit) {
- return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);
+ return separator === undefined && limit === 0 ? [] : call$7(nativeSplit, this, separator, limit);
};
} else internalSplit = nativeSplit;
@@ -6871,10 +6184,10 @@
// https://tc39.es/ecma262/#sec-string.prototype.split
function split(separator, limit) {
var O = requireObjectCoercible$9(this);
- var splitter = separator == undefined ? undefined : separator[SPLIT];
- return splitter !== undefined
- ? splitter.call(separator, O, limit)
- : internalSplit.call(String(O), separator, limit);
+ var splitter = separator == undefined ? undefined : getMethod$2(separator, SPLIT);
+ return splitter
+ ? call$7(splitter, separator, O, limit)
+ : call$7(internalSplit, toString$e(O), separator, limit);
},
// `RegExp.prototype[@@split]` method
// https://tc39.es/ecma262/#sec-regexp.prototype-@@split
@@ -6882,11 +6195,12 @@
// NOTE: This cannot be properly polyfilled in engines that don't support
// the 'y' flag.
function (string, limit) {
- var res = maybeCallNative(internalSplit, this, string, limit, internalSplit !== nativeSplit);
+ var rx = anObject$5(this);
+ var S = toString$e(string);
+ var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);
+
if (res.done) return res.value;
- var rx = anObject$4(this);
- var S = String(string);
var C = speciesConstructor$1(rx, RegExp);
var unicodeMatching = rx.unicode;
@@ -6906,24 +6220,24 @@
var A = [];
while (q < S.length) {
splitter.lastIndex = UNSUPPORTED_Y$1 ? 0 : q;
- var z = callRegExpExec(splitter, UNSUPPORTED_Y$1 ? S.slice(q) : S);
+ var z = callRegExpExec(splitter, UNSUPPORTED_Y$1 ? stringSlice$5(S, q) : S);
var e;
if (
z === null ||
- (e = min$4(toLength$7(splitter.lastIndex + (UNSUPPORTED_Y$1 ? q : 0)), S.length)) === p
+ (e = min$4(toLength$4(splitter.lastIndex + (UNSUPPORTED_Y$1 ? q : 0)), S.length)) === p
) {
q = advanceStringIndex$1(S, q, unicodeMatching);
} else {
- A.push(S.slice(p, q));
+ push$5(A, stringSlice$5(S, p, q));
if (A.length === lim) return A;
for (var i = 1; i <= z.length - 1; i++) {
- A.push(z[i]);
+ push$5(A, z[i]);
if (A.length === lim) return A;
}
q = p = e;
}
}
- A.push(S.slice(p));
+ push$5(A, stringSlice$5(S, p));
return A;
}
];
@@ -6933,9 +6247,12 @@
var whitespaces$4 = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' +
'\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
+ var uncurryThis$o = functionUncurryThis;
var requireObjectCoercible$8 = requireObjectCoercible$e;
+ var toString$d = toString$k;
var whitespaces$3 = whitespaces$4;
+ var replace$4 = uncurryThis$o(''.replace);
var whitespace = '[' + whitespaces$3 + ']';
var ltrim = RegExp('^' + whitespace + whitespace + '*');
var rtrim$2 = RegExp(whitespace + whitespace + '*$');
@@ -6943,9 +6260,9 @@
// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation
var createMethod$2 = function (TYPE) {
return function ($this) {
- var string = String(requireObjectCoercible$8($this));
- if (TYPE & 1) string = string.replace(ltrim, '');
- if (TYPE & 2) string = string.replace(rtrim$2, '');
+ var string = toString$d(requireObjectCoercible$8($this));
+ if (TYPE & 1) string = replace$4(string, ltrim, '');
+ if (TYPE & 2) string = replace$4(string, rtrim$2, '');
return string;
};
};
@@ -6962,7 +6279,8 @@
trim: createMethod$2(3)
};
- var fails$j = fails$N;
+ var PROPER_FUNCTION_NAME = functionName.PROPER;
+ var fails$o = fails$S;
var whitespaces$2 = whitespaces$4;
var non = '\u200B\u0085\u180E';
@@ -6970,39 +6288,44 @@
// check that a method works with the correct list
// of whitespaces and has a correct name
var stringTrimForced = function (METHOD_NAME) {
- return fails$j(function () {
- return !!whitespaces$2[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces$2[METHOD_NAME].name !== METHOD_NAME;
+ return fails$o(function () {
+ return !!whitespaces$2[METHOD_NAME]()
+ || non[METHOD_NAME]() !== non
+ || (PROPER_FUNCTION_NAME && whitespaces$2[METHOD_NAME].name !== METHOD_NAME);
});
};
- var $$O = _export;
+ var $$W = _export;
var $trim = stringTrim.trim;
- var forcedStringTrimMethod = stringTrimForced;
+ var forcedStringTrimMethod$2 = stringTrimForced;
// `String.prototype.trim` method
// https://tc39.es/ecma262/#sec-string.prototype.trim
- $$O({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {
+ $$W({ target: 'String', proto: true, forced: forcedStringTrimMethod$2('trim') }, {
trim: function trim() {
return $trim(this);
}
});
- var DESCRIPTORS$9 = descriptors;
- var defineProperty$4 = objectDefineProperty.f;
+ var DESCRIPTORS$b = descriptors;
+ var FUNCTION_NAME_EXISTS = functionName.EXISTS;
+ var uncurryThis$n = functionUncurryThis;
+ var defineProperty$5 = objectDefineProperty.f;
var FunctionPrototype = Function.prototype;
- var FunctionPrototypeToString = FunctionPrototype.toString;
+ var functionToString = uncurryThis$n(FunctionPrototype.toString);
var nameRE = /^\s*function ([^ (]*)/;
+ var regExpExec$2 = uncurryThis$n(nameRE.exec);
var NAME = 'name';
// Function instances `.name` property
// https://tc39.es/ecma262/#sec-function-instances-name
- if (DESCRIPTORS$9 && !(NAME in FunctionPrototype)) {
- defineProperty$4(FunctionPrototype, NAME, {
+ if (DESCRIPTORS$b && !FUNCTION_NAME_EXISTS) {
+ defineProperty$5(FunctionPrototype, NAME, {
configurable: true,
get: function () {
try {
- return FunctionPrototypeToString.call(this).match(nameRE)[1];
+ return regExpExec$2(nameRE, functionToString(this))[1];
} catch (error) {
return '';
}
@@ -7010,50 +6333,52 @@
});
}
- var $$N = _export;
- var DESCRIPTORS$8 = descriptors;
- var create$6 = objectCreate;
+ var $$V = _export;
+ var DESCRIPTORS$a = descriptors;
+ var create$5 = objectCreate;
// `Object.create` method
// https://tc39.es/ecma262/#sec-object.create
- $$N({ target: 'Object', stat: true, sham: !DESCRIPTORS$8 }, {
- create: create$6
+ $$V({ target: 'Object', stat: true, sham: !DESCRIPTORS$a }, {
+ create: create$5
});
- var $$M = _export;
- var global$9 = global$F;
- var userAgent = engineUserAgent;
+ var $$U = _export;
+ var global$l = global$1m;
+ var apply$1 = functionApply;
+ var isCallable$2 = isCallable$r;
+ var userAgent$1 = engineUserAgent;
+ var arraySlice$3 = arraySlice$c;
- var slice$3 = [].slice;
- var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check
+ var MSIE = /MSIE .\./.test(userAgent$1); // <- dirty ie9- check
+ var Function$2 = global$l.Function;
var wrap$1 = function (scheduler) {
return function (handler, timeout /* , ...arguments */) {
var boundArgs = arguments.length > 2;
- var args = boundArgs ? slice$3.call(arguments, 2) : undefined;
+ var args = boundArgs ? arraySlice$3(arguments, 2) : undefined;
return scheduler(boundArgs ? function () {
- // eslint-disable-next-line no-new-func -- spec requirement
- (typeof handler == 'function' ? handler : Function(handler)).apply(this, args);
+ apply$1(isCallable$2(handler) ? handler : Function$2(handler), this, args);
} : handler, timeout);
};
};
// ie9- setTimeout & setInterval additional parameters fix
// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers
- $$M({ global: true, bind: true, forced: MSIE }, {
+ $$U({ global: true, bind: true, forced: MSIE }, {
// `setTimeout` method
// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout
- setTimeout: wrap$1(global$9.setTimeout),
+ setTimeout: wrap$1(global$l.setTimeout),
// `setInterval` method
// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval
- setInterval: wrap$1(global$9.setInterval)
+ setInterval: wrap$1(global$l.setInterval)
});
- var global$8 = typeof globalThis !== 'undefined' && globalThis || typeof self !== 'undefined' && self || typeof global$8 !== 'undefined' && global$8;
+ var global$k = typeof globalThis !== 'undefined' && globalThis || typeof self !== 'undefined' && self || typeof global$k !== 'undefined' && global$k;
var support = {
- searchParams: 'URLSearchParams' in global$8,
- iterable: 'Symbol' in global$8 && 'iterator' in Symbol,
- blob: 'FileReader' in global$8 && 'Blob' in global$8 && function () {
+ searchParams: 'URLSearchParams' in global$k,
+ iterable: 'Symbol' in global$k && 'iterator' in Symbol,
+ blob: 'FileReader' in global$k && 'Blob' in global$k && function () {
try {
new Blob();
return true;
@@ -7061,8 +6386,8 @@
return false;
}
}(),
- formData: 'FormData' in global$8,
- arrayBuffer: 'ArrayBuffer' in global$8
+ formData: 'FormData' in global$k,
+ arrayBuffer: 'ArrayBuffer' in global$k
};
function isDataView(obj) {
@@ -7537,7 +6862,7 @@
});
};
- var DOMException$1 = global$8.DOMException;
+ var DOMException$1 = global$k.DOMException;
try {
new DOMException$1();
@@ -7600,7 +6925,7 @@
function fixUrl(url) {
try {
- return url === '' && global$8.location.href ? global$8.location.href : url;
+ return url === '' && global$k.location.href ? global$k.location.href : url;
} catch (e) {
return url;
}
@@ -7648,104 +6973,115 @@
}
fetch$1.polyfill = true;
- if (!global$8.fetch) {
- global$8.fetch = fetch$1;
- global$8.Headers = Headers;
- global$8.Request = Request;
- global$8.Response = Response;
+ if (!global$k.fetch) {
+ global$k.fetch = fetch$1;
+ global$k.Headers = Headers;
+ global$k.Request = Request;
+ global$k.Response = Response;
}
- var $$L = _export;
- var DESCRIPTORS$7 = descriptors;
+ var $$T = _export;
+ var DESCRIPTORS$9 = descriptors;
var objectDefinePropertyModile = objectDefineProperty;
// `Object.defineProperty` method
// https://tc39.es/ecma262/#sec-object.defineproperty
- $$L({ target: 'Object', stat: true, forced: !DESCRIPTORS$7, sham: !DESCRIPTORS$7 }, {
+ $$T({ target: 'Object', stat: true, forced: !DESCRIPTORS$9, sham: !DESCRIPTORS$9 }, {
defineProperty: objectDefinePropertyModile.f
});
- var $$K = _export;
+ var $$S = _export;
var setPrototypeOf = objectSetPrototypeOf;
// `Object.setPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.setprototypeof
- $$K({ target: 'Object', stat: true }, {
+ $$S({ target: 'Object', stat: true }, {
setPrototypeOf: setPrototypeOf
});
- var $$J = _export;
- var fails$i = fails$N;
- var toObject$5 = toObject$i;
+ var $$R = _export;
+ var fails$n = fails$S;
+ var toObject$8 = toObject$j;
var nativeGetPrototypeOf = objectGetPrototypeOf;
var CORRECT_PROTOTYPE_GETTER = correctPrototypeGetter;
- var FAILS_ON_PRIMITIVES$3 = fails$i(function () { nativeGetPrototypeOf(1); });
+ var FAILS_ON_PRIMITIVES$4 = fails$n(function () { nativeGetPrototypeOf(1); });
// `Object.getPrototypeOf` method
// https://tc39.es/ecma262/#sec-object.getprototypeof
- $$J({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$3, sham: !CORRECT_PROTOTYPE_GETTER }, {
+ $$R({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$4, sham: !CORRECT_PROTOTYPE_GETTER }, {
getPrototypeOf: function getPrototypeOf(it) {
- return nativeGetPrototypeOf(toObject$5(it));
+ return nativeGetPrototypeOf(toObject$8(it));
}
});
- var aFunction$2 = aFunction$9;
- var isObject$a = isObject$r;
+ var global$j = global$1m;
+ var uncurryThis$m = functionUncurryThis;
+ var aCallable$2 = aCallable$a;
+ var isObject$b = isObject$s;
+ var hasOwn$5 = hasOwnProperty_1;
+ var arraySlice$2 = arraySlice$c;
- var slice$2 = [].slice;
+ var Function$1 = global$j.Function;
+ var concat$1 = uncurryThis$m([].concat);
+ var join$3 = uncurryThis$m([].join);
var factories = {};
var construct = function (C, argsLength, args) {
- if (!(argsLength in factories)) {
+ if (!hasOwn$5(factories, argsLength)) {
for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';
- // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only
- factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');
+ factories[argsLength] = Function$1('C,a', 'return new C(' + join$3(list, ',') + ')');
} return factories[argsLength](C, args);
};
// `Function.prototype.bind` method implementation
// https://tc39.es/ecma262/#sec-function.prototype.bind
- var functionBind = Function.bind || function bind(that /* , ...args */) {
- var fn = aFunction$2(this);
- var partArgs = slice$2.call(arguments, 1);
+ var functionBind = Function$1.bind || function bind(that /* , ...args */) {
+ var F = aCallable$2(this);
+ var Prototype = F.prototype;
+ var partArgs = arraySlice$2(arguments, 1);
var boundFunction = function bound(/* args... */) {
- var args = partArgs.concat(slice$2.call(arguments));
- return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args);
+ var args = concat$1(partArgs, arraySlice$2(arguments));
+ return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);
};
- if (isObject$a(fn.prototype)) boundFunction.prototype = fn.prototype;
+ if (isObject$b(Prototype)) boundFunction.prototype = Prototype;
return boundFunction;
};
- var $$I = _export;
- var getBuiltIn$1 = getBuiltIn$9;
- var aFunction$1 = aFunction$9;
- var anObject$3 = anObject$m;
- var isObject$9 = isObject$r;
- var create$5 = objectCreate;
- var bind$4 = functionBind;
- var fails$h = fails$N;
+ var $$Q = _export;
+ var getBuiltIn$1 = getBuiltIn$b;
+ var apply = functionApply;
+ var bind$7 = functionBind;
+ var aConstructor = aConstructor$3;
+ var anObject$4 = anObject$n;
+ var isObject$a = isObject$s;
+ var create$4 = objectCreate;
+ var fails$m = fails$S;
var nativeConstruct = getBuiltIn$1('Reflect', 'construct');
+ var ObjectPrototype = Object.prototype;
+ var push$4 = [].push;
// `Reflect.construct` method
// https://tc39.es/ecma262/#sec-reflect.construct
// MS Edge supports only 2 arguments and argumentsList argument is optional
// FF Nightly sets third argument as `new.target`, but does not create `this` from it
- var NEW_TARGET_BUG = fails$h(function () {
+ var NEW_TARGET_BUG = fails$m(function () {
function F() { /* empty */ }
return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);
});
- var ARGS_BUG = !fails$h(function () {
+
+ var ARGS_BUG = !fails$m(function () {
nativeConstruct(function () { /* empty */ });
});
- var FORCED$a = NEW_TARGET_BUG || ARGS_BUG;
- $$I({ target: 'Reflect', stat: true, forced: FORCED$a, sham: FORCED$a }, {
+ var FORCED$c = NEW_TARGET_BUG || ARGS_BUG;
+
+ $$Q({ target: 'Reflect', stat: true, forced: FORCED$c, sham: FORCED$c }, {
construct: function construct(Target, args /* , newTarget */) {
- aFunction$1(Target);
- anObject$3(args);
- var newTarget = arguments.length < 3 ? Target : aFunction$1(arguments[2]);
+ aConstructor(Target);
+ anObject$4(args);
+ var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);
if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);
if (Target == newTarget) {
// w/o altered newTarget, optimization for 0-4 arguments
@@ -7758,21 +7094,28 @@
}
// w/o altered newTarget, lot of arguments case
var $args = [null];
- $args.push.apply($args, args);
- return new (bind$4.apply(Target, $args))();
+ apply(push$4, $args, args);
+ return new (apply(bind$7, Target, $args))();
}
// with altered newTarget, not support built-in constructors
var proto = newTarget.prototype;
- var instance = create$5(isObject$9(proto) ? proto : Object.prototype);
- var result = Function.apply.call(Target, instance, args);
- return isObject$9(result) ? result : instance;
+ var instance = create$4(isObject$a(proto) ? proto : ObjectPrototype);
+ var result = apply(Target, instance, args);
+ return isObject$a(result) ? result : instance;
}
});
- var $$H = _export;
- var isObject$8 = isObject$r;
- var anObject$2 = anObject$m;
- var has$3 = has$j;
+ var hasOwn$4 = hasOwnProperty_1;
+
+ var isDataDescriptor$1 = function (descriptor) {
+ return descriptor !== undefined && (hasOwn$4(descriptor, 'value') || hasOwn$4(descriptor, 'writable'));
+ };
+
+ var $$P = _export;
+ var call$6 = functionCall;
+ var isObject$9 = isObject$s;
+ var anObject$3 = anObject$n;
+ var isDataDescriptor = isDataDescriptor$1;
var getOwnPropertyDescriptorModule = objectGetOwnPropertyDescriptor;
var getPrototypeOf = objectGetPrototypeOf;
@@ -7781,47 +7124,48 @@
function get$3(target, propertyKey /* , receiver */) {
var receiver = arguments.length < 3 ? target : arguments[2];
var descriptor, prototype;
- if (anObject$2(target) === receiver) return target[propertyKey];
- if (descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey)) return has$3(descriptor, 'value')
+ if (anObject$3(target) === receiver) return target[propertyKey];
+ descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey);
+ if (descriptor) return isDataDescriptor(descriptor)
? descriptor.value
- : descriptor.get === undefined
- ? undefined
- : descriptor.get.call(receiver);
- if (isObject$8(prototype = getPrototypeOf(target))) return get$3(prototype, propertyKey, receiver);
+ : descriptor.get === undefined ? undefined : call$6(descriptor.get, receiver);
+ if (isObject$9(prototype = getPrototypeOf(target))) return get$3(prototype, propertyKey, receiver);
}
- $$H({ target: 'Reflect', stat: true }, {
+ $$P({ target: 'Reflect', stat: true }, {
get: get$3
});
- var $$G = _export;
- var fails$g = fails$N;
- var toIndexedObject$1 = toIndexedObject$b;
+ var $$O = _export;
+ var fails$l = fails$S;
+ var toIndexedObject$1 = toIndexedObject$c;
var nativeGetOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
- var DESCRIPTORS$6 = descriptors;
+ var DESCRIPTORS$8 = descriptors;
- var FAILS_ON_PRIMITIVES$2 = fails$g(function () { nativeGetOwnPropertyDescriptor(1); });
- var FORCED$9 = !DESCRIPTORS$6 || FAILS_ON_PRIMITIVES$2;
+ var FAILS_ON_PRIMITIVES$3 = fails$l(function () { nativeGetOwnPropertyDescriptor(1); });
+ var FORCED$b = !DESCRIPTORS$8 || FAILS_ON_PRIMITIVES$3;
// `Object.getOwnPropertyDescriptor` method
// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
- $$G({ target: 'Object', stat: true, forced: FORCED$9, sham: !DESCRIPTORS$6 }, {
+ $$O({ target: 'Object', stat: true, forced: FORCED$b, sham: !DESCRIPTORS$8 }, {
getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {
return nativeGetOwnPropertyDescriptor(toIndexedObject$1(it), key);
}
});
- var $$F = _export;
+ var $$N = _export;
+ var global$i = global$1m;
var toAbsoluteIndex$1 = toAbsoluteIndex$8;
- var toInteger$2 = toInteger$b;
- var toLength$6 = toLength$q;
- var toObject$4 = toObject$i;
- var arraySpeciesCreate$1 = arraySpeciesCreate$3;
- var createProperty$1 = createProperty$4;
+ var toIntegerOrInfinity$2 = toIntegerOrInfinity$b;
+ var lengthOfArrayLike$5 = lengthOfArrayLike$g;
+ var toObject$7 = toObject$j;
+ var arraySpeciesCreate$2 = arraySpeciesCreate$4;
+ var createProperty$2 = createProperty$4;
var arrayMethodHasSpeciesSupport$2 = arrayMethodHasSpeciesSupport$5;
var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport$2('splice');
+ var TypeError$6 = global$i.TypeError;
var max$1 = Math.max;
var min$3 = Math.min;
var MAX_SAFE_INTEGER$1 = 0x1FFFFFFFFFFFFF;
@@ -7830,10 +7174,10 @@
// `Array.prototype.splice` method
// https://tc39.es/ecma262/#sec-array.prototype.splice
// with adding support of @@species
- $$F({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 }, {
+ $$N({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 }, {
splice: function splice(start, deleteCount /* , ...items */) {
- var O = toObject$4(this);
- var len = toLength$6(O.length);
+ var O = toObject$7(this);
+ var len = lengthOfArrayLike$5(O);
var actualStart = toAbsoluteIndex$1(start, len);
var argumentsLength = arguments.length;
var insertCount, actualDeleteCount, A, k, from, to;
@@ -7844,15 +7188,15 @@
actualDeleteCount = len - actualStart;
} else {
insertCount = argumentsLength - 2;
- actualDeleteCount = min$3(max$1(toInteger$2(deleteCount), 0), len - actualStart);
+ actualDeleteCount = min$3(max$1(toIntegerOrInfinity$2(deleteCount), 0), len - actualStart);
}
if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER$1) {
- throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);
+ throw TypeError$6(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);
}
- A = arraySpeciesCreate$1(O, actualDeleteCount);
+ A = arraySpeciesCreate$2(O, actualDeleteCount);
for (k = 0; k < actualDeleteCount; k++) {
from = actualStart + k;
- if (from in O) createProperty$1(A, k, O[from]);
+ if (from in O) createProperty$2(A, k, O[from]);
}
A.length = actualDeleteCount;
if (insertCount < actualDeleteCount) {
@@ -7885,18 +7229,18 @@
// https://tc39.es/ecma262/#sec-symbol.tostringtag
defineWellKnownSymbol$1('toStringTag');
- var global$7 = global$F;
- var setToStringTag$2 = setToStringTag$a;
+ var global$h = global$1m;
+ var setToStringTag$3 = setToStringTag$a;
// JSON[@@toStringTag] property
// https://tc39.es/ecma262/#sec-json-@@tostringtag
- setToStringTag$2(global$7.JSON, 'JSON', true);
+ setToStringTag$3(global$h.JSON, 'JSON', true);
- var setToStringTag$1 = setToStringTag$a;
+ var setToStringTag$2 = setToStringTag$a;
// Math[@@toStringTag] property
// https://tc39.es/ecma262/#sec-math-@@tostringtag
- setToStringTag$1(Math, 'Math', true);
+ setToStringTag$2(Math, 'Math', true);
(function (factory) {
factory();
@@ -8416,26 +7760,28 @@
};
}
- var $$E = _export;
- var fails$f = fails$N;
- var isArray$1 = isArray$6;
- var isObject$7 = isObject$r;
- var toObject$3 = toObject$i;
- var toLength$5 = toLength$q;
- var createProperty = createProperty$4;
- var arraySpeciesCreate = arraySpeciesCreate$3;
+ var $$M = _export;
+ var global$g = global$1m;
+ var fails$k = fails$S;
+ var isArray$3 = isArray$8;
+ var isObject$8 = isObject$s;
+ var toObject$6 = toObject$j;
+ var lengthOfArrayLike$4 = lengthOfArrayLike$g;
+ var createProperty$1 = createProperty$4;
+ var arraySpeciesCreate$1 = arraySpeciesCreate$4;
var arrayMethodHasSpeciesSupport$1 = arrayMethodHasSpeciesSupport$5;
- var wellKnownSymbol$2 = wellKnownSymbol$s;
+ var wellKnownSymbol$2 = wellKnownSymbol$t;
var V8_VERSION = engineV8Version;
var IS_CONCAT_SPREADABLE = wellKnownSymbol$2('isConcatSpreadable');
var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;
var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';
+ var TypeError$5 = global$g.TypeError;
// We can't use this feature detection in V8 since it causes
// deoptimization and serious performance degradation
// https://github.com/zloirock/core-js/issues/679
- var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails$f(function () {
+ var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails$k(function () {
var array = [];
array[IS_CONCAT_SPREADABLE] = false;
return array.concat()[0] !== array;
@@ -8444,32 +7790,32 @@
var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport$1('concat');
var isConcatSpreadable = function (O) {
- if (!isObject$7(O)) return false;
+ if (!isObject$8(O)) return false;
var spreadable = O[IS_CONCAT_SPREADABLE];
- return spreadable !== undefined ? !!spreadable : isArray$1(O);
+ return spreadable !== undefined ? !!spreadable : isArray$3(O);
};
- var FORCED$8 = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;
+ var FORCED$a = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;
// `Array.prototype.concat` method
// https://tc39.es/ecma262/#sec-array.prototype.concat
// with adding support of @@isConcatSpreadable and @@species
- $$E({ target: 'Array', proto: true, forced: FORCED$8 }, {
+ $$M({ target: 'Array', proto: true, forced: FORCED$a }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
concat: function concat(arg) {
- var O = toObject$3(this);
- var A = arraySpeciesCreate(O, 0);
+ var O = toObject$6(this);
+ var A = arraySpeciesCreate$1(O, 0);
var n = 0;
var i, k, length, len, E;
for (i = -1, length = arguments.length; i < length; i++) {
E = i === -1 ? O : arguments[i];
if (isConcatSpreadable(E)) {
- len = toLength$5(E.length);
- if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
- for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);
+ len = lengthOfArrayLike$4(E);
+ if (n + len > MAX_SAFE_INTEGER) throw TypeError$5(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
+ for (k = 0; k < len; k++, n++) if (k in E) createProperty$1(A, n, E[k]);
} else {
- if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
- createProperty(A, n++, E);
+ if (n >= MAX_SAFE_INTEGER) throw TypeError$5(MAXIMUM_ALLOWED_INDEX_EXCEEDED);
+ createProperty$1(A, n++, E);
}
}
A.length = n;
@@ -8477,17 +7823,74 @@
}
});
- var $$D = _export;
- var assign$1 = objectAssign;
+ var DESCRIPTORS$7 = descriptors;
+ var uncurryThis$l = functionUncurryThis;
+ var call$5 = functionCall;
+ var fails$j = fails$S;
+ var objectKeys$1 = objectKeys$4;
+ var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols;
+ var propertyIsEnumerableModule = objectPropertyIsEnumerable;
+ var toObject$5 = toObject$j;
+ var IndexedObject = indexedObject;
+
+ // eslint-disable-next-line es/no-object-assign -- safe
+ var $assign = Object.assign;
+ // eslint-disable-next-line es/no-object-defineproperty -- required for testing
+ var defineProperty$4 = Object.defineProperty;
+ var concat = uncurryThis$l([].concat);
+
+ // `Object.assign` method
+ // https://tc39.es/ecma262/#sec-object.assign
+ var objectAssign = !$assign || fails$j(function () {
+ // should have correct order of operations (Edge bug)
+ if (DESCRIPTORS$7 && $assign({ b: 1 }, $assign(defineProperty$4({}, 'a', {
+ enumerable: true,
+ get: function () {
+ defineProperty$4(this, 'b', {
+ value: 3,
+ enumerable: false
+ });
+ }
+ }), { b: 2 })).b !== 1) return true;
+ // should work with symbols and should have deterministic property order (V8 bug)
+ var A = {};
+ var B = {};
+ // eslint-disable-next-line es/no-symbol -- safe
+ var symbol = Symbol();
+ var alphabet = 'abcdefghijklmnopqrst';
+ A[symbol] = 7;
+ alphabet.split('').forEach(function (chr) { B[chr] = chr; });
+ return $assign({}, A)[symbol] != 7 || objectKeys$1($assign({}, B)).join('') != alphabet;
+ }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`
+ var T = toObject$5(target);
+ var argumentsLength = arguments.length;
+ var index = 1;
+ var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
+ var propertyIsEnumerable = propertyIsEnumerableModule.f;
+ while (argumentsLength > index) {
+ var S = IndexedObject(arguments[index++]);
+ var keys = getOwnPropertySymbols ? concat(objectKeys$1(S), getOwnPropertySymbols(S)) : objectKeys$1(S);
+ var length = keys.length;
+ var j = 0;
+ var key;
+ while (length > j) {
+ key = keys[j++];
+ if (!DESCRIPTORS$7 || call$5(propertyIsEnumerable, S, key)) T[key] = S[key];
+ }
+ } return T;
+ } : $assign;
+
+ var $$L = _export;
+ var assign$2 = objectAssign;
// `Object.assign` method
// https://tc39.es/ecma262/#sec-object.assign
// eslint-disable-next-line es/no-object-assign -- required for testing
- $$D({ target: 'Object', stat: true, forced: Object.assign !== assign$1 }, {
- assign: assign$1
+ $$L({ target: 'Object', stat: true, forced: Object.assign !== assign$2 }, {
+ assign: assign$2
});
- var $$C = _export;
+ var $$K = _export;
var $filter = arrayIteration.filter;
var arrayMethodHasSpeciesSupport = arrayMethodHasSpeciesSupport$5;
@@ -8496,67 +7899,76 @@
// `Array.prototype.filter` method
// https://tc39.es/ecma262/#sec-array.prototype.filter
// with adding support of @@species
- $$C({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
+ $$K({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
filter: function filter(callbackfn /* , thisArg */) {
return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
- var $$B = _export;
- var toObject$2 = toObject$i;
+ var $$J = _export;
+ var toObject$4 = toObject$j;
var nativeKeys = objectKeys$4;
- var fails$e = fails$N;
+ var fails$i = fails$S;
- var FAILS_ON_PRIMITIVES$1 = fails$e(function () { nativeKeys(1); });
+ var FAILS_ON_PRIMITIVES$2 = fails$i(function () { nativeKeys(1); });
// `Object.keys` method
// https://tc39.es/ecma262/#sec-object.keys
- $$B({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$1 }, {
+ $$J({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$2 }, {
keys: function keys(it) {
- return nativeKeys(toObject$2(it));
+ return nativeKeys(toObject$4(it));
}
});
- var $$A = _export;
- var isArray = isArray$6;
+ var $$I = _export;
+ var uncurryThis$k = functionUncurryThis;
+ var isArray$2 = isArray$8;
- var nativeReverse = [].reverse;
+ var un$Reverse = uncurryThis$k([].reverse);
var test$1 = [1, 2];
// `Array.prototype.reverse` method
// https://tc39.es/ecma262/#sec-array.prototype.reverse
// fix for Safari 12.0 bug
// https://bugs.webkit.org/show_bug.cgi?id=188794
- $$A({ target: 'Array', proto: true, forced: String(test$1) === String(test$1.reverse()) }, {
+ $$I({ target: 'Array', proto: true, forced: String(test$1) === String(test$1.reverse()) }, {
reverse: function reverse() {
// eslint-disable-next-line no-self-assign -- dirty hack
- if (isArray(this)) this.length = this.length;
- return nativeReverse.call(this);
+ if (isArray$2(this)) this.length = this.length;
+ return un$Reverse(this);
}
});
- var global$6 = global$F;
+ var global$f = global$1m;
+ var fails$h = fails$S;
+ var uncurryThis$j = functionUncurryThis;
+ var toString$c = toString$k;
var trim$4 = stringTrim.trim;
var whitespaces$1 = whitespaces$4;
- var $parseFloat = global$6.parseFloat;
- var FORCED$7 = 1 / $parseFloat(whitespaces$1 + '-0') !== -Infinity;
+ var charAt$2 = uncurryThis$j(''.charAt);
+ var n$ParseFloat = global$f.parseFloat;
+ var Symbol$2 = global$f.Symbol;
+ var ITERATOR$1 = Symbol$2 && Symbol$2.iterator;
+ var FORCED$9 = 1 / n$ParseFloat(whitespaces$1 + '-0') !== -Infinity
+ // MS Edge 18- broken with boxed symbols
+ || (ITERATOR$1 && !fails$h(function () { n$ParseFloat(Object(ITERATOR$1)); }));
// `parseFloat` method
// https://tc39.es/ecma262/#sec-parsefloat-string
- var numberParseFloat = FORCED$7 ? function parseFloat(string) {
- var trimmedString = trim$4(String(string));
- var result = $parseFloat(trimmedString);
- return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result;
- } : $parseFloat;
+ var numberParseFloat = FORCED$9 ? function parseFloat(string) {
+ var trimmedString = trim$4(toString$c(string));
+ var result = n$ParseFloat(trimmedString);
+ return result === 0 && charAt$2(trimmedString, 0) == '-' ? -0 : result;
+ } : n$ParseFloat;
- var $$z = _export;
- var parseFloatImplementation = numberParseFloat;
+ var $$H = _export;
+ var $parseFloat = numberParseFloat;
// `parseFloat` method
// https://tc39.es/ecma262/#sec-parsefloat-string
- $$z({ global: true, forced: parseFloat != parseFloatImplementation }, {
- parseFloat: parseFloatImplementation
+ $$H({ global: true, forced: parseFloat != $parseFloat }, {
+ parseFloat: $parseFloat
});
/*
@@ -8847,6 +8259,10 @@
'sled': true,
'yes': true
},
+ 'seamark:type': {
+ 'separation_lane': true,
+ 'separation_roundabout': true
+ },
'waterway': {
'canal': true,
'ditch': true,
@@ -8962,57 +8378,94 @@
tidal_channel: true
};
- var global$5 = global$F;
+ var global$e = global$1m;
+ var fails$g = fails$S;
+ var uncurryThis$i = functionUncurryThis;
+ var toString$b = toString$k;
var trim$3 = stringTrim.trim;
var whitespaces = whitespaces$4;
- var $parseInt = global$5.parseInt;
- var hex$2 = /^[+-]?0[Xx]/;
- var FORCED$6 = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22;
+ var $parseInt$1 = global$e.parseInt;
+ var Symbol$1 = global$e.Symbol;
+ var ITERATOR = Symbol$1 && Symbol$1.iterator;
+ var hex$2 = /^[+-]?0x/i;
+ var exec$3 = uncurryThis$i(hex$2.exec);
+ var FORCED$8 = $parseInt$1(whitespaces + '08') !== 8 || $parseInt$1(whitespaces + '0x16') !== 22
+ // MS Edge 18- broken with boxed symbols
+ || (ITERATOR && !fails$g(function () { $parseInt$1(Object(ITERATOR)); }));
// `parseInt` method
// https://tc39.es/ecma262/#sec-parseint-string-radix
- var numberParseInt = FORCED$6 ? function parseInt(string, radix) {
- var S = trim$3(String(string));
- return $parseInt(S, (radix >>> 0) || (hex$2.test(S) ? 16 : 10));
- } : $parseInt;
+ var numberParseInt = FORCED$8 ? function parseInt(string, radix) {
+ var S = trim$3(toString$b(string));
+ return $parseInt$1(S, (radix >>> 0) || (exec$3(hex$2, S) ? 16 : 10));
+ } : $parseInt$1;
- var $$y = _export;
- var parseIntImplementation = numberParseInt;
+ var $$G = _export;
+ var $parseInt = numberParseInt;
// `parseInt` method
// https://tc39.es/ecma262/#sec-parseint-string-radix
- $$y({ global: true, forced: parseInt != parseIntImplementation }, {
- parseInt: parseIntImplementation
+ $$G({ global: true, forced: parseInt != $parseInt }, {
+ parseInt: $parseInt
});
var internalMetadata = {exports: {}};
- var fails$d = fails$N;
+ // FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it
+ var fails$f = fails$S;
+
+ var arrayBufferNonExtensible = fails$f(function () {
+ if (typeof ArrayBuffer == 'function') {
+ var buffer = new ArrayBuffer(8);
+ // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe
+ if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });
+ }
+ });
+
+ var fails$e = fails$S;
+ var isObject$7 = isObject$s;
+ var classof = classofRaw$1;
+ var ARRAY_BUFFER_NON_EXTENSIBLE = arrayBufferNonExtensible;
+
+ // eslint-disable-next-line es/no-object-isextensible -- safe
+ var $isExtensible = Object.isExtensible;
+ var FAILS_ON_PRIMITIVES$1 = fails$e(function () { $isExtensible(1); });
+
+ // `Object.isExtensible` method
+ // https://tc39.es/ecma262/#sec-object.isextensible
+ var objectIsExtensible = (FAILS_ON_PRIMITIVES$1 || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {
+ if (!isObject$7(it)) return false;
+ if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;
+ return $isExtensible ? $isExtensible(it) : true;
+ } : $isExtensible;
+
+ var fails$d = fails$S;
var freezing = !fails$d(function () {
// eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing
return Object.isExtensible(Object.preventExtensions({}));
});
+ var $$F = _export;
+ var uncurryThis$h = functionUncurryThis;
var hiddenKeys = hiddenKeys$6;
- var isObject$6 = isObject$r;
- var has$2 = has$j;
+ var isObject$6 = isObject$s;
+ var hasOwn$3 = hasOwnProperty_1;
var defineProperty$3 = objectDefineProperty.f;
+ var getOwnPropertyNamesModule = objectGetOwnPropertyNames;
+ var getOwnPropertyNamesExternalModule = objectGetOwnPropertyNamesExternal;
+ var isExtensible = objectIsExtensible;
var uid = uid$5;
var FREEZING$1 = freezing;
+ var REQUIRED = false;
var METADATA = uid('meta');
var id$1 = 0;
- // eslint-disable-next-line es/no-object-isextensible -- safe
- var isExtensible = Object.isExtensible || function () {
- return true;
- };
-
var setMetadata = function (it) {
defineProperty$3(it, METADATA, { value: {
- objectID: 'O' + ++id$1, // object ID
+ objectID: 'O' + id$1++, // object ID
weakData: {} // weak collections IDs
} });
};
@@ -9020,7 +8473,7 @@
var fastKey$1 = function (it, create) {
// return a primitive with prefix
if (!isObject$6(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
- if (!has$2(it, METADATA)) {
+ if (!hasOwn$3(it, METADATA)) {
// can't set metadata to uncaught frozen object
if (!isExtensible(it)) return 'F';
// not necessary to add metadata
@@ -9032,7 +8485,7 @@
};
var getWeakData = function (it, create) {
- if (!has$2(it, METADATA)) {
+ if (!hasOwn$3(it, METADATA)) {
// can't set metadata to uncaught frozen object
if (!isExtensible(it)) return true;
// not necessary to add metadata
@@ -9045,12 +8498,38 @@
// add metadata on freeze-family methods calling
var onFreeze$1 = function (it) {
- if (FREEZING$1 && meta.REQUIRED && isExtensible(it) && !has$2(it, METADATA)) setMetadata(it);
+ if (FREEZING$1 && REQUIRED && isExtensible(it) && !hasOwn$3(it, METADATA)) setMetadata(it);
return it;
};
+ var enable = function () {
+ meta.enable = function () { /* empty */ };
+ REQUIRED = true;
+ var getOwnPropertyNames = getOwnPropertyNamesModule.f;
+ var splice = uncurryThis$h([].splice);
+ var test = {};
+ test[METADATA] = 1;
+
+ // prevent exposing of metadata key
+ if (getOwnPropertyNames(test).length) {
+ getOwnPropertyNamesModule.f = function (it) {
+ var result = getOwnPropertyNames(it);
+ for (var i = 0, length = result.length; i < length; i++) {
+ if (result[i] === METADATA) {
+ splice(result, i, 1);
+ break;
+ }
+ } return result;
+ };
+
+ $$F({ target: 'Object', stat: true, forced: true }, {
+ getOwnPropertyNames: getOwnPropertyNamesExternalModule.f
+ });
+ }
+ };
+
var meta = internalMetadata.exports = {
- REQUIRED: false,
+ enable: enable,
fastKey: fastKey$1,
getWeakData: getWeakData,
onFreeze: onFreeze$1
@@ -9058,42 +8537,44 @@
hiddenKeys[METADATA] = true;
- var $$x = _export;
- var global$4 = global$F;
+ var $$E = _export;
+ var global$d = global$1m;
+ var uncurryThis$g = functionUncurryThis;
var isForced$2 = isForced_1;
- var redefine$3 = redefine$g.exports;
+ var redefine$4 = redefine$h.exports;
var InternalMetadataModule = internalMetadata.exports;
var iterate$1 = iterate$3;
- var anInstance$1 = anInstance$7;
- var isObject$5 = isObject$r;
- var fails$c = fails$N;
+ var anInstance$2 = anInstance$7;
+ var isCallable$1 = isCallable$r;
+ var isObject$5 = isObject$s;
+ var fails$c = fails$S;
var checkCorrectnessOfIteration$1 = checkCorrectnessOfIteration$4;
- var setToStringTag = setToStringTag$a;
+ var setToStringTag$1 = setToStringTag$a;
var inheritIfRequired$2 = inheritIfRequired$4;
var collection$2 = function (CONSTRUCTOR_NAME, wrapper, common) {
var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;
var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;
var ADDER = IS_MAP ? 'set' : 'add';
- var NativeConstructor = global$4[CONSTRUCTOR_NAME];
+ var NativeConstructor = global$d[CONSTRUCTOR_NAME];
var NativePrototype = NativeConstructor && NativeConstructor.prototype;
var Constructor = NativeConstructor;
var exported = {};
var fixMethod = function (KEY) {
- var nativeMethod = NativePrototype[KEY];
- redefine$3(NativePrototype, KEY,
+ var uncurriedNativeMethod = uncurryThis$g(NativePrototype[KEY]);
+ redefine$4(NativePrototype, KEY,
KEY == 'add' ? function add(value) {
- nativeMethod.call(this, value === 0 ? 0 : value);
+ uncurriedNativeMethod(this, value === 0 ? 0 : value);
return this;
} : KEY == 'delete' ? function (key) {
- return IS_WEAK && !isObject$5(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);
+ return IS_WEAK && !isObject$5(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
} : KEY == 'get' ? function get(key) {
- return IS_WEAK && !isObject$5(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key);
+ return IS_WEAK && !isObject$5(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);
} : KEY == 'has' ? function has(key) {
- return IS_WEAK && !isObject$5(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key);
+ return IS_WEAK && !isObject$5(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
} : function set(key, value) {
- nativeMethod.call(this, key === 0 ? 0 : key, value);
+ uncurriedNativeMethod(this, key === 0 ? 0 : key, value);
return this;
}
);
@@ -9101,7 +8582,7 @@
var REPLACE = isForced$2(
CONSTRUCTOR_NAME,
- typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails$c(function () {
+ !isCallable$1(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails$c(function () {
new NativeConstructor().entries().next();
}))
);
@@ -9109,7 +8590,7 @@
if (REPLACE) {
// create collection constructor
Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
- InternalMetadataModule.REQUIRED = true;
+ InternalMetadataModule.enable();
} else if (isForced$2(CONSTRUCTOR_NAME, true)) {
var instance = new Constructor();
// early implementations not supports chaining
@@ -9130,7 +8611,7 @@
if (!ACCEPT_ITERABLES) {
Constructor = wrapper(function (dummy, iterable) {
- anInstance$1(dummy, Constructor, CONSTRUCTOR_NAME);
+ anInstance$2(dummy, NativePrototype);
var that = inheritIfRequired$2(new NativeConstructor(), dummy, Constructor);
if (iterable != undefined) iterate$1(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
return that;
@@ -9152,9 +8633,9 @@
}
exported[CONSTRUCTOR_NAME] = Constructor;
- $$x({ global: true, forced: Constructor != NativeConstructor }, exported);
+ $$E({ global: true, forced: Constructor != NativeConstructor }, exported);
- setToStringTag(Constructor, CONSTRUCTOR_NAME);
+ setToStringTag$1(Constructor, CONSTRUCTOR_NAME);
if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);
@@ -9162,35 +8643,37 @@
};
var defineProperty$2 = objectDefineProperty.f;
- var create$4 = objectCreate;
+ var create$3 = objectCreate;
var redefineAll = redefineAll$4;
- var bind$3 = functionBindContext;
- var anInstance = anInstance$7;
+ var bind$6 = functionBindContext;
+ var anInstance$1 = anInstance$7;
var iterate = iterate$3;
var defineIterator = defineIterator$3;
var setSpecies$1 = setSpecies$5;
- var DESCRIPTORS$5 = descriptors;
+ var DESCRIPTORS$6 = descriptors;
var fastKey = internalMetadata.exports.fastKey;
- var InternalStateModule = internalState;
+ var InternalStateModule$1 = internalState;
- var setInternalState = InternalStateModule.set;
- var internalStateGetterFor = InternalStateModule.getterFor;
+ var setInternalState$1 = InternalStateModule$1.set;
+ var internalStateGetterFor = InternalStateModule$1.getterFor;
var collectionStrong$2 = {
getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
- var C = wrapper(function (that, iterable) {
- anInstance(that, C, CONSTRUCTOR_NAME);
- setInternalState(that, {
+ var Constructor = wrapper(function (that, iterable) {
+ anInstance$1(that, Prototype);
+ setInternalState$1(that, {
type: CONSTRUCTOR_NAME,
- index: create$4(null),
+ index: create$3(null),
first: undefined,
last: undefined,
size: 0
});
- if (!DESCRIPTORS$5) that.size = 0;
+ if (!DESCRIPTORS$6) that.size = 0;
if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
});
+ var Prototype = Constructor.prototype;
+
var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
var define = function (that, key, value) {
@@ -9212,7 +8695,7 @@
};
if (!state.first) state.first = entry;
if (previous) previous.next = entry;
- if (DESCRIPTORS$5) state.size++;
+ if (DESCRIPTORS$6) state.size++;
else that.size++;
// add to index
if (index !== 'F') state.index[index] = entry;
@@ -9231,7 +8714,7 @@
}
};
- redefineAll(C.prototype, {
+ redefineAll(Prototype, {
// `{ Map, Set }.prototype.clear()` methods
// https://tc39.es/ecma262/#sec-map.prototype.clear
// https://tc39.es/ecma262/#sec-set.prototype.clear
@@ -9247,7 +8730,7 @@
entry = entry.next;
}
state.first = state.last = undefined;
- if (DESCRIPTORS$5) state.size = 0;
+ if (DESCRIPTORS$6) state.size = 0;
else that.size = 0;
},
// `{ Map, Set }.prototype.delete(key)` methods
@@ -9266,7 +8749,7 @@
if (next) next.previous = prev;
if (state.first == entry) state.first = next;
if (state.last == entry) state.last = prev;
- if (DESCRIPTORS$5) state.size--;
+ if (DESCRIPTORS$6) state.size--;
else that.size--;
} return !!entry;
},
@@ -9275,7 +8758,7 @@
// https://tc39.es/ecma262/#sec-set.prototype.foreach
forEach: function forEach(callbackfn /* , that = undefined */) {
var state = getInternalState(this);
- var boundFunction = bind$3(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
+ var boundFunction = bind$6(callbackfn, arguments.length > 1 ? arguments[1] : undefined);
var entry;
while (entry = entry ? entry.next : state.first) {
boundFunction(entry.value, entry.key, this);
@@ -9291,7 +8774,7 @@
}
});
- redefineAll(C.prototype, IS_MAP ? {
+ redefineAll(Prototype, IS_MAP ? {
// `Map.prototype.get(key)` method
// https://tc39.es/ecma262/#sec-map.prototype.get
get: function get(key) {
@@ -9310,14 +8793,14 @@
return define(this, value = value === 0 ? 0 : value, value);
}
});
- if (DESCRIPTORS$5) defineProperty$2(C.prototype, 'size', {
+ if (DESCRIPTORS$6) defineProperty$2(Prototype, 'size', {
get: function () {
return getInternalState(this).size;
}
});
- return C;
+ return Constructor;
},
- setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) {
+ setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {
var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';
var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);
var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);
@@ -9330,8 +8813,8 @@
// https://tc39.es/ecma262/#sec-set.prototype.keys
// https://tc39.es/ecma262/#sec-set.prototype.values
// https://tc39.es/ecma262/#sec-set.prototype-@@iterator
- defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) {
- setInternalState(this, {
+ defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {
+ setInternalState$1(this, {
type: ITERATOR_NAME,
target: iterated,
state: getInternalCollectionState(iterated),
@@ -9527,11 +9010,9 @@
var IteratorPrototype = {};
-
- IteratorPrototype[iteratorSymbol] = function () {
+ define(IteratorPrototype, iteratorSymbol, function () {
return this;
- };
-
+ });
var getProto = Object.getPrototypeOf;
var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
@@ -9542,8 +9023,9 @@
}
var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
- GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
- GeneratorFunctionPrototype.constructor = GeneratorFunction;
+ GeneratorFunction.prototype = GeneratorFunctionPrototype;
+ define(Gp, "constructor", GeneratorFunctionPrototype);
+ define(GeneratorFunctionPrototype, "constructor", GeneratorFunction);
GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); // Helper for defining the .next, .throw, and .return methods of the
// Iterator interface in terms of a single ._invoke method.
@@ -9648,11 +9130,9 @@
}
defineIteratorMethods(AsyncIterator.prototype);
-
- AsyncIterator.prototype[asyncIteratorSymbol] = function () {
+ define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
return this;
- };
-
+ });
exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of
// AsyncIterator objects; they just return a Promise for the value of
// the final result produced by the iterator.
@@ -9829,13 +9309,12 @@
// object to not be returned from this call. This ensures that doesn't happen.
// See https://github.com/facebook/regenerator/issues/274 for more details.
- Gp[iteratorSymbol] = function () {
+ define(Gp, iteratorSymbol, function () {
return this;
- };
-
- Gp.toString = function () {
+ });
+ define(Gp, "toString", function () {
return "[object Generator]";
- };
+ });
function pushTryEntry(locs) {
var entry = {
@@ -10147,14 +9626,19 @@
} catch (accidentalStrictMode) {
// This module should not be running in strict mode, so the above
// assignment should always work unless something is misconfigured. Just
- // in case runtime.js accidentally runs in strict mode, we can escape
+ // in case runtime.js accidentally runs in strict mode, in modern engines
+ // we can explicitly access globalThis. In older engines we can escape
// strict mode using a global Function call. This could conceivably fail
// if a Content Security Policy forbids using Function, but in that case
// the proper solution is to fix the accidental strict mode problem. If
// you've misconfigured your bundler to force strict mode and applied a
// CSP to forbid Function, and you're not willing to fix either of those
// problems, please detail your unique predicament in a GitHub issue.
- Function("r", "regeneratorRuntime = r")(runtime);
+ if ((typeof globalThis === "undefined" ? "undefined" : _typeof(globalThis)) === "object") {
+ globalThis.regeneratorRuntime = runtime;
+ } else {
+ Function("r", "regeneratorRuntime = r")(runtime);
+ }
}
})(runtime);
@@ -10277,7 +9761,66 @@
var bisectRight = ascendingBisect.right;
d3_bisector(number$1).center;
- var $$w = _export;
+ var anObject$2 = anObject$n;
+ var iteratorClose = iteratorClose$2;
+
+ // call something on iterator step with safe closing on error
+ var callWithSafeIterationClosing$1 = function (iterator, fn, value, ENTRIES) {
+ try {
+ return ENTRIES ? fn(anObject$2(value)[0], value[1]) : fn(value);
+ } catch (error) {
+ iteratorClose(iterator, 'throw', error);
+ }
+ };
+
+ var global$c = global$1m;
+ var bind$5 = functionBindContext;
+ var call$4 = functionCall;
+ var toObject$3 = toObject$j;
+ var callWithSafeIterationClosing = callWithSafeIterationClosing$1;
+ var isArrayIteratorMethod = isArrayIteratorMethod$3;
+ var isConstructor = isConstructor$4;
+ var lengthOfArrayLike$3 = lengthOfArrayLike$g;
+ var createProperty = createProperty$4;
+ var getIterator = getIterator$4;
+ var getIteratorMethod = getIteratorMethod$5;
+
+ var Array$1 = global$c.Array;
+
+ // `Array.from` method implementation
+ // https://tc39.es/ecma262/#sec-array.from
+ var arrayFrom$1 = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
+ var O = toObject$3(arrayLike);
+ var IS_CONSTRUCTOR = isConstructor(this);
+ var argumentsLength = arguments.length;
+ var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
+ var mapping = mapfn !== undefined;
+ if (mapping) mapfn = bind$5(mapfn, argumentsLength > 2 ? arguments[2] : undefined);
+ var iteratorMethod = getIteratorMethod(O);
+ var index = 0;
+ var length, result, step, iterator, next, value;
+ // if the target is not iterable or it's an array with the default iterator - use a simple case
+ if (iteratorMethod && !(this == Array$1 && isArrayIteratorMethod(iteratorMethod))) {
+ iterator = getIterator(O, iteratorMethod);
+ next = iterator.next;
+ result = IS_CONSTRUCTOR ? new this() : [];
+ for (;!(step = call$4(next, iterator)).done; index++) {
+ value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
+ createProperty(result, index, value);
+ }
+ } else {
+ length = lengthOfArrayLike$3(O);
+ result = IS_CONSTRUCTOR ? new this(length) : Array$1(length);
+ for (;length > index; index++) {
+ value = mapping ? mapfn(O[index], index) : O[index];
+ createProperty(result, index, value);
+ }
+ }
+ result.length = index;
+ return result;
+ };
+
+ var $$D = _export;
var from = arrayFrom$1;
var checkCorrectnessOfIteration = checkCorrectnessOfIteration$4;
@@ -10288,32 +9831,32 @@
// `Array.from` method
// https://tc39.es/ecma262/#sec-array.from
- $$w({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {
+ $$D({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {
from: from
});
- var $$v = _export;
+ var $$C = _export;
var fill = arrayFill$1;
- var addToUnscopables$3 = addToUnscopables$5;
+ var addToUnscopables$4 = addToUnscopables$6;
// `Array.prototype.fill` method
// https://tc39.es/ecma262/#sec-array.prototype.fill
- $$v({ target: 'Array', proto: true }, {
+ $$C({ target: 'Array', proto: true }, {
fill: fill
});
// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables$3('fill');
+ addToUnscopables$4('fill');
- var $$u = _export;
+ var $$B = _export;
var $some = arrayIteration.some;
- var arrayMethodIsStrict$3 = arrayMethodIsStrict$8;
+ var arrayMethodIsStrict$4 = arrayMethodIsStrict$9;
- var STRICT_METHOD$3 = arrayMethodIsStrict$3('some');
+ var STRICT_METHOD$4 = arrayMethodIsStrict$4('some');
// `Array.prototype.some` method
// https://tc39.es/ecma262/#sec-array.prototype.some
- $$u({ target: 'Array', proto: true, forced: !STRICT_METHOD$3 }, {
+ $$B({ target: 'Array', proto: true, forced: !STRICT_METHOD$4 }, {
some: function some(callbackfn /* , thisArg */) {
return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
@@ -10403,14 +9946,14 @@
return Adder;
}();
- var $$t = _export;
- var DESCRIPTORS$4 = descriptors;
- var defineProperties = objectDefineProperties;
+ var $$A = _export;
+ var DESCRIPTORS$5 = descriptors;
+ var defineProperties$1 = objectDefineProperties;
// `Object.defineProperties` method
// https://tc39.es/ecma262/#sec-object.defineproperties
- $$t({ target: 'Object', stat: true, forced: !DESCRIPTORS$4, sham: !DESCRIPTORS$4 }, {
- defineProperties: defineProperties
+ $$A({ target: 'Object', stat: true, forced: !DESCRIPTORS$5, sham: !DESCRIPTORS$5 }, {
+ defineProperties: defineProperties$1
});
var collection = collection$2;
@@ -10422,20 +9965,23 @@
return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };
}, collectionStrong);
- var $$s = _export;
- var aFunction = aFunction$9;
- var toObject$1 = toObject$i;
- var toLength$4 = toLength$q;
- var fails$b = fails$N;
- var internalSort = arraySort;
- var arrayMethodIsStrict$2 = arrayMethodIsStrict$8;
+ var $$z = _export;
+ var uncurryThis$f = functionUncurryThis;
+ var aCallable$1 = aCallable$a;
+ var toObject$2 = toObject$j;
+ var lengthOfArrayLike$2 = lengthOfArrayLike$g;
+ var toString$a = toString$k;
+ var fails$b = fails$S;
+ var internalSort = arraySort$1;
+ var arrayMethodIsStrict$3 = arrayMethodIsStrict$9;
var FF = engineFfVersion;
var IE_OR_EDGE = engineIsIeOrEdge;
var V8 = engineV8Version;
var WEBKIT = engineWebkitVersion;
var test = [];
- var nativeSort = test.sort;
+ var un$Sort = uncurryThis$f(test.sort);
+ var push$3 = uncurryThis$f(test.push);
// IE8-
var FAILS_ON_UNDEFINED = fails$b(function () {
@@ -10446,7 +9992,7 @@
test.sort(null);
});
// Old WebKit
- var STRICT_METHOD$2 = arrayMethodIsStrict$2('sort');
+ var STRICT_METHOD$3 = arrayMethodIsStrict$3('sort');
var STABLE_SORT = !fails$b(function () {
// feature detection can be too slow, so check engines versions
@@ -10483,36 +10029,37 @@
return result !== 'DGBEFHACIJK';
});
- var FORCED$5 = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD$2 || !STABLE_SORT;
+ var FORCED$7 = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD$3 || !STABLE_SORT;
var getSortCompare = function (comparefn) {
return function (x, y) {
if (y === undefined) return -1;
if (x === undefined) return 1;
if (comparefn !== undefined) return +comparefn(x, y) || 0;
- return String(x) > String(y) ? 1 : -1;
+ return toString$a(x) > toString$a(y) ? 1 : -1;
};
};
// `Array.prototype.sort` method
// https://tc39.es/ecma262/#sec-array.prototype.sort
- $$s({ target: 'Array', proto: true, forced: FORCED$5 }, {
+ $$z({ target: 'Array', proto: true, forced: FORCED$7 }, {
sort: function sort(comparefn) {
- if (comparefn !== undefined) aFunction(comparefn);
+ if (comparefn !== undefined) aCallable$1(comparefn);
- var array = toObject$1(this);
+ var array = toObject$2(this);
- if (STABLE_SORT) return comparefn === undefined ? nativeSort.call(array) : nativeSort.call(array, comparefn);
+ if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);
var items = [];
- var arrayLength = toLength$4(array.length);
+ var arrayLength = lengthOfArrayLike$2(array);
var itemsLength, index;
for (index = 0; index < arrayLength; index++) {
- if (index in array) items.push(array[index]);
+ if (index in array) push$3(items, array[index]);
}
- items = internalSort(items, getSortCompare(comparefn));
+ internalSort(items, getSortCompare(comparefn));
+
itemsLength = items.length;
index = 0;
@@ -10812,7 +10359,7 @@
return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
};
- var $$r = _export;
+ var $$y = _export;
// eslint-disable-next-line es/no-math-hypot -- required for testing
var $hypot = Math.hypot;
@@ -10825,7 +10372,7 @@
// `Math.hypot` method
// https://tc39.es/ecma262/#sec-math.hypot
- $$r({ target: 'Math', stat: true, forced: BUGGY }, {
+ $$y({ target: 'Math', stat: true, forced: BUGGY }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
hypot: function hypot(value1, value2) {
var sum = 0;
@@ -10856,12 +10403,12 @@
return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
};
- var $$q = _export;
+ var $$x = _export;
var sign$1 = mathSign;
// `Math.sign` method
// https://tc39.es/ecma262/#sec-math.sign
- $$q({ target: 'Math', stat: true }, {
+ $$x({ target: 'Math', stat: true }, {
sign: sign$1
});
@@ -13325,36 +12872,37 @@
}
});
- var $$p = _export;
+ var $$w = _export;
var $every = arrayIteration.every;
- var arrayMethodIsStrict$1 = arrayMethodIsStrict$8;
+ var arrayMethodIsStrict$2 = arrayMethodIsStrict$9;
- var STRICT_METHOD$1 = arrayMethodIsStrict$1('every');
+ var STRICT_METHOD$2 = arrayMethodIsStrict$2('every');
// `Array.prototype.every` method
// https://tc39.es/ecma262/#sec-array.prototype.every
- $$p({ target: 'Array', proto: true, forced: !STRICT_METHOD$1 }, {
+ $$w({ target: 'Array', proto: true, forced: !STRICT_METHOD$2 }, {
every: function every(callbackfn /* , thisArg */) {
return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
- var $$o = _export;
+ var $$v = _export;
var $reduce = arrayReduce.left;
- var arrayMethodIsStrict = arrayMethodIsStrict$8;
- var CHROME_VERSION = engineV8Version;
- var IS_NODE = engineIsNode;
+ var arrayMethodIsStrict$1 = arrayMethodIsStrict$9;
+ var CHROME_VERSION$1 = engineV8Version;
+ var IS_NODE$1 = engineIsNode;
- var STRICT_METHOD = arrayMethodIsStrict('reduce');
+ var STRICT_METHOD$1 = arrayMethodIsStrict$1('reduce');
// Chrome 80-82 has a critical bug
// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
- var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;
+ var CHROME_BUG$1 = !IS_NODE$1 && CHROME_VERSION$1 > 79 && CHROME_VERSION$1 < 83;
// `Array.prototype.reduce` method
// https://tc39.es/ecma262/#sec-array.prototype.reduce
- $$o({ target: 'Array', proto: true, forced: !STRICT_METHOD || CHROME_BUG }, {
+ $$v({ target: 'Array', proto: true, forced: !STRICT_METHOD$1 || CHROME_BUG$1 }, {
reduce: function reduce(callbackfn /* , initialValue */) {
- return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
+ var length = arguments.length;
+ return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined);
}
});
@@ -14112,9 +13660,9 @@
return new Selection$1(subgroups, parents);
}
- var $$n = _export;
+ var $$u = _export;
var $find = arrayIteration.find;
- var addToUnscopables$2 = addToUnscopables$5;
+ var addToUnscopables$3 = addToUnscopables$6;
var FIND = 'find';
var SKIPS_HOLES$1 = true;
@@ -14124,14 +13672,14 @@
// `Array.prototype.find` method
// https://tc39.es/ecma262/#sec-array.prototype.find
- $$n({ target: 'Array', proto: true, forced: SKIPS_HOLES$1 }, {
+ $$u({ target: 'Array', proto: true, forced: SKIPS_HOLES$1 }, {
find: function find(callbackfn /* , that = undefined */) {
return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables$2(FIND);
+ addToUnscopables$3(FIND);
function matcher (selector) {
return function () {
@@ -14514,8 +14062,8 @@
}
function defaultView (node) {
- return node.ownerDocument && node.ownerDocument.defaultView || // node is a Node
- node.document && node // node is a Window
+ return node.ownerDocument && node.ownerDocument.defaultView // node is a Node
+ || node.document && node // node is a Window
|| node.defaultView; // node is a Document
}
@@ -15343,28 +14891,38 @@
return drag;
}
- var DESCRIPTORS$3 = descriptors;
- var global$3 = global$F;
+ var DESCRIPTORS$4 = descriptors;
+ var global$b = global$1m;
+ var uncurryThis$e = functionUncurryThis;
var isForced$1 = isForced_1;
var inheritIfRequired$1 = inheritIfRequired$4;
- var createNonEnumerableProperty = createNonEnumerableProperty$e;
+ var createNonEnumerableProperty = createNonEnumerableProperty$b;
var defineProperty$1 = objectDefineProperty.f;
var getOwnPropertyNames$1 = objectGetOwnPropertyNames.f;
+ var isPrototypeOf$1 = objectIsPrototypeOf;
var isRegExp$1 = isRegexp;
- var getFlags = regexpFlags$1;
+ var toString$9 = toString$k;
+ var regExpFlags$1 = regexpFlags$1;
var stickyHelpers = regexpStickyHelpers;
- var redefine$2 = redefine$g.exports;
- var fails$a = fails$N;
- var has$1 = has$j;
+ var redefine$3 = redefine$h.exports;
+ var fails$a = fails$S;
+ var hasOwn$2 = hasOwnProperty_1;
var enforceInternalState = internalState.enforce;
var setSpecies = setSpecies$5;
- var wellKnownSymbol$1 = wellKnownSymbol$s;
+ var wellKnownSymbol$1 = wellKnownSymbol$t;
var UNSUPPORTED_DOT_ALL = regexpUnsupportedDotAll;
var UNSUPPORTED_NCG = regexpUnsupportedNcg;
var MATCH$1 = wellKnownSymbol$1('match');
- var NativeRegExp = global$3.RegExp;
- var RegExpPrototype = NativeRegExp.prototype;
+ var NativeRegExp = global$b.RegExp;
+ var RegExpPrototype$1 = NativeRegExp.prototype;
+ var SyntaxError$1 = global$b.SyntaxError;
+ var getFlags = uncurryThis$e(regExpFlags$1);
+ var exec$2 = uncurryThis$e(RegExpPrototype$1.exec);
+ var charAt$1 = uncurryThis$e(''.charAt);
+ var replace$3 = uncurryThis$e(''.replace);
+ var stringIndexOf$1 = uncurryThis$e(''.indexOf);
+ var stringSlice$4 = uncurryThis$e(''.slice);
// TODO: Use only propper RegExpIdentifierName
var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/;
var re1 = /a/g;
@@ -15375,7 +14933,7 @@
var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
- var BASE_FORCED = DESCRIPTORS$3 &&
+ var BASE_FORCED = DESCRIPTORS$4 &&
(!CORRECT_NEW || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails$a(function () {
re2[MATCH$1] = false;
// RegExp constructor can alter flags and IsRegExp works correct with @@match
@@ -15389,9 +14947,9 @@
var brackets = false;
var chr;
for (; index <= length; index++) {
- chr = string.charAt(index);
+ chr = charAt$1(string, index);
if (chr === '\\') {
- result += chr + string.charAt(++index);
+ result += chr + charAt$1(string, ++index);
continue;
}
if (!brackets && chr === '.') {
@@ -15418,9 +14976,9 @@
var groupname = '';
var chr;
for (; index <= length; index++) {
- chr = string.charAt(index);
+ chr = charAt$1(string, index);
if (chr === '\\') {
- chr = chr + string.charAt(++index);
+ chr = chr + charAt$1(string, ++index);
} else if (chr === ']') {
brackets = false;
} else if (!brackets) switch (true) {
@@ -15428,7 +14986,7 @@
brackets = true;
break;
case chr === '(':
- if (IS_NCG.test(string.slice(index + 1))) {
+ if (exec$2(IS_NCG, stringSlice$4(string, index + 1))) {
index += 2;
ncg = true;
}
@@ -15436,11 +14994,11 @@
groupid++;
continue;
case chr === '>' && ncg:
- if (groupname === '' || has$1(names, groupname)) {
- throw new SyntaxError('Invalid capture group name');
+ if (groupname === '' || hasOwn$2(names, groupname)) {
+ throw new SyntaxError$1('Invalid capture group name');
}
names[groupname] = true;
- named.push([groupname, groupid]);
+ named[named.length] = [groupname, groupid];
ncg = false;
groupname = '';
continue;
@@ -15454,37 +15012,36 @@
// https://tc39.es/ecma262/#sec-regexp-constructor
if (isForced$1('RegExp', BASE_FORCED)) {
var RegExpWrapper = function RegExp(pattern, flags) {
- var thisIsRegExp = this instanceof RegExpWrapper;
+ var thisIsRegExp = isPrototypeOf$1(RegExpPrototype$1, this);
var patternIsRegExp = isRegExp$1(pattern);
var flagsAreUndefined = flags === undefined;
var groups = [];
- var rawPattern, rawFlags, dotAll, sticky, handled, result, state;
+ var rawPattern = pattern;
+ var rawFlags, dotAll, sticky, handled, result, state;
- if (!thisIsRegExp && patternIsRegExp && pattern.constructor === RegExpWrapper && flagsAreUndefined) {
+ if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {
return pattern;
}
- if (CORRECT_NEW) {
- if (patternIsRegExp && !flagsAreUndefined) pattern = pattern.source;
- } else if (pattern instanceof RegExpWrapper) {
- if (flagsAreUndefined) flags = getFlags.call(pattern);
+ if (patternIsRegExp || isPrototypeOf$1(RegExpPrototype$1, pattern)) {
pattern = pattern.source;
+ if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags(rawPattern);
}
- pattern = pattern === undefined ? '' : String(pattern);
- flags = flags === undefined ? '' : String(flags);
+ pattern = pattern === undefined ? '' : toString$9(pattern);
+ flags = flags === undefined ? '' : toString$9(flags);
rawPattern = pattern;
if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {
- dotAll = !!flags && flags.indexOf('s') > -1;
- if (dotAll) flags = flags.replace(/s/g, '');
+ dotAll = !!flags && stringIndexOf$1(flags, 's') > -1;
+ if (dotAll) flags = replace$3(flags, /s/g, '');
}
rawFlags = flags;
if (UNSUPPORTED_Y && 'sticky' in re1) {
- sticky = !!flags && flags.indexOf('y') > -1;
- if (sticky) flags = flags.replace(/y/g, '');
+ sticky = !!flags && stringIndexOf$1(flags, 'y') > -1;
+ if (sticky) flags = replace$3(flags, /y/g, '');
}
if (UNSUPPORTED_NCG) {
@@ -15493,11 +15050,7 @@
groups = handled[1];
}
- result = inheritIfRequired$1(
- CORRECT_NEW ? new NativeRegExp(pattern, flags) : NativeRegExp(pattern, flags),
- thisIsRegExp ? this : RegExpPrototype,
- RegExpWrapper
- );
+ result = inheritIfRequired$1(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype$1, RegExpWrapper);
if (dotAll || sticky || groups.length) {
state = enforceInternalState(result);
@@ -15529,9 +15082,9 @@
proxy(keys$1[index$1++]);
}
- RegExpPrototype.constructor = RegExpWrapper;
- RegExpWrapper.prototype = RegExpPrototype;
- redefine$2(global$3, 'RegExp', RegExpWrapper);
+ RegExpPrototype$1.constructor = RegExpWrapper;
+ RegExpWrapper.prototype = RegExpPrototype$1;
+ redefine$3(global$b, 'RegExp', RegExpWrapper);
}
// https://tc39.es/ecma262/#sec-get-regexp-@@species
@@ -16275,20 +15828,20 @@
};
} // General case.
else {
- var d1 = Math.sqrt(d2),
- b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
- b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
- r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
- r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
- S = (r1 - r0) / rho;
+ var d1 = Math.sqrt(d2),
+ b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
+ b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
+ r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
+ r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
+ S = (r1 - r0) / rho;
- i = function i(t) {
- var s = t * S,
- coshr0 = cosh(r0),
- u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
- return [ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(rho * s + r0)];
- };
- }
+ i = function i(t) {
+ var s = t * S,
+ coshr0 = cosh(r0),
+ u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
+ return [ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(rho * s + r0)];
+ };
+ }
i.duration = S * 1000 * rho / Math.SQRT2;
return i;
@@ -16315,13 +15868,13 @@
return samples;
}
- var $$m = _export;
- var bind$2 = functionBind;
+ var $$t = _export;
+ var bind$4 = functionBind;
// `Function.prototype.bind` method
// https://tc39.es/ecma262/#sec-function.prototype.bind
- $$m({ target: 'Function', proto: true }, {
- bind: bind$2
+ $$t({ target: 'Function', proto: true }, {
+ bind: bind$4
});
var frame = 0,
@@ -16472,7 +16025,7 @@
function schedule (node, name, id, index, group, timing) {
var schedules = node.__transition;
if (!schedules) node.__transition = {};else if (id in schedules) return;
- create$3(node, id, {
+ create$2(node, id, {
name: name,
index: index,
// For context during callback.
@@ -16504,7 +16057,7 @@
return schedule;
}
- function create$3(node, id, self) {
+ function create$2(node, id, self) {
var schedules = node.__transition,
tween; // Initialize the self timer when the transition is created.
// Note the actual delay is not known until the first callback!
@@ -16539,11 +16092,11 @@
delete schedules[i];
} // Cancel any pre-empted transitions.
else if (+i < id) {
- o.state = ENDED;
- o.timer.stop();
- o.on.call("cancel", node, node.__data__, o.index, o.group);
- delete schedules[i];
- }
+ o.state = ENDED;
+ o.timer.stop();
+ o.on.call("cancel", node, node.__data__, o.index, o.group);
+ delete schedules[i];
+ }
} // Defer the first tick to end of the current frame; see d3/d3#1576.
// Note the transition may be canceled after start and before the first tick!
// Note this must be scheduled before the start event; see d3/d3-transition#16!
@@ -17534,10 +17087,10 @@
return function (t) {
if (t === 1) t = b; // Avoid rounding error on end.
else {
- var l = i(t),
- k = w / l[2];
- t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k);
- }
+ var l = i(t),
+ k = w / l[2];
+ t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k);
+ }
g.zoom(null, t);
};
});
@@ -17617,11 +17170,11 @@
clearTimeout(g.wheel);
} // If this wheel event won’t trigger a transform change, ignore it.
else if (t.k === k) return; // Otherwise, capture the mouse point and location at the start.
- else {
- g.mouse = [p, t.invert(p)];
- interrupt(this);
- g.start();
- }
+ else {
+ g.mouse = [p, t.invert(p)];
+ interrupt(this);
+ g.start();
+ }
noevent(event);
g.wheel = setTimeout(wheelidled, wheelDelay);
@@ -17994,10 +17547,57 @@
return score;
}
- var $$l = _export;
+ var call$3 = functionCall;
+ var fixRegExpWellKnownSymbolLogic$1 = fixRegexpWellKnownSymbolLogic;
+ var anObject$1 = anObject$n;
+ var toLength$3 = toLength$c;
+ var toString$8 = toString$k;
+ var requireObjectCoercible$7 = requireObjectCoercible$e;
+ var getMethod$1 = getMethod$7;
+ var advanceStringIndex = advanceStringIndex$3;
+ var regExpExec$1 = regexpExecAbstract;
+
+ // @@match logic
+ fixRegExpWellKnownSymbolLogic$1('match', function (MATCH, nativeMatch, maybeCallNative) {
+ return [
+ // `String.prototype.match` method
+ // https://tc39.es/ecma262/#sec-string.prototype.match
+ function match(regexp) {
+ var O = requireObjectCoercible$7(this);
+ var matcher = regexp == undefined ? undefined : getMethod$1(regexp, MATCH);
+ return matcher ? call$3(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString$8(O));
+ },
+ // `RegExp.prototype[@@match]` method
+ // https://tc39.es/ecma262/#sec-regexp.prototype-@@match
+ function (string) {
+ var rx = anObject$1(this);
+ var S = toString$8(string);
+ var res = maybeCallNative(nativeMatch, rx, S);
+
+ if (res.done) return res.value;
+
+ if (!rx.global) return regExpExec$1(rx, S);
+
+ var fullUnicode = rx.unicode;
+ rx.lastIndex = 0;
+ var A = [];
+ var n = 0;
+ var result;
+ while ((result = regExpExec$1(rx, S)) !== null) {
+ var matchStr = toString$8(result[0]);
+ A[n] = matchStr;
+ if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength$3(rx.lastIndex), fullUnicode);
+ n++;
+ }
+ return n === 0 ? null : A;
+ }
+ ];
+ });
+
+ var $$s = _export;
var FREEZING = freezing;
- var fails$9 = fails$N;
- var isObject$4 = isObject$r;
+ var fails$9 = fails$S;
+ var isObject$4 = isObject$s;
var onFreeze = internalMetadata.exports.onFreeze;
// eslint-disable-next-line es/no-object-freeze -- safe
@@ -18006,7 +17606,7 @@
// `Object.freeze` method
// https://tc39.es/ecma262/#sec-object.freeze
- $$l({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {
+ $$s({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {
freeze: function freeze(it) {
return $freeze && isObject$4(it) ? $freeze(onFreeze(it)) : it;
}
@@ -18156,49 +17756,65 @@
}, []);
}
- var DESCRIPTORS$2 = descriptors;
- var global$2 = global$F;
+ var uncurryThis$d = functionUncurryThis;
+
+ // `thisNumberValue` abstract operation
+ // https://tc39.es/ecma262/#sec-thisnumbervalue
+ var thisNumberValue$3 = uncurryThis$d(1.0.valueOf);
+
+ var DESCRIPTORS$3 = descriptors;
+ var global$a = global$1m;
+ var uncurryThis$c = functionUncurryThis;
var isForced = isForced_1;
- var redefine$1 = redefine$g.exports;
- var has = has$j;
- var classof$1 = classofRaw$1;
+ var redefine$2 = redefine$h.exports;
+ var hasOwn$1 = hasOwnProperty_1;
var inheritIfRequired = inheritIfRequired$4;
- var toPrimitive$1 = toPrimitive$7;
- var fails$8 = fails$N;
- var create$2 = objectCreate;
+ var isPrototypeOf = objectIsPrototypeOf;
+ var isSymbol$1 = isSymbol$6;
+ var toPrimitive$1 = toPrimitive$3;
+ var fails$8 = fails$S;
var getOwnPropertyNames = objectGetOwnPropertyNames.f;
var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f;
var defineProperty = objectDefineProperty.f;
+ var thisNumberValue$2 = thisNumberValue$3;
var trim$2 = stringTrim.trim;
var NUMBER = 'Number';
- var NativeNumber = global$2[NUMBER];
+ var NativeNumber = global$a[NUMBER];
var NumberPrototype = NativeNumber.prototype;
+ var TypeError$4 = global$a.TypeError;
+ var arraySlice$1 = uncurryThis$c(''.slice);
+ var charCodeAt$1 = uncurryThis$c(''.charCodeAt);
- // Opera ~12 has broken Object#toString
- var BROKEN_CLASSOF = classof$1(create$2(NumberPrototype)) == NUMBER;
+ // `ToNumeric` abstract operation
+ // https://tc39.es/ecma262/#sec-tonumeric
+ var toNumeric = function (value) {
+ var primValue = toPrimitive$1(value, 'number');
+ return typeof primValue == 'bigint' ? primValue : toNumber$1(primValue);
+ };
// `ToNumber` abstract operation
// https://tc39.es/ecma262/#sec-tonumber
var toNumber$1 = function (argument) {
- var it = toPrimitive$1(argument, false);
+ var it = toPrimitive$1(argument, 'number');
var first, third, radix, maxCode, digits, length, index, code;
+ if (isSymbol$1(it)) throw TypeError$4('Cannot convert a Symbol value to a number');
if (typeof it == 'string' && it.length > 2) {
it = trim$2(it);
- first = it.charCodeAt(0);
+ first = charCodeAt$1(it, 0);
if (first === 43 || first === 45) {
- third = it.charCodeAt(2);
+ third = charCodeAt$1(it, 2);
if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
} else if (first === 48) {
- switch (it.charCodeAt(1)) {
+ switch (charCodeAt$1(it, 1)) {
case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i
case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i
default: return +it;
}
- digits = it.slice(2);
+ digits = arraySlice$1(it, 2);
length = digits.length;
for (index = 0; index < length; index++) {
- code = digits.charCodeAt(index);
+ code = charCodeAt$1(digits, index);
// parseInt parses a string to a first unavailable symbol
// but ToNumber should return NaN if a string contains unavailable symbols
if (code < 48 || code > maxCode) return NaN;
@@ -18211,75 +17827,29 @@
// https://tc39.es/ecma262/#sec-number-constructor
if (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {
var NumberWrapper = function Number(value) {
- var it = arguments.length < 1 ? 0 : value;
+ var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));
var dummy = this;
- return dummy instanceof NumberWrapper
- // check on 1..constructor(foo) case
- && (BROKEN_CLASSOF ? fails$8(function () { NumberPrototype.valueOf.call(dummy); }) : classof$1(dummy) != NUMBER)
- ? inheritIfRequired(new NativeNumber(toNumber$1(it)), dummy, NumberWrapper) : toNumber$1(it);
+ // check on 1..constructor(foo) case
+ return isPrototypeOf(NumberPrototype, dummy) && fails$8(function () { thisNumberValue$2(dummy); })
+ ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n;
};
- for (var keys = DESCRIPTORS$2 ? getOwnPropertyNames(NativeNumber) : (
+ for (var keys = DESCRIPTORS$3 ? getOwnPropertyNames(NativeNumber) : (
// ES3:
'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
// ES2015 (in case, if modules with ES2015 Number statics required before):
- 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +
- 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +
+ 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +
// ESNext
'fromString,range'
).split(','), j$1 = 0, key; keys.length > j$1; j$1++) {
- if (has(NativeNumber, key = keys[j$1]) && !has(NumberWrapper, key)) {
+ if (hasOwn$1(NativeNumber, key = keys[j$1]) && !hasOwn$1(NumberWrapper, key)) {
defineProperty(NumberWrapper, key, getOwnPropertyDescriptor$2(NativeNumber, key));
}
}
NumberWrapper.prototype = NumberPrototype;
NumberPrototype.constructor = NumberWrapper;
- redefine$1(global$2, NUMBER, NumberWrapper);
+ redefine$2(global$a, NUMBER, NumberWrapper);
}
- var fixRegExpWellKnownSymbolLogic$1 = fixRegexpWellKnownSymbolLogic;
- var anObject$1 = anObject$m;
- var toLength$3 = toLength$q;
- var requireObjectCoercible$7 = requireObjectCoercible$e;
- var advanceStringIndex = advanceStringIndex$3;
- var regExpExec$1 = regexpExecAbstract;
-
- // @@match logic
- fixRegExpWellKnownSymbolLogic$1('match', function (MATCH, nativeMatch, maybeCallNative) {
- return [
- // `String.prototype.match` method
- // https://tc39.es/ecma262/#sec-string.prototype.match
- function match(regexp) {
- var O = requireObjectCoercible$7(this);
- var matcher = regexp == undefined ? undefined : regexp[MATCH];
- return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
- },
- // `RegExp.prototype[@@match]` method
- // https://tc39.es/ecma262/#sec-regexp.prototype-@@match
- function (string) {
- var res = maybeCallNative(nativeMatch, this, string);
- if (res.done) return res.value;
-
- var rx = anObject$1(this);
- var S = String(string);
-
- if (!rx.global) return regExpExec$1(rx, S);
-
- var fullUnicode = rx.unicode;
- rx.lastIndex = 0;
- var A = [];
- var n = 0;
- var result;
- while ((result = regExpExec$1(rx, S)) !== null) {
- var matchStr = String(result[0]);
- A[n] = matchStr;
- if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength$3(rx.lastIndex), fullUnicode);
- n++;
- }
- return n === 0 ? null : A;
- }
- ];
- });
-
var diacritics = {};
var remove$6 = diacritics.remove = removeDiacritics;
@@ -20660,8 +20230,8 @@
} else if (reference_1$1.tashkeel.indexOf(word[w]) > -1) {
// tashkeel - add without changing state
output += word[w];
- } else if (nextLetter === ' ' || // last Arabic letter in this word
- reference_1$1.lineBreakers.indexOf(word[w]) > -1) {
+ } else if (nextLetter === ' ' // last Arabic letter in this word
+ || reference_1$1.lineBreakers.indexOf(word[w]) > -1) {
// the current letter is known to break lines
output += CharShaper_1$1.CharShaper(word[w], state === 'initial' ? 'isolated' : 'final');
state = 'initial';
@@ -20834,10 +20404,14 @@
return ret;
}
- var DESCRIPTORS$1 = descriptors;
+ var DESCRIPTORS$2 = descriptors;
+ var uncurryThis$b = functionUncurryThis;
var objectKeys = objectKeys$4;
- var toIndexedObject = toIndexedObject$b;
- var propertyIsEnumerable = objectPropertyIsEnumerable.f;
+ var toIndexedObject = toIndexedObject$c;
+ var $propertyIsEnumerable = objectPropertyIsEnumerable.f;
+
+ var propertyIsEnumerable = uncurryThis$b($propertyIsEnumerable);
+ var push$2 = uncurryThis$b([].push);
// `Object.{ entries, values }` methods implementation
var createMethod$1 = function (TO_ENTRIES) {
@@ -20850,8 +20424,8 @@
var key;
while (length > i) {
key = keys[i++];
- if (!DESCRIPTORS$1 || propertyIsEnumerable.call(O, key)) {
- result.push(TO_ENTRIES ? [key, O[key]] : O[key]);
+ if (!DESCRIPTORS$2 || propertyIsEnumerable(O, key)) {
+ push$2(result, TO_ENTRIES ? [key, O[key]] : O[key]);
}
}
return result;
@@ -20867,12 +20441,12 @@
values: createMethod$1(false)
};
- var $$k = _export;
+ var $$r = _export;
var $values = objectToArray.values;
// `Object.values` method
// https://tc39.es/ecma262/#sec-object.values
- $$k({ target: 'Object', stat: true }, {
+ $$r({ target: 'Object', stat: true }, {
values: function values(O) {
return $values(O);
}
@@ -20900,7 +20474,9 @@
return delete s[k];
}
};
- }(); //
+ }();
+
+ var _listeners = {}; //
// corePreferences is an interface for persisting basic key-value strings
// within and between iD sessions on the same site.
//
@@ -20911,10 +20487,16 @@
* @returns {boolean} true if the action succeeded
*/
-
function corePreferences(k, v) {
try {
- if (arguments.length === 1) return _storage.getItem(k);else if (v === null) _storage.removeItem(k);else _storage.setItem(k, v);
+ if (v === undefined) return _storage.getItem(k);else if (v === null) _storage.removeItem(k);else _storage.setItem(k, v);
+
+ if (_listeners[k]) {
+ _listeners[k].forEach(function (handler) {
+ return handler(v);
+ });
+ }
+
return true;
} catch (e) {
/* eslint-disable no-console */
@@ -20926,7 +20508,14 @@
return false;
}
- }
+ } // adds an event listener which is triggered whenever
+
+
+ corePreferences.onChange = function (k, handler) {
+ _listeners[k] = _listeners[k] || [];
+
+ _listeners[k].push(handler);
+ };
var vparse = {exports: {}};
@@ -20975,7 +20564,7 @@
var parseVersion = vparse.exports;
var name = "iD";
- var version = "2.20.2";
+ var version = "2.20.3";
var description = "A friendly editor for OpenStreetMap";
var main = "dist/iD.min.js";
var repository = "github:openstreetmap/iD";
@@ -20983,9 +20572,9 @@
var bugs = "https://github.com/openstreetmap/iD/issues";
var keywords = ["editor","openstreetmap"];
var license = "ISC";
- var scripts = {all:"npm-run-all -s clean build build:legacy dist",build:"npm-run-all -s build:css build:data build:dev","build:css":"node scripts/build_css.js","build:data":"shx mkdir -p dist/data && node scripts/build_data.js","build:dev":"rollup --config config/rollup.config.dev.js","build:legacy":"rollup --config config/rollup.config.legacy.js","build:stats":"rollup --config config/rollup.config.stats.js",clean:"shx rm -f dist/*.js dist/*.map dist/*.css dist/img/*.svg",dist:"npm-run-all -p dist:**","dist:mapillary":"shx mkdir -p dist/mapillary-js && shx cp -R node_modules/mapillary-js/dist/* dist/mapillary-js/","dist:pannellum":"shx mkdir -p dist/pannellum-streetside && shx cp -R node_modules/pannellum/build/* dist/pannellum-streetside/","dist:min:iD":"uglifyjs dist/iD.legacy.js --compress --mangle --output dist/iD.min.js","dist:svg:iD":"svg-sprite --symbol --symbol-dest . --shape-id-generator \"iD-%s\" --symbol-sprite dist/img/iD-sprite.svg \"svg/iD-sprite/**/*.svg\"","dist:svg:community":"svg-sprite --symbol --symbol-dest . --shape-id-generator \"community-%s\" --symbol-sprite dist/img/community-sprite.svg node_modules/osm-community-index/dist/img/*.svg","dist:svg:fa":"svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/fa-sprite.svg svg/fontawesome/*.svg","dist:svg:maki":"svg-sprite --symbol --symbol-dest . --shape-id-generator \"maki-%s\" --symbol-sprite dist/img/maki-sprite.svg node_modules/@mapbox/maki/icons/*.svg","dist:svg:mapillary:signs":"svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/mapillary-sprite.svg node_modules/mapillary_sprite_source/package_signs/*.svg","dist:svg:mapillary:objects":"svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/mapillary-object-sprite.svg node_modules/mapillary_sprite_source/package_objects/*.svg","dist:svg:temaki":"svg-sprite --symbol --symbol-dest . --shape-id-generator \"temaki-%s\" --symbol-sprite dist/img/temaki-sprite.svg node_modules/@ideditor/temaki/icons/*.svg",imagery:"node scripts/update_imagery.js",lint:"eslint scripts test/spec modules","lint:fix":"eslint scripts test/spec modules --fix",start:"npm-run-all -s build start:server",quickstart:"npm-run-all -s build:dev start:server","start:server":"node scripts/server.js",test:"npm-run-all -s lint build:css build:data build:legacy test:spec","test:spec":"phantomjs --web-security=no node_modules/mocha-phantomjs-core/mocha-phantomjs-core.js test/index.html spec",translations:"node scripts/update_locales.js"};
+ var scripts = {all:"npm-run-all -s clean build build:legacy dist",build:"npm-run-all -s build:css build:data build:dev","build:css":"node scripts/build_css.js","build:data":"shx mkdir -p dist/data && node scripts/build_data.js","build:dev":"rollup --config config/rollup.config.dev.js","build:legacy":"rollup --config config/rollup.config.legacy.js","build:stats":"rollup --config config/rollup.config.stats.js",clean:"shx rm -f dist/*.js dist/*.map dist/*.css dist/img/*.svg",dist:"npm-run-all -p dist:**","dist:mapillary":"shx mkdir -p dist/mapillary-js && shx cp -R node_modules/mapillary-js/dist/* dist/mapillary-js/","dist:pannellum":"shx mkdir -p dist/pannellum-streetside && shx cp -R node_modules/pannellum/build/* dist/pannellum-streetside/","dist:min:iD":"uglifyjs dist/iD.legacy.js --compress --mangle --output dist/iD.min.js","dist:svg:iD":"svg-sprite --symbol --symbol-dest . --shape-id-generator \"iD-%s\" --symbol-sprite dist/img/iD-sprite.svg \"svg/iD-sprite/**/*.svg\"","dist:svg:community":"svg-sprite --symbol --symbol-dest . --shape-id-generator \"community-%s\" --symbol-sprite dist/img/community-sprite.svg node_modules/osm-community-index/dist/img/*.svg","dist:svg:fa":"svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/fa-sprite.svg svg/fontawesome/*.svg","dist:svg:maki":"svg-sprite --symbol --symbol-dest . --shape-id-generator \"maki-%s\" --symbol-sprite dist/img/maki-sprite.svg node_modules/@mapbox/maki/icons/*.svg","dist:svg:mapillary:signs":"svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/mapillary-sprite.svg node_modules/mapillary_sprite_source/package_signs/*.svg","dist:svg:mapillary:objects":"svg-sprite --symbol --symbol-dest . --symbol-sprite dist/img/mapillary-object-sprite.svg node_modules/mapillary_sprite_source/package_objects/*.svg","dist:svg:temaki":"svg-sprite --symbol --symbol-dest . --shape-id-generator \"temaki-%s\" --symbol-sprite dist/img/temaki-sprite.svg node_modules/@ideditor/temaki/icons/*.svg",imagery:"node scripts/update_imagery.js",lint:"eslint scripts test/spec modules","lint:fix":"eslint scripts test/spec modules --fix",start:"npm-run-all -s build start:server",quickstart:"npm-run-all -s build:dev start:server","start:server":"node scripts/server.js",test:"npm-run-all -s lint build test:spec","test:spec":"karma start karma.conf.js",translations:"node scripts/update_locales.js"};
var dependencies = {"@ideditor/country-coder":"~5.0.3","@ideditor/location-conflation":"~1.0.2","@mapbox/geojson-area":"^0.2.2","@mapbox/sexagesimal":"1.2.0","@mapbox/vector-tile":"^1.3.1","@tmcw/togeojson":"^4.5.0","@turf/bbox-clip":"^6.0.0","abortcontroller-polyfill":"^1.4.0","aes-js":"^3.1.2","alif-toolkit":"^1.2.9","core-js":"^3.6.5",diacritics:"1.3.0","fast-deep-equal":"~3.1.1","fast-json-stable-stringify":"2.1.0","lodash-es":"~4.17.15",marked:"~2.0.0","node-diff3":"2.1.0","osm-auth":"1.1.0",pannellum:"2.5.6",pbf:"^3.2.1","polygon-clipping":"~0.15.1",rbush:"3.0.1","whatwg-fetch":"^3.4.1","which-polygon":"2.2.0"};
- var devDependencies = {"@babel/core":"^7.11.6","@babel/preset-env":"^7.11.5","@fortawesome/fontawesome-svg-core":"^1.2.32","@fortawesome/free-brands-svg-icons":"~5.15.1","@fortawesome/free-regular-svg-icons":"~5.15.1","@fortawesome/free-solid-svg-icons":"~5.15.1","@ideditor/temaki":"~4.4.0","@mapbox/maki":"^6.0.0","@rollup/plugin-babel":"^5.2.1","@rollup/plugin-commonjs":"^21.0.0","@rollup/plugin-json":"^4.0.1","@rollup/plugin-node-resolve":"~13.0.5",autoprefixer:"^10.0.1",btoa:"^1.2.1",chai:"^4.1.0","cldr-core":"37.0.0","cldr-localenames-full":"37.0.0",colors:"^1.1.2","concat-files":"^0.1.1",d3:"~6.6.0","editor-layer-index":"github:osmlab/editor-layer-index#gh-pages",eslint:"^7.1.0",gaze:"^1.1.3",glob:"^7.1.0",happen:"^0.3.1","js-yaml":"^4.0.0","json-stringify-pretty-compact":"^3.0.0",mapillary_sprite_source:"^1.8.0","mapillary-js":"4.0.0",minimist:"^1.2.3",mocha:"^7.0.1","mocha-phantomjs-core":"^2.1.0","name-suggestion-index":"~6.0","node-fetch":"^2.6.1","npm-run-all":"^4.0.0","object-inspect":"1.10.3","osm-community-index":"~5.1.0","phantomjs-prebuilt":"~2.1.16",postcss:"^8.1.1","postcss-selector-prepend":"^0.5.0",rollup:"~2.52.8","rollup-plugin-includepaths":"~0.2.3","rollup-plugin-progress":"^1.1.1","rollup-plugin-visualizer":"~4.2.0",shelljs:"^0.8.0",shx:"^0.3.0",sinon:"7.5.0","sinon-chai":"^3.3.0",smash:"0.0","static-server":"^2.2.1","svg-sprite":"1.5.1","uglify-js":"~3.13.0",vparse:"~1.1.0"};
+ var devDependencies = {"@babel/core":"^7.11.6","@babel/preset-env":"^7.11.5","@fortawesome/fontawesome-svg-core":"^1.2.32","@fortawesome/free-brands-svg-icons":"~5.15.1","@fortawesome/free-regular-svg-icons":"~5.15.1","@fortawesome/free-solid-svg-icons":"~5.15.1","@ideditor/temaki":"~5.0.0","@mapbox/maki":"^6.0.0","@rollup/plugin-babel":"^5.2.1","@rollup/plugin-commonjs":"^21.0.0","@rollup/plugin-json":"^4.0.1","@rollup/plugin-node-resolve":"~13.0.5",autoprefixer:"^10.0.1",btoa:"^1.2.1",chai:"^4.3.4","cldr-core":"37.0.0","cldr-localenames-full":"37.0.0",chalk:"^4.1.2","concat-files":"^0.1.1",d3:"~6.6.0","editor-layer-index":"github:osmlab/editor-layer-index#gh-pages",eslint:"^7.1.0","fetch-mock":"^9.11.0",gaze:"^1.1.3",glob:"^7.1.0",happen:"^0.3.2","js-yaml":"^4.0.0","json-stringify-pretty-compact":"^3.0.0",karma:"^6.3.5","karma-chrome-launcher":"^3.1.0","karma-coverage":"^2.0.3","karma-mocha":"^2.0.1","karma-remap-istanbul":"^0.6.0",mapillary_sprite_source:"^1.8.0","mapillary-js":"4.0.0",minimist:"^1.2.3",mocha:"^8.4.0","name-suggestion-index":"~6.0","node-fetch":"^2.6.1","npm-run-all":"^4.0.0","object-inspect":"1.10.3","osm-community-index":"~5.1.0",postcss:"^8.1.1","postcss-selector-prepend":"^0.5.0",rollup:"~2.52.8","rollup-plugin-includepaths":"~0.2.3","rollup-plugin-progress":"^1.1.1","rollup-plugin-visualizer":"~4.2.0",shelljs:"^0.8.0",shx:"^0.3.0",sinon:"^11.1.2","sinon-chai":"^3.7.0",smash:"0.0","static-server":"^2.2.1","svg-sprite":"1.5.1","uglify-js":"~3.13.0",vparse:"~1.1.0"};
var engines = {node:">=10"};
var browserslist = ["> 0.2%, last 6 major versions, Firefox ESR, IE 11, maintained node versions"];
var packageJSON = {
@@ -21120,42 +20709,41 @@
return _this;
}
- var classof = classofRaw$1;
-
- // `thisNumberValue` abstract operation
- // https://tc39.es/ecma262/#sec-thisnumbervalue
- var thisNumberValue$2 = function (value) {
- if (typeof value != 'number' && classof(value) != 'Number') {
- throw TypeError('Incorrect invocation');
- }
- return +value;
- };
-
- var toInteger$1 = toInteger$b;
+ var global$9 = global$1m;
+ var toIntegerOrInfinity$1 = toIntegerOrInfinity$b;
+ var toString$7 = toString$k;
var requireObjectCoercible$6 = requireObjectCoercible$e;
+ var RangeError$5 = global$9.RangeError;
+
// `String.prototype.repeat` method implementation
// https://tc39.es/ecma262/#sec-string.prototype.repeat
var stringRepeat = function repeat(count) {
- var str = String(requireObjectCoercible$6(this));
+ var str = toString$7(requireObjectCoercible$6(this));
var result = '';
- var n = toInteger$1(count);
- if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');
+ var n = toIntegerOrInfinity$1(count);
+ if (n < 0 || n == Infinity) throw RangeError$5('Wrong number of repetitions');
for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;
return result;
};
- var $$j = _export;
- var toInteger = toInteger$b;
- var thisNumberValue$1 = thisNumberValue$2;
- var repeat$2 = stringRepeat;
- var fails$7 = fails$N;
+ var $$q = _export;
+ var global$8 = global$1m;
+ var uncurryThis$a = functionUncurryThis;
+ var toIntegerOrInfinity = toIntegerOrInfinity$b;
+ var thisNumberValue$1 = thisNumberValue$3;
+ var $repeat$1 = stringRepeat;
+ var fails$7 = fails$S;
- var nativeToFixed = 1.0.toFixed;
- var floor = Math.floor;
+ var RangeError$4 = global$8.RangeError;
+ var String$1 = global$8.String;
+ var floor$2 = Math.floor;
+ var repeat$2 = uncurryThis$a($repeat$1);
+ var stringSlice$3 = uncurryThis$a(''.slice);
+ var un$ToFixed = uncurryThis$a(1.0.toFixed);
- var pow = function (x, n, acc) {
- return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
+ var pow$1 = function (x, n, acc) {
+ return n === 0 ? acc : n % 2 === 1 ? pow$1(x, n - 1, acc * x) : pow$1(x * x, n / 2, acc);
};
var log = function (x) {
@@ -21177,7 +20765,7 @@
while (++index < 6) {
c2 += n * data[index];
data[index] = c2 % 1e7;
- c2 = floor(c2 / 1e7);
+ c2 = floor$2(c2 / 1e7);
}
};
@@ -21186,7 +20774,7 @@
var c = 0;
while (--index >= 0) {
c += data[index];
- data[index] = floor(c / n);
+ data[index] = floor$2(c / n);
c = (c % n) * 1e7;
}
};
@@ -21196,44 +20784,44 @@
var s = '';
while (--index >= 0) {
if (s !== '' || index === 0 || data[index] !== 0) {
- var t = String(data[index]);
- s = s === '' ? t : s + repeat$2.call('0', 7 - t.length) + t;
+ var t = String$1(data[index]);
+ s = s === '' ? t : s + repeat$2('0', 7 - t.length) + t;
}
} return s;
};
- var FORCED$4 = nativeToFixed && (
- 0.00008.toFixed(3) !== '0.000' ||
- 0.9.toFixed(0) !== '1' ||
- 1.255.toFixed(2) !== '1.25' ||
- 1000000000000000128.0.toFixed(0) !== '1000000000000000128'
- ) || !fails$7(function () {
+ var FORCED$6 = fails$7(function () {
+ return un$ToFixed(0.00008, 3) !== '0.000' ||
+ un$ToFixed(0.9, 0) !== '1' ||
+ un$ToFixed(1.255, 2) !== '1.25' ||
+ un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128';
+ }) || !fails$7(function () {
// V8 ~ Android 4.3-
- nativeToFixed.call({});
+ un$ToFixed({});
});
// `Number.prototype.toFixed` method
// https://tc39.es/ecma262/#sec-number.prototype.tofixed
- $$j({ target: 'Number', proto: true, forced: FORCED$4 }, {
+ $$q({ target: 'Number', proto: true, forced: FORCED$6 }, {
toFixed: function toFixed(fractionDigits) {
var number = thisNumberValue$1(this);
- var fractDigits = toInteger(fractionDigits);
+ var fractDigits = toIntegerOrInfinity(fractionDigits);
var data = [0, 0, 0, 0, 0, 0];
var sign = '';
var result = '0';
var e, z, j, k;
- if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');
+ if (fractDigits < 0 || fractDigits > 20) throw RangeError$4('Incorrect fraction digits');
// eslint-disable-next-line no-self-compare -- NaN check
if (number != number) return 'NaN';
- if (number <= -1e21 || number >= 1e21) return String(number);
+ if (number <= -1e21 || number >= 1e21) return String$1(number);
if (number < 0) {
sign = '-';
number = -number;
}
if (number > 1e-21) {
- e = log(number * pow(2, 69, 1)) - 69;
- z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);
+ e = log(number * pow$1(2, 69, 1)) - 69;
+ z = e < 0 ? number * pow$1(2, -e, 1) : number / pow$1(2, e, 1);
z *= 0x10000000000000;
e = 52 - e;
if (e > 0) {
@@ -21243,7 +20831,7 @@
multiply(data, 1e7, 0);
j -= 7;
}
- multiply(data, pow(10, j, 1), 0);
+ multiply(data, pow$1(10, j, 1), 0);
j = e - 1;
while (j >= 23) {
divide(data, 1 << 23);
@@ -21256,23 +20844,23 @@
} else {
multiply(data, 0, z);
multiply(data, 1 << -e, 0);
- result = dataToString(data) + repeat$2.call('0', fractDigits);
+ result = dataToString(data) + repeat$2('0', fractDigits);
}
}
if (fractDigits > 0) {
k = result.length;
result = sign + (k <= fractDigits
- ? '0.' + repeat$2.call('0', fractDigits - k) + result
- : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits));
+ ? '0.' + repeat$2('0', fractDigits - k) + result
+ : stringSlice$3(result, 0, k - fractDigits) + '.' + stringSlice$3(result, k - fractDigits));
} else {
result = sign + result;
} return result;
}
});
- var global$1 = global$F;
+ var global$7 = global$1m;
- var globalIsFinite = global$1.isFinite;
+ var globalIsFinite = global$7.isFinite;
// `Number.isFinite` method
// https://tc39.es/ecma262/#sec-number.isfinite
@@ -21281,26 +20869,30 @@
return typeof it == 'number' && globalIsFinite(it);
};
- var $$i = _export;
+ var $$p = _export;
var numberIsFinite = numberIsFinite$1;
// `Number.isFinite` method
// https://tc39.es/ecma262/#sec-number.isfinite
- $$i({ target: 'Number', stat: true }, { isFinite: numberIsFinite });
+ $$p({ target: 'Number', stat: true }, { isFinite: numberIsFinite });
- var $$h = _export;
+ var $$o = _export;
+ var global$6 = global$1m;
+ var uncurryThis$9 = functionUncurryThis;
var toAbsoluteIndex = toAbsoluteIndex$8;
- var fromCharCode = String.fromCharCode;
+ var RangeError$3 = global$6.RangeError;
+ var fromCharCode$1 = String.fromCharCode;
// eslint-disable-next-line es/no-string-fromcodepoint -- required for testing
var $fromCodePoint = String.fromCodePoint;
+ var join$2 = uncurryThis$9([].join);
// length should be 1, old FF problem
var INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length != 1;
// `String.fromCodePoint` method
// https://tc39.es/ecma262/#sec-string.fromcodepoint
- $$h({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {
+ $$o({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
fromCodePoint: function fromCodePoint(x) {
var elements = [];
@@ -21309,19 +20901,21 @@
var code;
while (length > i) {
code = +arguments[i++];
- if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point');
- elements.push(code < 0x10000
- ? fromCharCode(code)
- : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00)
- );
- } return elements.join('');
+ if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError$3(code + ' is not a valid code point');
+ elements[i] = code < 0x10000
+ ? fromCharCode$1(code)
+ : fromCharCode$1(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00);
+ } return join$2(elements, '');
}
});
+ var call$2 = functionCall;
var fixRegExpWellKnownSymbolLogic = fixRegexpWellKnownSymbolLogic;
- var anObject = anObject$m;
+ var anObject = anObject$n;
var requireObjectCoercible$5 = requireObjectCoercible$e;
var sameValue = sameValue$1;
+ var toString$6 = toString$k;
+ var getMethod = getMethod$7;
var regExpExec = regexpExecAbstract;
// @@search logic
@@ -21331,17 +20925,17 @@
// https://tc39.es/ecma262/#sec-string.prototype.search
function search(regexp) {
var O = requireObjectCoercible$5(this);
- var searcher = regexp == undefined ? undefined : regexp[SEARCH];
- return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
+ var searcher = regexp == undefined ? undefined : getMethod(regexp, SEARCH);
+ return searcher ? call$2(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString$6(O));
},
// `RegExp.prototype[@@search]` method
// https://tc39.es/ecma262/#sec-regexp.prototype-@@search
function (string) {
- var res = maybeCallNative(nativeSearch, this, string);
- if (res.done) return res.value;
-
var rx = anObject(this);
- var S = String(string);
+ var S = toString$6(string);
+ var res = maybeCallNative(nativeSearch, rx, S);
+
+ if (res.done) return res.value;
var previousLastIndex = rx.lastIndex;
if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;
@@ -28352,20 +27946,20 @@
var inputValidation = {};
- var $$g = _export;
+ var $$n = _export;
var $includes = arrayIncludes.includes;
- var addToUnscopables$1 = addToUnscopables$5;
+ var addToUnscopables$2 = addToUnscopables$6;
// `Array.prototype.includes` method
// https://tc39.es/ecma262/#sec-array.prototype.includes
- $$g({ target: 'Array', proto: true }, {
+ $$n({ target: 'Array', proto: true }, {
includes: function includes(el /* , fromIndex = 0 */) {
return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
}
});
// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables$1('includes');
+ addToUnscopables$2('includes');
var validateCenter$1 = {};
@@ -28562,28 +28156,31 @@
return argument === null || argument === undefined;
}
- var $$f = _export;
+ var $$m = _export;
// `Number.EPSILON` constant
// https://tc39.es/ecma262/#sec-number.epsilon
- $$f({ target: 'Number', stat: true }, {
+ $$m({ target: 'Number', stat: true }, {
EPSILON: Math.pow(2, -52)
});
+ var uncurryThis$8 = functionUncurryThis;
var requireObjectCoercible$4 = requireObjectCoercible$e;
+ var toString$5 = toString$k;
var quot = /"/g;
+ var replace$2 = uncurryThis$8(''.replace);
// `CreateHTML` abstract operation
// https://tc39.es/ecma262/#sec-createhtml
var createHtml = function (string, tag, attribute, value) {
- var S = String(requireObjectCoercible$4(string));
+ var S = toString$5(requireObjectCoercible$4(string));
var p1 = '<' + tag;
- if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '"') + '"';
+ if (attribute !== '') p1 += ' ' + attribute + '="' + replace$2(toString$5(value), quot, '"') + '"';
return p1 + '>' + S + '' + tag + '>';
};
- var fails$6 = fails$N;
+ var fails$6 = fails$S;
// check the existence of a method, lowercase
// of a tag and escaping quotes in arguments
@@ -28594,13 +28191,13 @@
});
};
- var $$e = _export;
+ var $$l = _export;
var createHTML = createHtml;
var forcedStringHTMLMethod = stringHtmlForced;
// `String.prototype.link` method
// https://tc39.es/ecma262/#sec-string.prototype.link
- $$e({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {
+ $$l({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {
link: function link(url) {
return createHTML(this, 'a', 'href', url);
}
@@ -28720,7 +28317,7 @@
return node;
}
- function split(key, v, comparator) {
+ function split$2(key, v, comparator) {
var left = null;
var right = null;
@@ -29193,7 +28790,7 @@
Tree.prototype.update = function (key, newKey, newData) {
var comparator = this._comparator;
- var _a = split(key, this._root, comparator),
+ var _a = split$2(key, this._root, comparator),
left = _a.left,
right = _a.right;
@@ -29207,7 +28804,7 @@
};
Tree.prototype.split = function (key) {
- return split(key, this._root, this._comparator);
+ return split$2(key, this._root, this._comparator);
};
return Tree;
@@ -31276,34 +30873,35 @@
var precision = geojsonPrecision.exports;
- var $$d = _export;
- var fails$5 = fails$N;
- var toObject = toObject$i;
- var toPrimitive = toPrimitive$7;
+ var $$k = _export;
+ var fails$5 = fails$S;
+ var toObject$1 = toObject$j;
+ var toPrimitive = toPrimitive$3;
- var FORCED$3 = fails$5(function () {
+ var FORCED$5 = fails$5(function () {
return new Date(NaN).toJSON() !== null
|| Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;
});
// `Date.prototype.toJSON` method
// https://tc39.es/ecma262/#sec-date.prototype.tojson
- $$d({ target: 'Date', proto: true, forced: FORCED$3 }, {
+ $$k({ target: 'Date', proto: true, forced: FORCED$5 }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
toJSON: function toJSON(key) {
- var O = toObject(this);
- var pv = toPrimitive(O);
+ var O = toObject$1(this);
+ var pv = toPrimitive(O, 'number');
return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();
}
});
- var $$c = _export;
+ var $$j = _export;
+ var call$1 = functionCall;
// `URL.prototype.toJSON` method
// https://url.spec.whatwg.org/#dom-url-tojson
- $$c({ target: 'URL', proto: true, enumerable: true }, {
+ $$j({ target: 'URL', proto: true, enumerable: true }, {
toJSON: function toJSON() {
- return URL.prototype.toString.call(this);
+ return call$1(URL.prototype.toString, this);
}
});
@@ -31879,11 +31477,11 @@
return aRank > bRank ? 1 : aRank < bRank ? -1 : a.id.localeCompare(b.id);
}
- var $$b = _export;
+ var $$i = _export;
// `Number.MAX_SAFE_INTEGER` constant
// https://tc39.es/ecma262/#sec-number.max_safe_integer
- $$b({ target: 'Number', stat: true }, {
+ $$i({ target: 'Number', stat: true }, {
MAX_SAFE_INTEGER: 0x1FFFFFFFFFFFFF
});
@@ -32830,6 +32428,8 @@
// Like selection.property('value', ...), but avoids no-op value sets,
// which can result in layout/repaint thrashing in some situations.
+
+ /** @returns {string} */
function utilGetSetValue(selection, value) {
function d3_selection_value(value) {
function valueNull() {
@@ -33904,9 +33504,9 @@
return _this;
}
- var $$a = _export;
+ var $$h = _export;
var $findIndex = arrayIteration.findIndex;
- var addToUnscopables = addToUnscopables$5;
+ var addToUnscopables$1 = addToUnscopables$6;
var FIND_INDEX = 'findIndex';
var SKIPS_HOLES = true;
@@ -33916,24 +33516,27 @@
// `Array.prototype.findIndex` method
// https://tc39.es/ecma262/#sec-array.prototype.findindex
- $$a({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {
+ $$h({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {
findIndex: function findIndex(callbackfn /* , that = undefined */) {
return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables(FIND_INDEX);
+ addToUnscopables$1(FIND_INDEX);
+ var global$5 = global$1m;
var isRegExp = isRegexp;
+ var TypeError$3 = global$5.TypeError;
+
var notARegexp = function (it) {
if (isRegExp(it)) {
- throw TypeError("The method doesn't accept regular expressions");
+ throw TypeError$3("The method doesn't accept regular expressions");
} return it;
};
- var wellKnownSymbol = wellKnownSymbol$s;
+ var wellKnownSymbol = wellKnownSymbol$t;
var MATCH = wellKnownSymbol('match');
@@ -33949,20 +33552,1043 @@
} return false;
};
- var $$9 = _export;
+ var $$g = _export;
+ var uncurryThis$7 = functionUncurryThis;
var notARegExp$2 = notARegexp;
var requireObjectCoercible$3 = requireObjectCoercible$e;
+ var toString$4 = toString$k;
var correctIsRegExpLogic$2 = correctIsRegexpLogic;
+ var stringIndexOf = uncurryThis$7(''.indexOf);
+
// `String.prototype.includes` method
// https://tc39.es/ecma262/#sec-string.prototype.includes
- $$9({ target: 'String', proto: true, forced: !correctIsRegExpLogic$2('includes') }, {
+ $$g({ target: 'String', proto: true, forced: !correctIsRegExpLogic$2('includes') }, {
includes: function includes(searchString /* , position = 0 */) {
- return !!~String(requireObjectCoercible$3(this))
- .indexOf(notARegExp$2(searchString), arguments.length > 1 ? arguments[1] : undefined);
+ return !!~stringIndexOf(
+ toString$4(requireObjectCoercible$3(this)),
+ toString$4(notARegExp$2(searchString)),
+ arguments.length > 1 ? arguments[1] : undefined
+ );
}
});
+ /** Detect free variable `global` from Node.js. */
+ var freeGlobal = (typeof global === "undefined" ? "undefined" : _typeof(global)) == 'object' && global && global.Object === Object && global;
+
+ /** Detect free variable `self`. */
+
+ var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self && self.Object === Object && self;
+ /** Used as a reference to the global object. */
+
+ var root = freeGlobal || freeSelf || Function('return this')();
+
+ /** Built-in value references. */
+
+ var _Symbol = root.Symbol;
+
+ /** Used for built-in method references. */
+
+ var objectProto$1 = Object.prototype;
+ /** Used to check objects for own properties. */
+
+ var hasOwnProperty$2 = objectProto$1.hasOwnProperty;
+ /**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+
+ var nativeObjectToString$1 = objectProto$1.toString;
+ /** Built-in value references. */
+
+ var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined;
+ /**
+ * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the raw `toStringTag`.
+ */
+
+ function getRawTag(value) {
+ var isOwn = hasOwnProperty$2.call(value, symToStringTag$1),
+ tag = value[symToStringTag$1];
+
+ try {
+ value[symToStringTag$1] = undefined;
+ var unmasked = true;
+ } catch (e) {}
+
+ var result = nativeObjectToString$1.call(value);
+
+ if (unmasked) {
+ if (isOwn) {
+ value[symToStringTag$1] = tag;
+ } else {
+ delete value[symToStringTag$1];
+ }
+ }
+
+ return result;
+ }
+
+ /** Used for built-in method references. */
+ var objectProto = Object.prototype;
+ /**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+
+ var nativeObjectToString = objectProto.toString;
+ /**
+ * Converts `value` to a string using `Object.prototype.toString`.
+ *
+ * @private
+ * @param {*} value The value to convert.
+ * @returns {string} Returns the converted string.
+ */
+
+ function objectToString(value) {
+ return nativeObjectToString.call(value);
+ }
+
+ /** `Object#toString` result references. */
+
+ var nullTag = '[object Null]',
+ undefinedTag = '[object Undefined]';
+ /** Built-in value references. */
+
+ var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;
+ /**
+ * The base implementation of `getTag` without fallbacks for buggy environments.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+
+ function baseGetTag(value) {
+ if (value == null) {
+ return value === undefined ? undefinedTag : nullTag;
+ }
+
+ return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
+ }
+
+ /**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+ function isObjectLike(value) {
+ return value != null && _typeof(value) == 'object';
+ }
+
+ /** `Object#toString` result references. */
+
+ var symbolTag = '[object Symbol]';
+ /**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+
+ function isSymbol(value) {
+ return _typeof(value) == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag;
+ }
+
+ /**
+ * A specialized version of `_.map` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+ function arrayMap(array, iteratee) {
+ var index = -1,
+ length = array == null ? 0 : array.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+
+ return result;
+ }
+
+ /**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+ var isArray$1 = Array.isArray;
+
+ /** Used as references for various `Number` constants. */
+
+ var INFINITY = 1 / 0;
+ /** Used to convert symbols to primitives and strings. */
+
+ var symbolProto = _Symbol ? _Symbol.prototype : undefined,
+ symbolToString = symbolProto ? symbolProto.toString : undefined;
+ /**
+ * The base implementation of `_.toString` which doesn't convert nullish
+ * values to empty strings.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+
+ function baseToString(value) {
+ // Exit early for strings to avoid a performance hit in some environments.
+ if (typeof value == 'string') {
+ return value;
+ }
+
+ if (isArray$1(value)) {
+ // Recursively convert values (susceptible to call stack limits).
+ return arrayMap(value, baseToString) + '';
+ }
+
+ if (isSymbol(value)) {
+ return symbolToString ? symbolToString.call(value) : '';
+ }
+
+ var result = value + '';
+ return result == '0' && 1 / value == -INFINITY ? '-0' : result;
+ }
+
+ /** Used to match a single whitespace character. */
+ var reWhitespace = /\s/;
+ /**
+ * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
+ * character of `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the index of the last non-whitespace character.
+ */
+
+ function trimmedEndIndex(string) {
+ var index = string.length;
+
+ while (index-- && reWhitespace.test(string.charAt(index))) {}
+
+ return index;
+ }
+
+ /** Used to match leading whitespace. */
+
+ var reTrimStart = /^\s+/;
+ /**
+ * The base implementation of `_.trim`.
+ *
+ * @private
+ * @param {string} string The string to trim.
+ * @returns {string} Returns the trimmed string.
+ */
+
+ function baseTrim(string) {
+ return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string;
+ }
+
+ /**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+ function isObject$2(value) {
+ var type = _typeof(value);
+
+ return value != null && (type == 'object' || type == 'function');
+ }
+
+ /** Used as references for various `Number` constants. */
+
+ var NAN = 0 / 0;
+ /** Used to detect bad signed hexadecimal string values. */
+
+ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
+ /** Used to detect binary string values. */
+
+ var reIsBinary = /^0b[01]+$/i;
+ /** Used to detect octal string values. */
+
+ var reIsOctal = /^0o[0-7]+$/i;
+ /** Built-in method references without a dependency on `root`. */
+
+ var freeParseInt = parseInt;
+ /**
+ * Converts `value` to a number.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {number} Returns the number.
+ * @example
+ *
+ * _.toNumber(3.2);
+ * // => 3.2
+ *
+ * _.toNumber(Number.MIN_VALUE);
+ * // => 5e-324
+ *
+ * _.toNumber(Infinity);
+ * // => Infinity
+ *
+ * _.toNumber('3.2');
+ * // => 3.2
+ */
+
+ function toNumber(value) {
+ if (typeof value == 'number') {
+ return value;
+ }
+
+ if (isSymbol(value)) {
+ return NAN;
+ }
+
+ if (isObject$2(value)) {
+ var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
+ value = isObject$2(other) ? other + '' : other;
+ }
+
+ if (typeof value != 'string') {
+ return value === 0 ? value : +value;
+ }
+
+ value = baseTrim(value);
+ var isBinary = reIsBinary.test(value);
+ return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
+ }
+
+ /**
+ * Converts `value` to a string. An empty string is returned for `null`
+ * and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {string} Returns the converted string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+
+ function toString$3(value) {
+ return value == null ? '' : baseToString(value);
+ }
+
+ /**
+ * The base implementation of `_.propertyOf` without support for deep paths.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Function} Returns the new accessor function.
+ */
+ function basePropertyOf(object) {
+ return function (key) {
+ return object == null ? undefined : object[key];
+ };
+ }
+
+ /**
+ * Gets the timestamp of the number of milliseconds that have elapsed since
+ * the Unix epoch (1 January 1970 00:00:00 UTC).
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Date
+ * @returns {number} Returns the timestamp.
+ * @example
+ *
+ * _.defer(function(stamp) {
+ * console.log(_.now() - stamp);
+ * }, _.now());
+ * // => Logs the number of milliseconds it took for the deferred invocation.
+ */
+
+ var now = function now() {
+ return root.Date.now();
+ };
+
+ /** Error message constants. */
+
+ var FUNC_ERROR_TEXT$1 = 'Expected a function';
+ /* Built-in method references for those with the same name as other `lodash` methods. */
+
+ var nativeMax = Math.max,
+ nativeMin = Math.min;
+ /**
+ * Creates a debounced function that delays invoking `func` until after `wait`
+ * milliseconds have elapsed since the last time the debounced function was
+ * invoked. The debounced function comes with a `cancel` method to cancel
+ * delayed `func` invocations and a `flush` method to immediately invoke them.
+ * Provide `options` to indicate whether `func` should be invoked on the
+ * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
+ * with the last arguments provided to the debounced function. Subsequent
+ * calls to the debounced function return the result of the last `func`
+ * invocation.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is
+ * invoked on the trailing edge of the timeout only if the debounced function
+ * is invoked more than once during the `wait` timeout.
+ *
+ * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
+ * until to the next tick, similar to `setTimeout` with a timeout of `0`.
+ *
+ * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
+ * for details over the differences between `_.debounce` and `_.throttle`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to debounce.
+ * @param {number} [wait=0] The number of milliseconds to delay.
+ * @param {Object} [options={}] The options object.
+ * @param {boolean} [options.leading=false]
+ * Specify invoking on the leading edge of the timeout.
+ * @param {number} [options.maxWait]
+ * The maximum time `func` is allowed to be delayed before it's invoked.
+ * @param {boolean} [options.trailing=true]
+ * Specify invoking on the trailing edge of the timeout.
+ * @returns {Function} Returns the new debounced function.
+ * @example
+ *
+ * // Avoid costly calculations while the window size is in flux.
+ * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
+ *
+ * // Invoke `sendMail` when clicked, debouncing subsequent calls.
+ * jQuery(element).on('click', _.debounce(sendMail, 300, {
+ * 'leading': true,
+ * 'trailing': false
+ * }));
+ *
+ * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
+ * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
+ * var source = new EventSource('/stream');
+ * jQuery(source).on('message', debounced);
+ *
+ * // Cancel the trailing debounced invocation.
+ * jQuery(window).on('popstate', debounced.cancel);
+ */
+
+ function debounce(func, wait, options) {
+ var lastArgs,
+ lastThis,
+ maxWait,
+ result,
+ timerId,
+ lastCallTime,
+ lastInvokeTime = 0,
+ leading = false,
+ maxing = false,
+ trailing = true;
+
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT$1);
+ }
+
+ wait = toNumber(wait) || 0;
+
+ if (isObject$2(options)) {
+ leading = !!options.leading;
+ maxing = 'maxWait' in options;
+ maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
+ }
+
+ function invokeFunc(time) {
+ var args = lastArgs,
+ thisArg = lastThis;
+ lastArgs = lastThis = undefined;
+ lastInvokeTime = time;
+ result = func.apply(thisArg, args);
+ return result;
+ }
+
+ function leadingEdge(time) {
+ // Reset any `maxWait` timer.
+ lastInvokeTime = time; // Start the timer for the trailing edge.
+
+ timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.
+
+ return leading ? invokeFunc(time) : result;
+ }
+
+ function remainingWait(time) {
+ var timeSinceLastCall = time - lastCallTime,
+ timeSinceLastInvoke = time - lastInvokeTime,
+ timeWaiting = wait - timeSinceLastCall;
+ return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
+ }
+
+ function shouldInvoke(time) {
+ var timeSinceLastCall = time - lastCallTime,
+ timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the
+ // trailing edge, the system time has gone backwards and we're treating
+ // it as the trailing edge, or we've hit the `maxWait` limit.
+
+ return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
+ }
+
+ function timerExpired() {
+ var time = now();
+
+ if (shouldInvoke(time)) {
+ return trailingEdge(time);
+ } // Restart the timer.
+
+
+ timerId = setTimeout(timerExpired, remainingWait(time));
+ }
+
+ function trailingEdge(time) {
+ timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been
+ // debounced at least once.
+
+ if (trailing && lastArgs) {
+ return invokeFunc(time);
+ }
+
+ lastArgs = lastThis = undefined;
+ return result;
+ }
+
+ function cancel() {
+ if (timerId !== undefined) {
+ clearTimeout(timerId);
+ }
+
+ lastInvokeTime = 0;
+ lastArgs = lastCallTime = lastThis = timerId = undefined;
+ }
+
+ function flush() {
+ return timerId === undefined ? result : trailingEdge(now());
+ }
+
+ function debounced() {
+ var time = now(),
+ isInvoking = shouldInvoke(time);
+ lastArgs = arguments;
+ lastThis = this;
+ lastCallTime = time;
+
+ if (isInvoking) {
+ if (timerId === undefined) {
+ return leadingEdge(lastCallTime);
+ }
+
+ if (maxing) {
+ // Handle invocations in a tight loop.
+ clearTimeout(timerId);
+ timerId = setTimeout(timerExpired, wait);
+ return invokeFunc(lastCallTime);
+ }
+ }
+
+ if (timerId === undefined) {
+ timerId = setTimeout(timerExpired, wait);
+ }
+
+ return result;
+ }
+
+ debounced.cancel = cancel;
+ debounced.flush = flush;
+ return debounced;
+ }
+
+ /** Used to map characters to HTML entities. */
+
+ var htmlEscapes = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ "'": '''
+ };
+ /**
+ * Used by `_.escape` to convert characters to HTML entities.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */
+
+ var escapeHtmlChar = basePropertyOf(htmlEscapes);
+
+ /** Used to match HTML entities and HTML characters. */
+
+ var reUnescapedHtml = /[&<>"']/g,
+ reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
+ /**
+ * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
+ * corresponding HTML entities.
+ *
+ * **Note:** No other characters are escaped. To escape additional
+ * characters use a third-party library like [_he_](https://mths.be/he).
+ *
+ * Though the ">" character is escaped for symmetry, characters like
+ * ">" and "/" don't need escaping in HTML and have no special meaning
+ * unless they're part of a tag or unquoted attribute value. See
+ * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
+ * (under "semi-related fun fact") for more details.
+ *
+ * When working with HTML you should always
+ * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
+ * XSS vectors.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to escape.
+ * @returns {string} Returns the escaped string.
+ * @example
+ *
+ * _.escape('fred, barney, & pebbles');
+ * // => 'fred, barney, & pebbles'
+ */
+
+ function escape$4(string) {
+ string = toString$3(string);
+ return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;
+ }
+
+ /** Error message constants. */
+
+ var FUNC_ERROR_TEXT = 'Expected a function';
+ /**
+ * Creates a throttled function that only invokes `func` at most once per
+ * every `wait` milliseconds. The throttled function comes with a `cancel`
+ * method to cancel delayed `func` invocations and a `flush` method to
+ * immediately invoke them. Provide `options` to indicate whether `func`
+ * should be invoked on the leading and/or trailing edge of the `wait`
+ * timeout. The `func` is invoked with the last arguments provided to the
+ * throttled function. Subsequent calls to the throttled function return the
+ * result of the last `func` invocation.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is
+ * invoked on the trailing edge of the timeout only if the throttled function
+ * is invoked more than once during the `wait` timeout.
+ *
+ * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
+ * until to the next tick, similar to `setTimeout` with a timeout of `0`.
+ *
+ * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
+ * for details over the differences between `_.throttle` and `_.debounce`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to throttle.
+ * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
+ * @param {Object} [options={}] The options object.
+ * @param {boolean} [options.leading=true]
+ * Specify invoking on the leading edge of the timeout.
+ * @param {boolean} [options.trailing=true]
+ * Specify invoking on the trailing edge of the timeout.
+ * @returns {Function} Returns the new throttled function.
+ * @example
+ *
+ * // Avoid excessively updating the position while scrolling.
+ * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
+ *
+ * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
+ * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
+ * jQuery(element).on('click', throttled);
+ *
+ * // Cancel the trailing throttled invocation.
+ * jQuery(window).on('popstate', throttled.cancel);
+ */
+
+ function throttle(func, wait, options) {
+ var leading = true,
+ trailing = true;
+
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ if (isObject$2(options)) {
+ leading = 'leading' in options ? !!options.leading : leading;
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
+ }
+
+ return debounce(func, wait, {
+ 'leading': leading,
+ 'maxWait': wait,
+ 'trailing': trailing
+ });
+ }
+
+ var $$f = _export;
+ var lastIndexOf = arrayLastIndexOf;
+
+ // `Array.prototype.lastIndexOf` method
+ // https://tc39.es/ecma262/#sec-array.prototype.lastindexof
+ // eslint-disable-next-line es/no-array-prototype-lastindexof -- required for testing
+ $$f({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, {
+ lastIndexOf: lastIndexOf
+ });
+
+ var global$4 = global$1m;
+ var isArray = isArray$8;
+ var lengthOfArrayLike$1 = lengthOfArrayLike$g;
+ var bind$3 = functionBindContext;
+
+ var TypeError$2 = global$4.TypeError;
+
+ // `FlattenIntoArray` abstract operation
+ // https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray
+ var flattenIntoArray$1 = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {
+ var targetIndex = start;
+ var sourceIndex = 0;
+ var mapFn = mapper ? bind$3(mapper, thisArg) : false;
+ var element, elementLen;
+
+ while (sourceIndex < sourceLen) {
+ if (sourceIndex in source) {
+ element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];
+
+ if (depth > 0 && isArray(element)) {
+ elementLen = lengthOfArrayLike$1(element);
+ targetIndex = flattenIntoArray$1(target, original, element, elementLen, targetIndex, depth - 1) - 1;
+ } else {
+ if (targetIndex >= 0x1FFFFFFFFFFFFF) throw TypeError$2('Exceed the acceptable array length');
+ target[targetIndex] = element;
+ }
+
+ targetIndex++;
+ }
+ sourceIndex++;
+ }
+ return targetIndex;
+ };
+
+ var flattenIntoArray_1 = flattenIntoArray$1;
+
+ var $$e = _export;
+ var flattenIntoArray = flattenIntoArray_1;
+ var aCallable = aCallable$a;
+ var toObject = toObject$j;
+ var lengthOfArrayLike = lengthOfArrayLike$g;
+ var arraySpeciesCreate = arraySpeciesCreate$4;
+
+ // `Array.prototype.flatMap` method
+ // https://tc39.es/ecma262/#sec-array.prototype.flatmap
+ $$e({ target: 'Array', proto: true }, {
+ flatMap: function flatMap(callbackfn /* , thisArg */) {
+ var O = toObject(this);
+ var sourceLen = lengthOfArrayLike(O);
+ var A;
+ aCallable(callbackfn);
+ A = arraySpeciesCreate(O, 0);
+ A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+ return A;
+ }
+ });
+
+ // this method was added to unscopables after implementation
+ // in popular engines, so it's moved to a separate module
+ var addToUnscopables = addToUnscopables$6;
+
+ // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
+ addToUnscopables('flatMap');
+
+ var $$d = _export;
+ var uncurryThis$6 = functionUncurryThis;
+ var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f;
+ var toLength$2 = toLength$c;
+ var toString$2 = toString$k;
+ var notARegExp$1 = notARegexp;
+ var requireObjectCoercible$2 = requireObjectCoercible$e;
+ var correctIsRegExpLogic$1 = correctIsRegexpLogic;
+
+ // eslint-disable-next-line es/no-string-prototype-endswith -- safe
+ var un$EndsWith = uncurryThis$6(''.endsWith);
+ var slice$2 = uncurryThis$6(''.slice);
+ var min$1 = Math.min;
+
+ var CORRECT_IS_REGEXP_LOGIC$1 = correctIsRegExpLogic$1('endsWith');
+ // https://github.com/zloirock/core-js/pull/702
+ var MDN_POLYFILL_BUG$1 = !CORRECT_IS_REGEXP_LOGIC$1 && !!function () {
+ var descriptor = getOwnPropertyDescriptor$1(String.prototype, 'endsWith');
+ return descriptor && !descriptor.writable;
+ }();
+
+ // `String.prototype.endsWith` method
+ // https://tc39.es/ecma262/#sec-string.prototype.endswith
+ $$d({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG$1 && !CORRECT_IS_REGEXP_LOGIC$1 }, {
+ endsWith: function endsWith(searchString /* , endPosition = @length */) {
+ var that = toString$2(requireObjectCoercible$2(this));
+ notARegExp$1(searchString);
+ var endPosition = arguments.length > 1 ? arguments[1] : undefined;
+ var len = that.length;
+ var end = endPosition === undefined ? len : min$1(toLength$2(endPosition), len);
+ var search = toString$2(searchString);
+ return un$EndsWith
+ ? un$EndsWith(that, search, end)
+ : slice$2(that, end - search.length, end) === search;
+ }
+ });
+
+ // https://github.com/tc39/proposal-string-pad-start-end
+ var uncurryThis$5 = functionUncurryThis;
+ var toLength$1 = toLength$c;
+ var toString$1 = toString$k;
+ var $repeat = stringRepeat;
+ var requireObjectCoercible$1 = requireObjectCoercible$e;
+
+ var repeat$1 = uncurryThis$5($repeat);
+ var stringSlice$2 = uncurryThis$5(''.slice);
+ var ceil = Math.ceil;
+
+ // `String.prototype.{ padStart, padEnd }` methods implementation
+ var createMethod = function (IS_END) {
+ return function ($this, maxLength, fillString) {
+ var S = toString$1(requireObjectCoercible$1($this));
+ var intMaxLength = toLength$1(maxLength);
+ var stringLength = S.length;
+ var fillStr = fillString === undefined ? ' ' : toString$1(fillString);
+ var fillLen, stringFiller;
+ if (intMaxLength <= stringLength || fillStr == '') return S;
+ fillLen = intMaxLength - stringLength;
+ stringFiller = repeat$1(fillStr, ceil(fillLen / fillStr.length));
+ if (stringFiller.length > fillLen) stringFiller = stringSlice$2(stringFiller, 0, fillLen);
+ return IS_END ? S + stringFiller : stringFiller + S;
+ };
+ };
+
+ var stringPad = {
+ // `String.prototype.padStart` method
+ // https://tc39.es/ecma262/#sec-string.prototype.padstart
+ start: createMethod(false),
+ // `String.prototype.padEnd` method
+ // https://tc39.es/ecma262/#sec-string.prototype.padend
+ end: createMethod(true)
+ };
+
+ // https://github.com/zloirock/core-js/issues/280
+ var userAgent = engineUserAgent;
+
+ var stringPadWebkitBug = /Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(userAgent);
+
+ var $$c = _export;
+ var $padEnd = stringPad.end;
+ var WEBKIT_BUG$1 = stringPadWebkitBug;
+
+ // `String.prototype.padEnd` method
+ // https://tc39.es/ecma262/#sec-string.prototype.padend
+ $$c({ target: 'String', proto: true, forced: WEBKIT_BUG$1 }, {
+ padEnd: function padEnd(maxLength /* , fillString = ' ' */) {
+ return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);
+ }
+ });
+
+ var $$b = _export;
+ var $padStart = stringPad.start;
+ var WEBKIT_BUG = stringPadWebkitBug;
+
+ // `String.prototype.padStart` method
+ // https://tc39.es/ecma262/#sec-string.prototype.padstart
+ $$b({ target: 'String', proto: true, forced: WEBKIT_BUG }, {
+ padStart: function padStart(maxLength /* , fillString = ' ' */) {
+ return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);
+ }
+ });
+
+ var $$a = _export;
+ var $reduceRight = arrayReduce.right;
+ var arrayMethodIsStrict = arrayMethodIsStrict$9;
+ var CHROME_VERSION = engineV8Version;
+ var IS_NODE = engineIsNode;
+
+ var STRICT_METHOD = arrayMethodIsStrict('reduceRight');
+ // Chrome 80-82 has a critical bug
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
+ var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;
+
+ // `Array.prototype.reduceRight` method
+ // https://tc39.es/ecma262/#sec-array.prototype.reduceright
+ $$a({ target: 'Array', proto: true, forced: !STRICT_METHOD || CHROME_BUG }, {
+ reduceRight: function reduceRight(callbackfn /* , initialValue */) {
+ return $reduceRight(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
+ }
+ });
+
+ var $$9 = _export;
+ var repeat = stringRepeat;
+
+ // `String.prototype.repeat` method
+ // https://tc39.es/ecma262/#sec-string.prototype.repeat
+ $$9({ target: 'String', proto: true }, {
+ repeat: repeat
+ });
+
+ var $$8 = _export;
+ var uncurryThis$4 = functionUncurryThis;
+ var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
+ var toLength = toLength$c;
+ var toString = toString$k;
+ var notARegExp = notARegexp;
+ var requireObjectCoercible = requireObjectCoercible$e;
+ var correctIsRegExpLogic = correctIsRegexpLogic;
+
+ // eslint-disable-next-line es/no-string-prototype-startswith -- safe
+ var un$StartsWith = uncurryThis$4(''.startsWith);
+ var stringSlice$1 = uncurryThis$4(''.slice);
+ var min = Math.min;
+
+ var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');
+ // https://github.com/zloirock/core-js/pull/702
+ var MDN_POLYFILL_BUG = !CORRECT_IS_REGEXP_LOGIC && !!function () {
+ var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');
+ return descriptor && !descriptor.writable;
+ }();
+
+ // `String.prototype.startsWith` method
+ // https://tc39.es/ecma262/#sec-string.prototype.startswith
+ $$8({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {
+ startsWith: function startsWith(searchString /* , position = 0 */) {
+ var that = toString(requireObjectCoercible(this));
+ notARegExp(searchString);
+ var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));
+ var search = toString(searchString);
+ return un$StartsWith
+ ? un$StartsWith(that, search, index)
+ : stringSlice$1(that, index, index + search.length) === search;
+ }
+ });
+
+ var $$7 = _export;
+ var $trimEnd = stringTrim.end;
+ var forcedStringTrimMethod$1 = stringTrimForced;
+
+ var FORCED$4 = forcedStringTrimMethod$1('trimEnd');
+
+ var trimEnd = FORCED$4 ? function trimEnd() {
+ return $trimEnd(this);
+ // eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe
+ } : ''.trimEnd;
+
+ // `String.prototype.{ trimEnd, trimRight }` methods
+ // https://tc39.es/ecma262/#sec-string.prototype.trimend
+ // https://tc39.es/ecma262/#String.prototype.trimright
+ $$7({ target: 'String', proto: true, name: 'trimEnd', forced: FORCED$4 }, {
+ trimEnd: trimEnd,
+ trimRight: trimEnd
+ });
+
+ var $$6 = _export;
+ var $trimStart = stringTrim.start;
+ var forcedStringTrimMethod = stringTrimForced;
+
+ var FORCED$3 = forcedStringTrimMethod('trimStart');
+
+ var trimStart = FORCED$3 ? function trimStart() {
+ return $trimStart(this);
+ // eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe
+ } : ''.trimStart;
+
+ // `String.prototype.{ trimStart, trimLeft }` methods
+ // https://tc39.es/ecma262/#sec-string.prototype.trimstart
+ // https://tc39.es/ecma262/#String.prototype.trimleft
+ $$6({ target: 'String', proto: true, name: 'trimStart', forced: FORCED$3 }, {
+ trimStart: trimStart,
+ trimLeft: trimStart
+ });
+
var _mainLocalizer = coreLocalizer(); // singleton
@@ -34318,15 +34944,41 @@
return localizer.tInfo(stringId, replacements, locale).text;
}; // Returns the localized text wrapped in an HTML element encoding the locale info
+ /**
+ * @deprecated This method is considered deprecated. Instead, use the direct DOM manipulating
+ * method `t.append`.
+ */
+
localizer.t.html = function (stringId, replacements, locale) {
+ // replacement string might be html unsafe, so we need to escape it except if it is explicitly marked as html code
+ replacements = Object.assign({}, replacements);
+
+ for (var k in replacements) {
+ if (typeof replacements[k] === 'string') {
+ replacements[k] = escape$4(replacements[k]);
+ }
+
+ if (_typeof(replacements[k]) === 'object' && typeof replacements[k].html === 'string') {
+ replacements[k] = replacements[k].html;
+ }
+ }
+
var info = localizer.tInfo(stringId, replacements, locale); // text may be empty or undefined if `replacements.default` is
- return info.text ? localizer.htmlForLocalizedText(info.text, info.locale) : '';
- };
+ if (info.text) {
+ return "").concat(info.text, "");
+ } else {
+ return '';
+ }
+ }; // Adds localized text wrapped as an HTML span element with locale info to the DOM
- localizer.htmlForLocalizedText = function (text, localeCode) {
- return "").concat(text, "");
+
+ localizer.t.append = function (stringId, replacements, locale) {
+ return function (selection) {
+ var info = localizer.tInfo(stringId, replacements, locale);
+ return selection.append('span').attr('class', 'localized-text').attr('lang', info.locale || 'und').text((replacements && replacements.prefix || '') + info.text + (replacements && replacements.suffix || ''));
+ };
};
localizer.languageName = function (code, options) {
@@ -34704,16 +35356,6 @@
return _this;
}
- var $$8 = _export;
- var lastIndexOf = arrayLastIndexOf;
-
- // `Array.prototype.lastIndexOf` method
- // https://tc39.es/ecma262/#sec-array.prototype.lastindexof
- // eslint-disable-next-line es/no-array-prototype-lastindexof -- required for testing
- $$8({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, {
- lastIndexOf: lastIndexOf
- });
-
// `presetPreset` decorates a given `preset` Object
// with some extra methods for searching and matching geometry
//
@@ -36260,6 +36902,55 @@
return Array.from(str).slice(0, limit).join('');
}
+ function toNumericID(id) {
+ var match = id.match(/^[cnwr](-?\d+)$/);
+
+ if (match) {
+ return parseInt(match[1], 10);
+ }
+
+ return NaN;
+ }
+
+ function compareNumericIDs(left, right) {
+ if (isNaN(left) && isNaN(right)) return -1;
+ if (isNaN(left)) return 1;
+ if (isNaN(right)) return -1;
+ if (Math.sign(left) !== Math.sign(right)) return -Math.sign(left);
+ if (Math.sign(left) < 0) return Math.sign(right - left);
+ return Math.sign(left - right);
+ } // Returns -1 if the first parameter ID is older than the second,
+ // 1 if the second parameter is older, 0 if they are the same.
+ // If both IDs are test IDs, the function returns -1.
+
+
+ function utilCompareIDs(left, right) {
+ return compareNumericIDs(toNumericID(left), toNumericID(right));
+ } // Returns the chronologically oldest ID in the list.
+ // Database IDs (with positive numbers) before editor ones (with negative numbers).
+ // Among each category, the closest number to 0 is the oldest.
+ // Test IDs (any string that does not conform to OSM's ID scheme) are taken last.
+
+ function utilOldestID(ids) {
+ if (ids.length === 0) {
+ return undefined;
+ }
+
+ var oldestIDIndex = 0;
+ var oldestID = toNumericID(ids[0]);
+
+ for (var i = 1; i < ids.length; i++) {
+ var num = toNumericID(ids[i]);
+
+ if (compareNumericIDs(oldestID, num) === 1) {
+ oldestIDIndex = i;
+ oldestID = num;
+ }
+ }
+
+ return ids[oldestIDIndex];
+ }
+
function osmEntity(attrs) {
// For prototypal inheritance.
if (this instanceof osmEntity) return; // Create the appropriate subtype.
@@ -36290,7 +36981,13 @@
};
osmEntity.id.toOSM = function (id) {
- return id.slice(1);
+ var match = id.match(/^[cnwr](-?\d+)$/);
+
+ if (match) {
+ return match[1];
+ }
+
+ return '';
};
osmEntity.id.type = function (id) {
@@ -36382,7 +37079,8 @@
return osmEntity.id.toOSM(this.id);
},
isNew: function isNew() {
- return this.osmId() < 0;
+ var osmId = osmEntity.id.toOSM(this.id);
+ return osmId.length === 0 || osmId[0] === '-';
},
update: function update(attrs) {
return osmEntity(this, attrs, {
@@ -37474,7 +38172,7 @@
// In this situation we were not supplied a memberIndex.
function addWayMember(relation, graph) {
- var groups, tempWay, item, i, j, k; // remove PTv2 stops and platforms before doing anything.
+ var groups, tempWay, insertPairIsReversed, item, i, j, k; // remove PTv2 stops and platforms before doing anything.
var PTv2members = [];
var members = [];
@@ -37517,7 +38215,12 @@
id: insertPair.originalID
}, tempMember, true);
groups = utilArrayGroupBy(tempRelation.members, 'type');
- groups.way = groups.way || [];
+ groups.way = groups.way || []; // Insert pair is reversed if the inserted way comes before the original one.
+ // (Except when they form a loop.)
+
+ var originalWay = graph.entity(insertPair.originalID);
+ var insertedWay = graph.entity(insertPair.insertedID);
+ insertPairIsReversed = originalWay.nodes.length > 0 && insertedWay.nodes.length > 0 && insertedWay.nodes[insertedWay.nodes.length - 1] === originalWay.nodes[0] && originalWay.nodes[originalWay.nodes.length - 1] !== insertedWay.nodes[0];
} else {
// Add the member anywhere, one time. Just push and let `osmJoinWays` decide where to put it.
groups = utilArrayGroupBy(relation.members, 'type');
@@ -37546,23 +38249,25 @@
var way = graph.entity(item.id); // If this is a paired item, generate members in correct order and role
if (tempWay && item.id === tempWay.id) {
- if (nodes[0].id === insertPair.nodes[0]) {
+ var reverse = nodes[0].id !== insertPair.nodes[0] ^ insertPairIsReversed;
+
+ if (reverse) {
item.pair = [{
- id: insertPair.originalID,
+ id: insertPair.insertedID,
type: 'way',
role: item.role
}, {
- id: insertPair.insertedID,
+ id: insertPair.originalID,
type: 'way',
role: item.role
}];
} else {
item.pair = [{
- id: insertPair.insertedID,
+ id: insertPair.originalID,
type: 'way',
role: item.role
}, {
- id: insertPair.originalID,
+ id: insertPair.insertedID,
type: 'way',
role: item.role
}];
@@ -38322,7 +39027,7 @@
//
// First choose a node to be the survivor, with preference given
- // to an existing (not new) node.
+ // to the oldest existing (not new) and "interesting" node.
//
// Tags and relation memberships of of non-surviving nodes are merged
// to the survivor.
@@ -38339,13 +39044,24 @@
var survivor;
var node;
var parents;
- var i, j; // Choose a survivor node, prefer an existing (not new) node - #4974
+ var i, j; // Select the node with the ID passed as parameter if it is in the list,
+ // otherwise select the node with the oldest ID as the survivor, or the
+ // last one if there are only new nodes.
+
+ nodeIDs.reverse();
+ var interestingIDs = [];
for (i = 0; i < nodeIDs.length; i++) {
- survivor = graph.entity(nodeIDs[i]);
- if (survivor.version) break; // found one
- } // Replace all non-surviving nodes with the survivor and merge tags.
+ node = graph.entity(nodeIDs[i]);
+ if (node.hasInterestingTags()) {
+ if (!node.isNew()) {
+ interestingIDs.push(node.id);
+ }
+ }
+ }
+
+ survivor = graph.entity(utilOldestID(interestingIDs.length > 0 ? interestingIDs : nodeIDs)); // Replace all non-surviving nodes with the survivor and merge tags.
for (i = 0; i < nodeIDs.length; i++) {
node = graph.entity(nodeIDs[i]);
@@ -38385,13 +39101,9 @@
var survivor;
var node, way;
var relations, relation, role;
- var i, j, k; // Choose a survivor node, prefer an existing (not new) node - #4974
-
- for (i = 0; i < nodeIDs.length; i++) {
- survivor = graph.entity(nodeIDs[i]);
- if (survivor.version) break; // found one
- } // 1. disable if the nodes being connected have conflicting relation roles
+ var i, j, k; // Select the node with the oldest ID as the survivor.
+ survivor = graph.entity(utilOldestID(nodeIDs)); // 1. disable if the nodes being connected have conflicting relation roles
for (i = 0; i < nodeIDs.length; i++) {
node = graph.entity(nodeIDs[i]);
@@ -38701,6 +39413,11 @@
function actionDisconnect(nodeId, newNodeId) {
var wayIds;
+ var disconnectableRelationTypes = {
+ 'associatedStreet': true,
+ 'enforcement': true,
+ 'site': true
+ };
var action = function action(graph) {
var node = graph.entity(nodeId);
@@ -38776,7 +39493,9 @@
var sharedRelation;
parentWays.forEach(function (way) {
var relations = graph.parentRelations(way);
- relations.forEach(function (relation) {
+ relations.filter(function (relation) {
+ return !disconnectableRelationTypes[relation.tags.type];
+ }).forEach(function (relation) {
if (relation.id in seenRelationIds) {
if (wayIds) {
if (wayIds.indexOf(way.id) !== -1 || wayIds.indexOf(seenRelationIds[relation.id]) !== -1) {
@@ -38934,22 +39653,20 @@
}
var action = function action(graph) {
- var ways = ids.map(graph.entity, graph); // if any of the ways are sided (e.g. coastline, cliff, kerb)
+ var ways = ids.map(graph.entity, graph); // Prefer to keep an existing way.
+ // if there are multiple existing ways, keep the oldest one
+ // the oldest way is determined by the ID of the way.
+
+ var survivorID = utilOldestID(ways.map(function (way) {
+ return way.id;
+ })); // if any of the ways are sided (e.g. coastline, cliff, kerb)
// sort them first so they establish the overall order - #6033
ways.sort(function (a, b) {
var aSided = a.isSided();
var bSided = b.isSided();
return aSided && !bSided ? -1 : bSided && !aSided ? 1 : 0;
- }); // Prefer to keep an existing way.
- // if there are multiple existing ways, keep the oldest one
- // the oldest way is determined by the ID of the way
-
- var survivorID = (ways.filter(function (way) {
- return !way.isNew();
- }).sort(function (a, b) {
- return +a.osmId() - +b.osmId();
- })[0] || ways[0]).id;
+ });
var sequences = osmJoinWays(ways, graph);
var joined = sequences[0]; // We might need to reverse some of these ways before joining them. #4688
// `joined.actions` property will contain any actions we need to apply.
@@ -39146,23 +39863,65 @@
var nodes = utilArrayUniq(graph.childNodes(target));
var removeNode = point;
- for (var i = 0; i < nodes.length; i++) {
- var node = nodes[i];
+ if (!point.isNew()) {
+ // Try to preserve the original point if it already has
+ // an ID in the database.
+ var inserted = false;
- if (graph.parentWays(node).length > 1 || graph.parentRelations(node).length || node.hasInterestingTags()) {
- continue;
- } // Found an uninteresting child node on the target way.
- // Move orig point into its place to preserve point's history. #3683
+ var canBeReplaced = function canBeReplaced(node) {
+ return !(graph.parentWays(node).length > 1 || graph.parentRelations(node).length);
+ };
+ var replaceNode = function replaceNode(node) {
+ graph = graph.replace(point.update({
+ tags: node.tags,
+ loc: node.loc
+ }));
+ target = target.replaceNode(node.id, point.id);
+ graph = graph.replace(target);
+ removeNode = node;
+ inserted = true;
+ };
- graph = graph.replace(point.update({
- tags: {},
- loc: node.loc
- }));
- target = target.replaceNode(node.id, point.id);
- graph = graph.replace(target);
- removeNode = node;
- break;
+ var i;
+ var node; // First, try to replace a new child node on the target way.
+
+ for (i = 0; i < nodes.length; i++) {
+ node = nodes[i];
+
+ if (canBeReplaced(node) && node.isNew()) {
+ replaceNode(node);
+ break;
+ }
+ }
+
+ if (!inserted && point.hasInterestingTags()) {
+ // No new child node found, try to find an existing, but
+ // uninteresting child node instead.
+ for (i = 0; i < nodes.length; i++) {
+ node = nodes[i];
+
+ if (canBeReplaced(node) && !node.hasInterestingTags()) {
+ replaceNode(node);
+ break;
+ }
+ }
+
+ if (!inserted) {
+ // Still not inserted, try to find an existing, interesting,
+ // but more recent child node.
+ for (i = 0; i < nodes.length; i++) {
+ node = nodes[i];
+
+ if (canBeReplaced(node) && utilCompareIDs(point.id, node.id) < 0) {
+ replaceNode(node);
+ break;
+ }
+ }
+ } // If the point still hasn't been inserted, we give up.
+ // There are more interesting or older nodes on the way.
+
+ }
}
graph = graph.remove(removeNode);
@@ -41238,19 +41997,34 @@
}
});
outer = !outer;
- } // Move all tags to one relation
+ } // Move all tags to one relation.
+ // Keep the oldest multipolygon alive if it exists.
- var relation = entities.multipolygon[0] || osmRelation({
- id: newRelationId,
- tags: {
- type: 'multipolygon'
+ var relation;
+
+ if (entities.multipolygon.length > 0) {
+ var oldestID = utilOldestID(entities.multipolygon.map(function (entity) {
+ return entity.id;
+ }));
+ relation = entities.multipolygon.find(function (entity) {
+ return entity.id === oldestID;
+ });
+ } else {
+ relation = osmRelation({
+ id: newRelationId,
+ tags: {
+ type: 'multipolygon'
+ }
+ });
+ }
+
+ entities.multipolygon.forEach(function (m) {
+ if (m.id !== relation.id) {
+ relation = relation.mergeTags(m.tags);
+ graph = graph.remove(m);
}
});
- entities.multipolygon.slice(1).forEach(function (m) {
- relation = relation.mergeTags(m.tags);
- graph = graph.remove(m);
- });
entities.closedWay.forEach(function (way) {
function isThisOuter(m) {
return m.id === way.id && m.role !== 'inner';
@@ -41310,19 +42084,21 @@
return action;
}
- var DESCRIPTORS = descriptors;
+ var DESCRIPTORS$1 = descriptors;
var objectDefinePropertyModule = objectDefineProperty;
var regExpFlags = regexpFlags$1;
- var fails$4 = fails$N;
+ var fails$4 = fails$S;
- var FORCED$2 = DESCRIPTORS && fails$4(function () {
+ var RegExpPrototype = RegExp.prototype;
+
+ var FORCED$2 = DESCRIPTORS$1 && fails$4(function () {
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
- return Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags').get.call({ dotAll: true, sticky: true }) !== 'sy';
+ return Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call({ dotAll: true, sticky: true }) !== 'sy';
});
// `RegExp.prototype.flags` getter
// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
- if (FORCED$2) objectDefinePropertyModule.f(RegExp.prototype, 'flags', {
+ if (FORCED$2) objectDefinePropertyModule.f(RegExpPrototype, 'flags', {
configurable: true,
get: regExpFlags
});
@@ -41672,6 +42448,18025 @@
return results;
}
+ var lodash = {exports: {}};
+
+ (function (module, exports) {
+ (function () {
+ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
+ var undefined$1;
+ /** Used as the semantic version number. */
+
+ var VERSION = '4.17.21';
+ /** Used as the size to enable large array optimizations. */
+
+ var LARGE_ARRAY_SIZE = 200;
+ /** Error message constants. */
+
+ var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
+ FUNC_ERROR_TEXT = 'Expected a function',
+ INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';
+ /** Used to stand-in for `undefined` hash values. */
+
+ var HASH_UNDEFINED = '__lodash_hash_undefined__';
+ /** Used as the maximum memoize cache size. */
+
+ var MAX_MEMOIZE_SIZE = 500;
+ /** Used as the internal argument placeholder. */
+
+ var PLACEHOLDER = '__lodash_placeholder__';
+ /** Used to compose bitmasks for cloning. */
+
+ var CLONE_DEEP_FLAG = 1,
+ CLONE_FLAT_FLAG = 2,
+ CLONE_SYMBOLS_FLAG = 4;
+ /** Used to compose bitmasks for value comparisons. */
+
+ var COMPARE_PARTIAL_FLAG = 1,
+ COMPARE_UNORDERED_FLAG = 2;
+ /** Used to compose bitmasks for function metadata. */
+
+ var WRAP_BIND_FLAG = 1,
+ WRAP_BIND_KEY_FLAG = 2,
+ WRAP_CURRY_BOUND_FLAG = 4,
+ WRAP_CURRY_FLAG = 8,
+ WRAP_CURRY_RIGHT_FLAG = 16,
+ WRAP_PARTIAL_FLAG = 32,
+ WRAP_PARTIAL_RIGHT_FLAG = 64,
+ WRAP_ARY_FLAG = 128,
+ WRAP_REARG_FLAG = 256,
+ WRAP_FLIP_FLAG = 512;
+ /** Used as default options for `_.truncate`. */
+
+ var DEFAULT_TRUNC_LENGTH = 30,
+ DEFAULT_TRUNC_OMISSION = '...';
+ /** Used to detect hot functions by number of calls within a span of milliseconds. */
+
+ var HOT_COUNT = 800,
+ HOT_SPAN = 16;
+ /** Used to indicate the type of lazy iteratees. */
+
+ var LAZY_FILTER_FLAG = 1,
+ LAZY_MAP_FLAG = 2,
+ LAZY_WHILE_FLAG = 3;
+ /** Used as references for various `Number` constants. */
+
+ var INFINITY = 1 / 0,
+ MAX_SAFE_INTEGER = 9007199254740991,
+ MAX_INTEGER = 1.7976931348623157e+308,
+ NAN = 0 / 0;
+ /** Used as references for the maximum length and index of an array. */
+
+ var MAX_ARRAY_LENGTH = 4294967295,
+ MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
+ HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
+ /** Used to associate wrap methods with their bit flags. */
+
+ var wrapFlags = [['ary', WRAP_ARY_FLAG], ['bind', WRAP_BIND_FLAG], ['bindKey', WRAP_BIND_KEY_FLAG], ['curry', WRAP_CURRY_FLAG], ['curryRight', WRAP_CURRY_RIGHT_FLAG], ['flip', WRAP_FLIP_FLAG], ['partial', WRAP_PARTIAL_FLAG], ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], ['rearg', WRAP_REARG_FLAG]];
+ /** `Object#toString` result references. */
+
+ var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ asyncTag = '[object AsyncFunction]',
+ boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ domExcTag = '[object DOMException]',
+ errorTag = '[object Error]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ nullTag = '[object Null]',
+ objectTag = '[object Object]',
+ promiseTag = '[object Promise]',
+ proxyTag = '[object Proxy]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ symbolTag = '[object Symbol]',
+ undefinedTag = '[object Undefined]',
+ weakMapTag = '[object WeakMap]',
+ weakSetTag = '[object WeakSet]';
+ var arrayBufferTag = '[object ArrayBuffer]',
+ dataViewTag = '[object DataView]',
+ float32Tag = '[object Float32Array]',
+ float64Tag = '[object Float64Array]',
+ int8Tag = '[object Int8Array]',
+ int16Tag = '[object Int16Array]',
+ int32Tag = '[object Int32Array]',
+ uint8Tag = '[object Uint8Array]',
+ uint8ClampedTag = '[object Uint8ClampedArray]',
+ uint16Tag = '[object Uint16Array]',
+ uint32Tag = '[object Uint32Array]';
+ /** Used to match empty string literals in compiled template source. */
+
+ var reEmptyStringLeading = /\b__p \+= '';/g,
+ reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
+ reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
+ /** Used to match HTML entities and HTML characters. */
+
+ var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
+ reUnescapedHtml = /[&<>"']/g,
+ reHasEscapedHtml = RegExp(reEscapedHtml.source),
+ reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
+ /** Used to match template delimiters. */
+
+ var reEscape = /<%-([\s\S]+?)%>/g,
+ reEvaluate = /<%([\s\S]+?)%>/g,
+ reInterpolate = /<%=([\s\S]+?)%>/g;
+ /** Used to match property names within property paths. */
+
+ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
+ reIsPlainProp = /^\w*$/,
+ rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
+ /**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
+ reHasRegExpChar = RegExp(reRegExpChar.source);
+ /** Used to match leading whitespace. */
+
+ var reTrimStart = /^\s+/;
+ /** Used to match a single whitespace character. */
+
+ var reWhitespace = /\s/;
+ /** Used to match wrap detail comments. */
+
+ var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
+ reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
+ reSplitDetails = /,? & /;
+ /** Used to match words composed of alphanumeric characters. */
+
+ var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
+ /**
+ * Used to validate the `validate` option in `_.template` variable.
+ *
+ * Forbids characters which could potentially change the meaning of the function argument definition:
+ * - "()," (modification of function parameters)
+ * - "=" (default value)
+ * - "[]{}" (destructuring of function parameters)
+ * - "/" (beginning of a comment)
+ * - whitespace
+ */
+
+ var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
+ /** Used to match backslashes in property paths. */
+
+ var reEscapeChar = /\\(\\)?/g;
+ /**
+ * Used to match
+ * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
+ */
+
+ var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+ /** Used to match `RegExp` flags from their coerced string values. */
+
+ var reFlags = /\w*$/;
+ /** Used to detect bad signed hexadecimal string values. */
+
+ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
+ /** Used to detect binary string values. */
+
+ var reIsBinary = /^0b[01]+$/i;
+ /** Used to detect host constructors (Safari). */
+
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
+ /** Used to detect octal string values. */
+
+ var reIsOctal = /^0o[0-7]+$/i;
+ /** Used to detect unsigned integer values. */
+
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
+ /** Used to match Latin Unicode letters (excluding mathematical operators). */
+
+ var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
+ /** Used to ensure capturing order of template delimiters. */
+
+ var reNoMatch = /($^)/;
+ /** Used to match unescaped characters in compiled string literals. */
+
+ var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
+ /** Used to compose unicode character classes. */
+
+ var rsAstralRange = "\\ud800-\\udfff",
+ rsComboMarksRange = "\\u0300-\\u036f",
+ reComboHalfMarksRange = "\\ufe20-\\ufe2f",
+ rsComboSymbolsRange = "\\u20d0-\\u20ff",
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
+ rsDingbatRange = "\\u2700-\\u27bf",
+ rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
+ rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
+ rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
+ rsPunctuationRange = "\\u2000-\\u206f",
+ rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",
+ rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
+ rsVarRange = "\\ufe0e\\ufe0f",
+ rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
+ /** Used to compose unicode capture groups. */
+
+ var rsApos = "['\u2019]",
+ rsAstral = '[' + rsAstralRange + ']',
+ rsBreak = '[' + rsBreakRange + ']',
+ rsCombo = '[' + rsComboRange + ']',
+ rsDigits = '\\d+',
+ rsDingbat = '[' + rsDingbatRange + ']',
+ rsLower = '[' + rsLowerRange + ']',
+ rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
+ rsFitz = "\\ud83c[\\udffb-\\udfff]",
+ rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
+ rsNonAstral = '[^' + rsAstralRange + ']',
+ rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}",
+ rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]",
+ rsUpper = '[' + rsUpperRange + ']',
+ rsZWJ = "\\u200d";
+ /** Used to compose unicode regexes. */
+
+ var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
+ rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
+ rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
+ rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
+ reOptMod = rsModifier + '?',
+ rsOptVar = '[' + rsVarRange + ']?',
+ rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
+ rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
+ rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
+ rsSeq = rsOptVar + reOptMod + rsOptJoin,
+ rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
+ rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
+ /** Used to match apostrophes. */
+
+ var reApos = RegExp(rsApos, 'g');
+ /**
+ * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
+ * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
+ */
+
+ var reComboMark = RegExp(rsCombo, 'g');
+ /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
+
+ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
+ /** Used to match complex or compound words. */
+
+ var reUnicodeWord = RegExp([rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, rsUpper + '+' + rsOptContrUpper, rsOrdUpper, rsOrdLower, rsDigits, rsEmoji].join('|'), 'g');
+ /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
+
+ var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
+ /** Used to detect strings that need a more robust regexp to match words. */
+
+ var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
+ /** Used to assign default `context` object properties. */
+
+ var contextProps = ['Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'];
+ /** Used to make template sourceURLs easier to identify. */
+
+ var templateCounter = -1;
+ /** Used to identify `toStringTag` values of typed arrays. */
+
+ var typedArrayTags = {};
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
+ typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
+ /** Used to identify `toStringTag` values supported by `_.clone`. */
+
+ var cloneableTags = {};
+ cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
+ cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;
+ /** Used to map Latin Unicode letters to basic Latin letters. */
+
+ var deburredLetters = {
+ // Latin-1 Supplement block.
+ '\xc0': 'A',
+ '\xc1': 'A',
+ '\xc2': 'A',
+ '\xc3': 'A',
+ '\xc4': 'A',
+ '\xc5': 'A',
+ '\xe0': 'a',
+ '\xe1': 'a',
+ '\xe2': 'a',
+ '\xe3': 'a',
+ '\xe4': 'a',
+ '\xe5': 'a',
+ '\xc7': 'C',
+ '\xe7': 'c',
+ '\xd0': 'D',
+ '\xf0': 'd',
+ '\xc8': 'E',
+ '\xc9': 'E',
+ '\xca': 'E',
+ '\xcb': 'E',
+ '\xe8': 'e',
+ '\xe9': 'e',
+ '\xea': 'e',
+ '\xeb': 'e',
+ '\xcc': 'I',
+ '\xcd': 'I',
+ '\xce': 'I',
+ '\xcf': 'I',
+ '\xec': 'i',
+ '\xed': 'i',
+ '\xee': 'i',
+ '\xef': 'i',
+ '\xd1': 'N',
+ '\xf1': 'n',
+ '\xd2': 'O',
+ '\xd3': 'O',
+ '\xd4': 'O',
+ '\xd5': 'O',
+ '\xd6': 'O',
+ '\xd8': 'O',
+ '\xf2': 'o',
+ '\xf3': 'o',
+ '\xf4': 'o',
+ '\xf5': 'o',
+ '\xf6': 'o',
+ '\xf8': 'o',
+ '\xd9': 'U',
+ '\xda': 'U',
+ '\xdb': 'U',
+ '\xdc': 'U',
+ '\xf9': 'u',
+ '\xfa': 'u',
+ '\xfb': 'u',
+ '\xfc': 'u',
+ '\xdd': 'Y',
+ '\xfd': 'y',
+ '\xff': 'y',
+ '\xc6': 'Ae',
+ '\xe6': 'ae',
+ '\xde': 'Th',
+ '\xfe': 'th',
+ '\xdf': 'ss',
+ // Latin Extended-A block.
+ "\u0100": 'A',
+ "\u0102": 'A',
+ "\u0104": 'A',
+ "\u0101": 'a',
+ "\u0103": 'a',
+ "\u0105": 'a',
+ "\u0106": 'C',
+ "\u0108": 'C',
+ "\u010A": 'C',
+ "\u010C": 'C',
+ "\u0107": 'c',
+ "\u0109": 'c',
+ "\u010B": 'c',
+ "\u010D": 'c',
+ "\u010E": 'D',
+ "\u0110": 'D',
+ "\u010F": 'd',
+ "\u0111": 'd',
+ "\u0112": 'E',
+ "\u0114": 'E',
+ "\u0116": 'E',
+ "\u0118": 'E',
+ "\u011A": 'E',
+ "\u0113": 'e',
+ "\u0115": 'e',
+ "\u0117": 'e',
+ "\u0119": 'e',
+ "\u011B": 'e',
+ "\u011C": 'G',
+ "\u011E": 'G',
+ "\u0120": 'G',
+ "\u0122": 'G',
+ "\u011D": 'g',
+ "\u011F": 'g',
+ "\u0121": 'g',
+ "\u0123": 'g',
+ "\u0124": 'H',
+ "\u0126": 'H',
+ "\u0125": 'h',
+ "\u0127": 'h',
+ "\u0128": 'I',
+ "\u012A": 'I',
+ "\u012C": 'I',
+ "\u012E": 'I',
+ "\u0130": 'I',
+ "\u0129": 'i',
+ "\u012B": 'i',
+ "\u012D": 'i',
+ "\u012F": 'i',
+ "\u0131": 'i',
+ "\u0134": 'J',
+ "\u0135": 'j',
+ "\u0136": 'K',
+ "\u0137": 'k',
+ "\u0138": 'k',
+ "\u0139": 'L',
+ "\u013B": 'L',
+ "\u013D": 'L',
+ "\u013F": 'L',
+ "\u0141": 'L',
+ "\u013A": 'l',
+ "\u013C": 'l',
+ "\u013E": 'l',
+ "\u0140": 'l',
+ "\u0142": 'l',
+ "\u0143": 'N',
+ "\u0145": 'N',
+ "\u0147": 'N',
+ "\u014A": 'N',
+ "\u0144": 'n',
+ "\u0146": 'n',
+ "\u0148": 'n',
+ "\u014B": 'n',
+ "\u014C": 'O',
+ "\u014E": 'O',
+ "\u0150": 'O',
+ "\u014D": 'o',
+ "\u014F": 'o',
+ "\u0151": 'o',
+ "\u0154": 'R',
+ "\u0156": 'R',
+ "\u0158": 'R',
+ "\u0155": 'r',
+ "\u0157": 'r',
+ "\u0159": 'r',
+ "\u015A": 'S',
+ "\u015C": 'S',
+ "\u015E": 'S',
+ "\u0160": 'S',
+ "\u015B": 's',
+ "\u015D": 's',
+ "\u015F": 's',
+ "\u0161": 's',
+ "\u0162": 'T',
+ "\u0164": 'T',
+ "\u0166": 'T',
+ "\u0163": 't',
+ "\u0165": 't',
+ "\u0167": 't',
+ "\u0168": 'U',
+ "\u016A": 'U',
+ "\u016C": 'U',
+ "\u016E": 'U',
+ "\u0170": 'U',
+ "\u0172": 'U',
+ "\u0169": 'u',
+ "\u016B": 'u',
+ "\u016D": 'u',
+ "\u016F": 'u',
+ "\u0171": 'u',
+ "\u0173": 'u',
+ "\u0174": 'W',
+ "\u0175": 'w',
+ "\u0176": 'Y',
+ "\u0177": 'y',
+ "\u0178": 'Y',
+ "\u0179": 'Z',
+ "\u017B": 'Z',
+ "\u017D": 'Z',
+ "\u017A": 'z',
+ "\u017C": 'z',
+ "\u017E": 'z',
+ "\u0132": 'IJ',
+ "\u0133": 'ij',
+ "\u0152": 'Oe',
+ "\u0153": 'oe',
+ "\u0149": "'n",
+ "\u017F": 's'
+ };
+ /** Used to map characters to HTML entities. */
+
+ var htmlEscapes = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ "'": '''
+ };
+ /** Used to map HTML entities to characters. */
+
+ var htmlUnescapes = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ ''': "'"
+ };
+ /** Used to escape characters for inclusion in compiled string literals. */
+
+ var stringEscapes = {
+ '\\': '\\',
+ "'": "'",
+ '\n': 'n',
+ '\r': 'r',
+ "\u2028": 'u2028',
+ "\u2029": 'u2029'
+ };
+ /** Built-in method references without a dependency on `root`. */
+
+ var freeParseFloat = parseFloat,
+ freeParseInt = parseInt;
+ /** Detect free variable `global` from Node.js. */
+
+ var freeGlobal = _typeof(commonjsGlobal) == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
+ /** Detect free variable `self`. */
+
+ var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self && self.Object === Object && self;
+ /** Used as a reference to the global object. */
+
+ var root = freeGlobal || freeSelf || Function('return this')();
+ /** Detect free variable `exports`. */
+
+ var freeExports = exports && !exports.nodeType && exports;
+ /** Detect free variable `module`. */
+
+ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
+ /** Detect the popular CommonJS extension `module.exports`. */
+
+ var moduleExports = freeModule && freeModule.exports === freeExports;
+ /** Detect free variable `process` from Node.js. */
+
+ var freeProcess = moduleExports && freeGlobal.process;
+ /** Used to access faster Node.js helpers. */
+
+ var nodeUtil = function () {
+ try {
+ // Use `util.types` for Node.js 10+.
+ var types = freeModule && freeModule.require && freeModule.require('util').types;
+
+ if (types) {
+ return types;
+ } // Legacy `process.binding('util')` for Node.js < 10.
+
+
+ return freeProcess && freeProcess.binding && freeProcess.binding('util');
+ } catch (e) {}
+ }();
+ /* Node.js helper references. */
+
+
+ var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
+ nodeIsDate = nodeUtil && nodeUtil.isDate,
+ nodeIsMap = nodeUtil && nodeUtil.isMap,
+ nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
+ nodeIsSet = nodeUtil && nodeUtil.isSet,
+ nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * A faster alternative to `Function#apply`, this function invokes `func`
+ * with the `this` binding of `thisArg` and the arguments of `args`.
+ *
+ * @private
+ * @param {Function} func The function to invoke.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {Array} args The arguments to invoke `func` with.
+ * @returns {*} Returns the result of `func`.
+ */
+
+ function apply(func, thisArg, args) {
+ switch (args.length) {
+ case 0:
+ return func.call(thisArg);
+
+ case 1:
+ return func.call(thisArg, args[0]);
+
+ case 2:
+ return func.call(thisArg, args[0], args[1]);
+
+ case 3:
+ return func.call(thisArg, args[0], args[1], args[2]);
+ }
+
+ return func.apply(thisArg, args);
+ }
+ /**
+ * A specialized version of `baseAggregator` for arrays.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} setter The function to set `accumulator` values.
+ * @param {Function} iteratee The iteratee to transform keys.
+ * @param {Object} accumulator The initial aggregated object.
+ * @returns {Function} Returns `accumulator`.
+ */
+
+
+ function arrayAggregator(array, setter, iteratee, accumulator) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ var value = array[index];
+ setter(accumulator, value, iteratee(value), array);
+ }
+
+ return accumulator;
+ }
+ /**
+ * A specialized version of `_.forEach` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */
+
+
+ function arrayEach(array, iteratee) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ if (iteratee(array[index], index, array) === false) {
+ break;
+ }
+ }
+
+ return array;
+ }
+ /**
+ * A specialized version of `_.forEachRight` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */
+
+
+ function arrayEachRight(array, iteratee) {
+ var length = array == null ? 0 : array.length;
+
+ while (length--) {
+ if (iteratee(array[length], length, array) === false) {
+ break;
+ }
+ }
+
+ return array;
+ }
+ /**
+ * A specialized version of `_.every` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`.
+ */
+
+
+ function arrayEvery(array, predicate) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ if (!predicate(array[index], index, array)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ /**
+ * A specialized version of `_.filter` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ */
+
+
+ function arrayFilter(array, predicate) {
+ var index = -1,
+ length = array == null ? 0 : array.length,
+ resIndex = 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+
+ if (predicate(value, index, array)) {
+ result[resIndex++] = value;
+ }
+ }
+
+ return result;
+ }
+ /**
+ * A specialized version of `_.includes` for arrays without support for
+ * specifying an index to search from.
+ *
+ * @private
+ * @param {Array} [array] The array to inspect.
+ * @param {*} target The value to search for.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+
+
+ function arrayIncludes(array, value) {
+ var length = array == null ? 0 : array.length;
+ return !!length && baseIndexOf(array, value, 0) > -1;
+ }
+ /**
+ * This function is like `arrayIncludes` except that it accepts a comparator.
+ *
+ * @private
+ * @param {Array} [array] The array to inspect.
+ * @param {*} target The value to search for.
+ * @param {Function} comparator The comparator invoked per element.
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
+ */
+
+
+ function arrayIncludesWith(array, value, comparator) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ if (comparator(value, array[index])) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ /**
+ * A specialized version of `_.map` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+
+
+ function arrayMap(array, iteratee) {
+ var index = -1,
+ length = array == null ? 0 : array.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+
+ return result;
+ }
+ /**
+ * Appends the elements of `values` to `array`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to append.
+ * @returns {Array} Returns `array`.
+ */
+
+
+ function arrayPush(array, values) {
+ var index = -1,
+ length = values.length,
+ offset = array.length;
+
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+
+ return array;
+ }
+ /**
+ * A specialized version of `_.reduce` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {boolean} [initAccum] Specify using the first element of `array` as
+ * the initial value.
+ * @returns {*} Returns the accumulated value.
+ */
+
+
+ function arrayReduce(array, iteratee, accumulator, initAccum) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ if (initAccum && length) {
+ accumulator = array[++index];
+ }
+
+ while (++index < length) {
+ accumulator = iteratee(accumulator, array[index], index, array);
+ }
+
+ return accumulator;
+ }
+ /**
+ * A specialized version of `_.reduceRight` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {boolean} [initAccum] Specify using the last element of `array` as
+ * the initial value.
+ * @returns {*} Returns the accumulated value.
+ */
+
+
+ function arrayReduceRight(array, iteratee, accumulator, initAccum) {
+ var length = array == null ? 0 : array.length;
+
+ if (initAccum && length) {
+ accumulator = array[--length];
+ }
+
+ while (length--) {
+ accumulator = iteratee(accumulator, array[length], length, array);
+ }
+
+ return accumulator;
+ }
+ /**
+ * A specialized version of `_.some` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ */
+
+
+ function arraySome(array, predicate) {
+ var index = -1,
+ length = array == null ? 0 : array.length;
+
+ while (++index < length) {
+ if (predicate(array[index], index, array)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ /**
+ * Gets the size of an ASCII `string`.
+ *
+ * @private
+ * @param {string} string The string inspect.
+ * @returns {number} Returns the string size.
+ */
+
+
+ var asciiSize = baseProperty('length');
+ /**
+ * Converts an ASCII `string` to an array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the converted array.
+ */
+
+ function asciiToArray(string) {
+ return string.split('');
+ }
+ /**
+ * Splits an ASCII `string` into an array of its words.
+ *
+ * @private
+ * @param {string} The string to inspect.
+ * @returns {Array} Returns the words of `string`.
+ */
+
+
+ function asciiWords(string) {
+ return string.match(reAsciiWord) || [];
+ }
+ /**
+ * The base implementation of methods like `_.findKey` and `_.findLastKey`,
+ * without support for iteratee shorthands, which iterates over `collection`
+ * using `eachFunc`.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to inspect.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {Function} eachFunc The function to iterate over `collection`.
+ * @returns {*} Returns the found element or its key, else `undefined`.
+ */
+
+
+ function baseFindKey(collection, predicate, eachFunc) {
+ var result;
+ eachFunc(collection, function (value, key, collection) {
+ if (predicate(value, key, collection)) {
+ result = key;
+ return false;
+ }
+ });
+ return result;
+ }
+ /**
+ * The base implementation of `_.findIndex` and `_.findLastIndex` without
+ * support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {number} fromIndex The index to search from.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+
+
+ function baseFindIndex(array, predicate, fromIndex, fromRight) {
+ var length = array.length,
+ index = fromIndex + (fromRight ? 1 : -1);
+
+ while (fromRight ? index-- : ++index < length) {
+ if (predicate(array[index], index, array)) {
+ return index;
+ }
+ }
+
+ return -1;
+ }
+ /**
+ * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+
+
+ function baseIndexOf(array, value, fromIndex) {
+ return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);
+ }
+ /**
+ * This function is like `baseIndexOf` except that it accepts a comparator.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @param {Function} comparator The comparator invoked per element.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+
+
+ function baseIndexOfWith(array, value, fromIndex, comparator) {
+ var index = fromIndex - 1,
+ length = array.length;
+
+ while (++index < length) {
+ if (comparator(array[index], value)) {
+ return index;
+ }
+ }
+
+ return -1;
+ }
+ /**
+ * The base implementation of `_.isNaN` without support for number objects.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
+ */
+
+
+ function baseIsNaN(value) {
+ return value !== value;
+ }
+ /**
+ * The base implementation of `_.mean` and `_.meanBy` without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {number} Returns the mean.
+ */
+
+
+ function baseMean(array, iteratee) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseSum(array, iteratee) / length : NAN;
+ }
+ /**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new accessor function.
+ */
+
+
+ function baseProperty(key) {
+ return function (object) {
+ return object == null ? undefined$1 : object[key];
+ };
+ }
+ /**
+ * The base implementation of `_.propertyOf` without support for deep paths.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Function} Returns the new accessor function.
+ */
+
+
+ function basePropertyOf(object) {
+ return function (key) {
+ return object == null ? undefined$1 : object[key];
+ };
+ }
+ /**
+ * The base implementation of `_.reduce` and `_.reduceRight`, without support
+ * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} accumulator The initial value.
+ * @param {boolean} initAccum Specify using the first or last element of
+ * `collection` as the initial value.
+ * @param {Function} eachFunc The function to iterate over `collection`.
+ * @returns {*} Returns the accumulated value.
+ */
+
+
+ function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
+ eachFunc(collection, function (value, index, collection) {
+ accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection);
+ });
+ return accumulator;
+ }
+ /**
+ * The base implementation of `_.sortBy` which uses `comparer` to define the
+ * sort order of `array` and replaces criteria objects with their corresponding
+ * values.
+ *
+ * @private
+ * @param {Array} array The array to sort.
+ * @param {Function} comparer The function to define sort order.
+ * @returns {Array} Returns `array`.
+ */
+
+
+ function baseSortBy(array, comparer) {
+ var length = array.length;
+ array.sort(comparer);
+
+ while (length--) {
+ array[length] = array[length].value;
+ }
+
+ return array;
+ }
+ /**
+ * The base implementation of `_.sum` and `_.sumBy` without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {number} Returns the sum.
+ */
+
+
+ function baseSum(array, iteratee) {
+ var result,
+ index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ var current = iteratee(array[index]);
+
+ if (current !== undefined$1) {
+ result = result === undefined$1 ? current : result + current;
+ }
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.times` without support for iteratee shorthands
+ * or max array length checks.
+ *
+ * @private
+ * @param {number} n The number of times to invoke `iteratee`.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the array of results.
+ */
+
+
+ function baseTimes(n, iteratee) {
+ var index = -1,
+ result = Array(n);
+
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
+ * of key-value pairs for `object` corresponding to the property names of `props`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} props The property names to get values for.
+ * @returns {Object} Returns the key-value pairs.
+ */
+
+
+ function baseToPairs(object, props) {
+ return arrayMap(props, function (key) {
+ return [key, object[key]];
+ });
+ }
+ /**
+ * The base implementation of `_.trim`.
+ *
+ * @private
+ * @param {string} string The string to trim.
+ * @returns {string} Returns the trimmed string.
+ */
+
+
+ function baseTrim(string) {
+ return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string;
+ }
+ /**
+ * The base implementation of `_.unary` without support for storing metadata.
+ *
+ * @private
+ * @param {Function} func The function to cap arguments for.
+ * @returns {Function} Returns the new capped function.
+ */
+
+
+ function baseUnary(func) {
+ return function (value) {
+ return func(value);
+ };
+ }
+ /**
+ * The base implementation of `_.values` and `_.valuesIn` which creates an
+ * array of `object` property values corresponding to the property names
+ * of `props`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} props The property names to get values for.
+ * @returns {Object} Returns the array of property values.
+ */
+
+
+ function baseValues(object, props) {
+ return arrayMap(props, function (key) {
+ return object[key];
+ });
+ }
+ /**
+ * Checks if a `cache` value for `key` exists.
+ *
+ * @private
+ * @param {Object} cache The cache to query.
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+
+
+ function cacheHas(cache, key) {
+ return cache.has(key);
+ }
+ /**
+ * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
+ * that is not found in the character symbols.
+ *
+ * @private
+ * @param {Array} strSymbols The string symbols to inspect.
+ * @param {Array} chrSymbols The character symbols to find.
+ * @returns {number} Returns the index of the first unmatched string symbol.
+ */
+
+
+ function charsStartIndex(strSymbols, chrSymbols) {
+ var index = -1,
+ length = strSymbols.length;
+
+ while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
+
+ return index;
+ }
+ /**
+ * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
+ * that is not found in the character symbols.
+ *
+ * @private
+ * @param {Array} strSymbols The string symbols to inspect.
+ * @param {Array} chrSymbols The character symbols to find.
+ * @returns {number} Returns the index of the last unmatched string symbol.
+ */
+
+
+ function charsEndIndex(strSymbols, chrSymbols) {
+ var index = strSymbols.length;
+
+ while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
+
+ return index;
+ }
+ /**
+ * Gets the number of `placeholder` occurrences in `array`.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} placeholder The placeholder to search for.
+ * @returns {number} Returns the placeholder count.
+ */
+
+
+ function countHolders(array, placeholder) {
+ var length = array.length,
+ result = 0;
+
+ while (length--) {
+ if (array[length] === placeholder) {
+ ++result;
+ }
+ }
+
+ return result;
+ }
+ /**
+ * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
+ * letters to basic Latin letters.
+ *
+ * @private
+ * @param {string} letter The matched letter to deburr.
+ * @returns {string} Returns the deburred letter.
+ */
+
+
+ var deburrLetter = basePropertyOf(deburredLetters);
+ /**
+ * Used by `_.escape` to convert characters to HTML entities.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */
+
+ var escapeHtmlChar = basePropertyOf(htmlEscapes);
+ /**
+ * Used by `_.template` to escape characters for inclusion in compiled string literals.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */
+
+ function escapeStringChar(chr) {
+ return '\\' + stringEscapes[chr];
+ }
+ /**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+
+
+ function getValue(object, key) {
+ return object == null ? undefined$1 : object[key];
+ }
+ /**
+ * Checks if `string` contains Unicode symbols.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {boolean} Returns `true` if a symbol is found, else `false`.
+ */
+
+
+ function hasUnicode(string) {
+ return reHasUnicode.test(string);
+ }
+ /**
+ * Checks if `string` contains a word composed of Unicode symbols.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {boolean} Returns `true` if a word is found, else `false`.
+ */
+
+
+ function hasUnicodeWord(string) {
+ return reHasUnicodeWord.test(string);
+ }
+ /**
+ * Converts `iterator` to an array.
+ *
+ * @private
+ * @param {Object} iterator The iterator to convert.
+ * @returns {Array} Returns the converted array.
+ */
+
+
+ function iteratorToArray(iterator) {
+ var data,
+ result = [];
+
+ while (!(data = iterator.next()).done) {
+ result.push(data.value);
+ }
+
+ return result;
+ }
+ /**
+ * Converts `map` to its key-value pairs.
+ *
+ * @private
+ * @param {Object} map The map to convert.
+ * @returns {Array} Returns the key-value pairs.
+ */
+
+
+ function mapToArray(map) {
+ var index = -1,
+ result = Array(map.size);
+ map.forEach(function (value, key) {
+ result[++index] = [key, value];
+ });
+ return result;
+ }
+ /**
+ * Creates a unary function that invokes `func` with its argument transformed.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {Function} transform The argument transform.
+ * @returns {Function} Returns the new function.
+ */
+
+
+ function overArg(func, transform) {
+ return function (arg) {
+ return func(transform(arg));
+ };
+ }
+ /**
+ * Replaces all `placeholder` elements in `array` with an internal placeholder
+ * and returns an array of their indexes.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {*} placeholder The placeholder to replace.
+ * @returns {Array} Returns the new array of placeholder indexes.
+ */
+
+
+ function replaceHolders(array, placeholder) {
+ var index = -1,
+ length = array.length,
+ resIndex = 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+
+ if (value === placeholder || value === PLACEHOLDER) {
+ array[index] = PLACEHOLDER;
+ result[resIndex++] = index;
+ }
+ }
+
+ return result;
+ }
+ /**
+ * Converts `set` to an array of its values.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the values.
+ */
+
+
+ function setToArray(set) {
+ var index = -1,
+ result = Array(set.size);
+ set.forEach(function (value) {
+ result[++index] = value;
+ });
+ return result;
+ }
+ /**
+ * Converts `set` to its value-value pairs.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the value-value pairs.
+ */
+
+
+ function setToPairs(set) {
+ var index = -1,
+ result = Array(set.size);
+ set.forEach(function (value) {
+ result[++index] = [value, value];
+ });
+ return result;
+ }
+ /**
+ * A specialized version of `_.indexOf` which performs strict equality
+ * comparisons of values, i.e. `===`.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+
+
+ function strictIndexOf(array, value, fromIndex) {
+ var index = fromIndex - 1,
+ length = array.length;
+
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+
+ return -1;
+ }
+ /**
+ * A specialized version of `_.lastIndexOf` which performs strict equality
+ * comparisons of values, i.e. `===`.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+
+
+ function strictLastIndexOf(array, value, fromIndex) {
+ var index = fromIndex + 1;
+
+ while (index--) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+
+ return index;
+ }
+ /**
+ * Gets the number of symbols in `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the string size.
+ */
+
+
+ function stringSize(string) {
+ return hasUnicode(string) ? unicodeSize(string) : asciiSize(string);
+ }
+ /**
+ * Converts `string` to an array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the converted array.
+ */
+
+
+ function stringToArray(string) {
+ return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);
+ }
+ /**
+ * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
+ * character of `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the index of the last non-whitespace character.
+ */
+
+
+ function trimmedEndIndex(string) {
+ var index = string.length;
+
+ while (index-- && reWhitespace.test(string.charAt(index))) {}
+
+ return index;
+ }
+ /**
+ * Used by `_.unescape` to convert HTML entities to characters.
+ *
+ * @private
+ * @param {string} chr The matched character to unescape.
+ * @returns {string} Returns the unescaped character.
+ */
+
+
+ var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
+ /**
+ * Gets the size of a Unicode `string`.
+ *
+ * @private
+ * @param {string} string The string inspect.
+ * @returns {number} Returns the string size.
+ */
+
+ function unicodeSize(string) {
+ var result = reUnicode.lastIndex = 0;
+
+ while (reUnicode.test(string)) {
+ ++result;
+ }
+
+ return result;
+ }
+ /**
+ * Converts a Unicode `string` to an array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the converted array.
+ */
+
+
+ function unicodeToArray(string) {
+ return string.match(reUnicode) || [];
+ }
+ /**
+ * Splits a Unicode `string` into an array of its words.
+ *
+ * @private
+ * @param {string} The string to inspect.
+ * @returns {Array} Returns the words of `string`.
+ */
+
+
+ function unicodeWords(string) {
+ return string.match(reUnicodeWord) || [];
+ }
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Create a new pristine `lodash` function using the `context` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.1.0
+ * @category Util
+ * @param {Object} [context=root] The context object.
+ * @returns {Function} Returns a new `lodash` function.
+ * @example
+ *
+ * _.mixin({ 'foo': _.constant('foo') });
+ *
+ * var lodash = _.runInContext();
+ * lodash.mixin({ 'bar': lodash.constant('bar') });
+ *
+ * _.isFunction(_.foo);
+ * // => true
+ * _.isFunction(_.bar);
+ * // => false
+ *
+ * lodash.isFunction(lodash.foo);
+ * // => false
+ * lodash.isFunction(lodash.bar);
+ * // => true
+ *
+ * // Create a suped-up `defer` in Node.js.
+ * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
+ */
+
+
+ var runInContext = function runInContext(context) {
+ context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));
+ /** Built-in constructor references. */
+
+ var Array = context.Array,
+ Date = context.Date,
+ Error = context.Error,
+ Function = context.Function,
+ Math = context.Math,
+ Object = context.Object,
+ RegExp = context.RegExp,
+ String = context.String,
+ TypeError = context.TypeError;
+ /** Used for built-in method references. */
+
+ var arrayProto = Array.prototype,
+ funcProto = Function.prototype,
+ objectProto = Object.prototype;
+ /** Used to detect overreaching core-js shims. */
+
+ var coreJsData = context['__core-js_shared__'];
+ /** Used to resolve the decompiled source of functions. */
+
+ var funcToString = funcProto.toString;
+ /** Used to check objects for own properties. */
+
+ var hasOwnProperty = objectProto.hasOwnProperty;
+ /** Used to generate unique IDs. */
+
+ var idCounter = 0;
+ /** Used to detect methods masquerading as native. */
+
+ var maskSrcKey = function () {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+ return uid ? 'Symbol(src)_1.' + uid : '';
+ }();
+ /**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+
+
+ var nativeObjectToString = objectProto.toString;
+ /** Used to infer the `Object` constructor. */
+
+ var objectCtorString = funcToString.call(Object);
+ /** Used to restore the original `_` reference in `_.noConflict`. */
+
+ var oldDash = root._;
+ /** Used to detect if a method is native. */
+
+ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$');
+ /** Built-in value references. */
+
+ var Buffer = moduleExports ? context.Buffer : undefined$1,
+ _Symbol = context.Symbol,
+ Uint8Array = context.Uint8Array,
+ allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined$1,
+ getPrototype = overArg(Object.getPrototypeOf, Object),
+ objectCreate = Object.create,
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
+ splice = arrayProto.splice,
+ spreadableSymbol = _Symbol ? _Symbol.isConcatSpreadable : undefined$1,
+ symIterator = _Symbol ? _Symbol.iterator : undefined$1,
+ symToStringTag = _Symbol ? _Symbol.toStringTag : undefined$1;
+
+ var defineProperty = function () {
+ try {
+ var func = getNative(Object, 'defineProperty');
+ func({}, '', {});
+ return func;
+ } catch (e) {}
+ }();
+ /** Mocked built-ins. */
+
+
+ var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
+ ctxNow = Date && Date.now !== root.Date.now && Date.now,
+ ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
+ /* Built-in method references for those with the same name as other `lodash` methods. */
+
+ var nativeCeil = Math.ceil,
+ nativeFloor = Math.floor,
+ nativeGetSymbols = Object.getOwnPropertySymbols,
+ nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined$1,
+ nativeIsFinite = context.isFinite,
+ nativeJoin = arrayProto.join,
+ nativeKeys = overArg(Object.keys, Object),
+ nativeMax = Math.max,
+ nativeMin = Math.min,
+ nativeNow = Date.now,
+ nativeParseInt = context.parseInt,
+ nativeRandom = Math.random,
+ nativeReverse = arrayProto.reverse;
+ /* Built-in method references that are verified to be native. */
+
+ var DataView = getNative(context, 'DataView'),
+ Map = getNative(context, 'Map'),
+ Promise = getNative(context, 'Promise'),
+ Set = getNative(context, 'Set'),
+ WeakMap = getNative(context, 'WeakMap'),
+ nativeCreate = getNative(Object, 'create');
+ /** Used to store function metadata. */
+
+ var metaMap = WeakMap && new WeakMap();
+ /** Used to lookup unminified function names. */
+
+ var realNames = {};
+ /** Used to detect maps, sets, and weakmaps. */
+
+ var dataViewCtorString = toSource(DataView),
+ mapCtorString = toSource(Map),
+ promiseCtorString = toSource(Promise),
+ setCtorString = toSource(Set),
+ weakMapCtorString = toSource(WeakMap);
+ /** Used to convert symbols to primitives and strings. */
+
+ var symbolProto = _Symbol ? _Symbol.prototype : undefined$1,
+ symbolValueOf = symbolProto ? symbolProto.valueOf : undefined$1,
+ symbolToString = symbolProto ? symbolProto.toString : undefined$1;
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a `lodash` object which wraps `value` to enable implicit method
+ * chain sequences. Methods that operate on and return arrays, collections,
+ * and functions can be chained together. Methods that retrieve a single value
+ * or may return a primitive value will automatically end the chain sequence
+ * and return the unwrapped value. Otherwise, the value must be unwrapped
+ * with `_#value`.
+ *
+ * Explicit chain sequences, which must be unwrapped with `_#value`, may be
+ * enabled using `_.chain`.
+ *
+ * The execution of chained methods is lazy, that is, it's deferred until
+ * `_#value` is implicitly or explicitly called.
+ *
+ * Lazy evaluation allows several methods to support shortcut fusion.
+ * Shortcut fusion is an optimization to merge iteratee calls; this avoids
+ * the creation of intermediate arrays and can greatly reduce the number of
+ * iteratee executions. Sections of a chain sequence qualify for shortcut
+ * fusion if the section is applied to an array and iteratees accept only
+ * one argument. The heuristic for whether a section qualifies for shortcut
+ * fusion is subject to change.
+ *
+ * Chaining is supported in custom builds as long as the `_#value` method is
+ * directly or indirectly included in the build.
+ *
+ * In addition to lodash methods, wrappers have `Array` and `String` methods.
+ *
+ * The wrapper `Array` methods are:
+ * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
+ *
+ * The wrapper `String` methods are:
+ * `replace` and `split`
+ *
+ * The wrapper methods that support shortcut fusion are:
+ * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
+ * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
+ * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
+ *
+ * The chainable wrapper methods are:
+ * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
+ * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
+ * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
+ * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
+ * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
+ * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
+ * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
+ * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
+ * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
+ * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
+ * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
+ * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
+ * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
+ * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
+ * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
+ * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
+ * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
+ * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
+ * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
+ * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
+ * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
+ * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
+ * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
+ * `zipObject`, `zipObjectDeep`, and `zipWith`
+ *
+ * The wrapper methods that are **not** chainable by default are:
+ * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
+ * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
+ * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
+ * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
+ * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
+ * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
+ * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
+ * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
+ * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
+ * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
+ * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
+ * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
+ * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
+ * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
+ * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
+ * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
+ * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
+ * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
+ * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
+ * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
+ * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
+ * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
+ * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
+ * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
+ * `upperFirst`, `value`, and `words`
+ *
+ * @name _
+ * @constructor
+ * @category Seq
+ * @param {*} value The value to wrap in a `lodash` instance.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var wrapped = _([1, 2, 3]);
+ *
+ * // Returns an unwrapped value.
+ * wrapped.reduce(_.add);
+ * // => 6
+ *
+ * // Returns a wrapped value.
+ * var squares = wrapped.map(square);
+ *
+ * _.isArray(squares);
+ * // => false
+ *
+ * _.isArray(squares.value());
+ * // => true
+ */
+
+ function lodash(value) {
+ if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
+ if (value instanceof LodashWrapper) {
+ return value;
+ }
+
+ if (hasOwnProperty.call(value, '__wrapped__')) {
+ return wrapperClone(value);
+ }
+ }
+
+ return new LodashWrapper(value);
+ }
+ /**
+ * The base implementation of `_.create` without support for assigning
+ * properties to the created object.
+ *
+ * @private
+ * @param {Object} proto The object to inherit from.
+ * @returns {Object} Returns the new object.
+ */
+
+
+ var baseCreate = function () {
+ function object() {}
+
+ return function (proto) {
+ if (!isObject(proto)) {
+ return {};
+ }
+
+ if (objectCreate) {
+ return objectCreate(proto);
+ }
+
+ object.prototype = proto;
+ var result = new object();
+ object.prototype = undefined$1;
+ return result;
+ };
+ }();
+ /**
+ * The function whose prototype chain sequence wrappers inherit from.
+ *
+ * @private
+ */
+
+
+ function baseLodash() {// No operation performed.
+ }
+ /**
+ * The base constructor for creating `lodash` wrapper objects.
+ *
+ * @private
+ * @param {*} value The value to wrap.
+ * @param {boolean} [chainAll] Enable explicit method chain sequences.
+ */
+
+
+ function LodashWrapper(value, chainAll) {
+ this.__wrapped__ = value;
+ this.__actions__ = [];
+ this.__chain__ = !!chainAll;
+ this.__index__ = 0;
+ this.__values__ = undefined$1;
+ }
+ /**
+ * By default, the template delimiters used by lodash are like those in
+ * embedded Ruby (ERB) as well as ES2015 template strings. Change the
+ * following template settings to use alternative delimiters.
+ *
+ * @static
+ * @memberOf _
+ * @type {Object}
+ */
+
+
+ lodash.templateSettings = {
+ /**
+ * Used to detect `data` property values to be HTML-escaped.
+ *
+ * @memberOf _.templateSettings
+ * @type {RegExp}
+ */
+ 'escape': reEscape,
+
+ /**
+ * Used to detect code to be evaluated.
+ *
+ * @memberOf _.templateSettings
+ * @type {RegExp}
+ */
+ 'evaluate': reEvaluate,
+
+ /**
+ * Used to detect `data` property values to inject.
+ *
+ * @memberOf _.templateSettings
+ * @type {RegExp}
+ */
+ 'interpolate': reInterpolate,
+
+ /**
+ * Used to reference the data object in the template text.
+ *
+ * @memberOf _.templateSettings
+ * @type {string}
+ */
+ 'variable': '',
+
+ /**
+ * Used to import variables into the compiled template.
+ *
+ * @memberOf _.templateSettings
+ * @type {Object}
+ */
+ 'imports': {
+ /**
+ * A reference to the `lodash` function.
+ *
+ * @memberOf _.templateSettings.imports
+ * @type {Function}
+ */
+ '_': lodash
+ }
+ }; // Ensure wrappers are instances of `baseLodash`.
+
+ lodash.prototype = baseLodash.prototype;
+ lodash.prototype.constructor = lodash;
+ LodashWrapper.prototype = baseCreate(baseLodash.prototype);
+ LodashWrapper.prototype.constructor = LodashWrapper;
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
+ *
+ * @private
+ * @constructor
+ * @param {*} value The value to wrap.
+ */
+
+ function LazyWrapper(value) {
+ this.__wrapped__ = value;
+ this.__actions__ = [];
+ this.__dir__ = 1;
+ this.__filtered__ = false;
+ this.__iteratees__ = [];
+ this.__takeCount__ = MAX_ARRAY_LENGTH;
+ this.__views__ = [];
+ }
+ /**
+ * Creates a clone of the lazy wrapper object.
+ *
+ * @private
+ * @name clone
+ * @memberOf LazyWrapper
+ * @returns {Object} Returns the cloned `LazyWrapper` object.
+ */
+
+
+ function lazyClone() {
+ var result = new LazyWrapper(this.__wrapped__);
+ result.__actions__ = copyArray(this.__actions__);
+ result.__dir__ = this.__dir__;
+ result.__filtered__ = this.__filtered__;
+ result.__iteratees__ = copyArray(this.__iteratees__);
+ result.__takeCount__ = this.__takeCount__;
+ result.__views__ = copyArray(this.__views__);
+ return result;
+ }
+ /**
+ * Reverses the direction of lazy iteration.
+ *
+ * @private
+ * @name reverse
+ * @memberOf LazyWrapper
+ * @returns {Object} Returns the new reversed `LazyWrapper` object.
+ */
+
+
+ function lazyReverse() {
+ if (this.__filtered__) {
+ var result = new LazyWrapper(this);
+ result.__dir__ = -1;
+ result.__filtered__ = true;
+ } else {
+ result = this.clone();
+ result.__dir__ *= -1;
+ }
+
+ return result;
+ }
+ /**
+ * Extracts the unwrapped value from its lazy wrapper.
+ *
+ * @private
+ * @name value
+ * @memberOf LazyWrapper
+ * @returns {*} Returns the unwrapped value.
+ */
+
+
+ function lazyValue() {
+ var array = this.__wrapped__.value(),
+ dir = this.__dir__,
+ isArr = isArray(array),
+ isRight = dir < 0,
+ arrLength = isArr ? array.length : 0,
+ view = getView(0, arrLength, this.__views__),
+ start = view.start,
+ end = view.end,
+ length = end - start,
+ index = isRight ? end : start - 1,
+ iteratees = this.__iteratees__,
+ iterLength = iteratees.length,
+ resIndex = 0,
+ takeCount = nativeMin(length, this.__takeCount__);
+
+ if (!isArr || !isRight && arrLength == length && takeCount == length) {
+ return baseWrapperValue(array, this.__actions__);
+ }
+
+ var result = [];
+
+ outer: while (length-- && resIndex < takeCount) {
+ index += dir;
+ var iterIndex = -1,
+ value = array[index];
+
+ while (++iterIndex < iterLength) {
+ var data = iteratees[iterIndex],
+ iteratee = data.iteratee,
+ type = data.type,
+ computed = iteratee(value);
+
+ if (type == LAZY_MAP_FLAG) {
+ value = computed;
+ } else if (!computed) {
+ if (type == LAZY_FILTER_FLAG) {
+ continue outer;
+ } else {
+ break outer;
+ }
+ }
+ }
+
+ result[resIndex++] = value;
+ }
+
+ return result;
+ } // Ensure `LazyWrapper` is an instance of `baseLodash`.
+
+
+ LazyWrapper.prototype = baseCreate(baseLodash.prototype);
+ LazyWrapper.prototype.constructor = LazyWrapper;
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+
+ function Hash(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+ this.clear();
+
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+ /**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+
+
+ function hashClear() {
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
+ this.size = 0;
+ }
+ /**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+
+
+ function hashDelete(key) {
+ var result = this.has(key) && delete this.__data__[key];
+ this.size -= result ? 1 : 0;
+ return result;
+ }
+ /**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+
+
+ function hashGet(key) {
+ var data = this.__data__;
+
+ if (nativeCreate) {
+ var result = data[key];
+ return result === HASH_UNDEFINED ? undefined$1 : result;
+ }
+
+ return hasOwnProperty.call(data, key) ? data[key] : undefined$1;
+ }
+ /**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+
+
+ function hashHas(key) {
+ var data = this.__data__;
+ return nativeCreate ? data[key] !== undefined$1 : hasOwnProperty.call(data, key);
+ }
+ /**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+
+
+ function hashSet(key, value) {
+ var data = this.__data__;
+ this.size += this.has(key) ? 0 : 1;
+ data[key] = nativeCreate && value === undefined$1 ? HASH_UNDEFINED : value;
+ return this;
+ } // Add methods to `Hash`.
+
+
+ Hash.prototype.clear = hashClear;
+ Hash.prototype['delete'] = hashDelete;
+ Hash.prototype.get = hashGet;
+ Hash.prototype.has = hashHas;
+ Hash.prototype.set = hashSet;
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+
+ function ListCache(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+ this.clear();
+
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+ /**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+
+
+ function listCacheClear() {
+ this.__data__ = [];
+ this.size = 0;
+ }
+ /**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+
+
+ function listCacheDelete(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ return false;
+ }
+
+ var lastIndex = data.length - 1;
+
+ if (index == lastIndex) {
+ data.pop();
+ } else {
+ splice.call(data, index, 1);
+ }
+
+ --this.size;
+ return true;
+ }
+ /**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+
+
+ function listCacheGet(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+ return index < 0 ? undefined$1 : data[index][1];
+ }
+ /**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+
+
+ function listCacheHas(key) {
+ return assocIndexOf(this.__data__, key) > -1;
+ }
+ /**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+
+
+ function listCacheSet(key, value) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ ++this.size;
+ data.push([key, value]);
+ } else {
+ data[index][1] = value;
+ }
+
+ return this;
+ } // Add methods to `ListCache`.
+
+
+ ListCache.prototype.clear = listCacheClear;
+ ListCache.prototype['delete'] = listCacheDelete;
+ ListCache.prototype.get = listCacheGet;
+ ListCache.prototype.has = listCacheHas;
+ ListCache.prototype.set = listCacheSet;
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+
+ function MapCache(entries) {
+ var index = -1,
+ length = entries == null ? 0 : entries.length;
+ this.clear();
+
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+ /**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+
+
+ function mapCacheClear() {
+ this.size = 0;
+ this.__data__ = {
+ 'hash': new Hash(),
+ 'map': new (Map || ListCache)(),
+ 'string': new Hash()
+ };
+ }
+ /**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+
+
+ function mapCacheDelete(key) {
+ var result = getMapData(this, key)['delete'](key);
+ this.size -= result ? 1 : 0;
+ return result;
+ }
+ /**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+
+
+ function mapCacheGet(key) {
+ return getMapData(this, key).get(key);
+ }
+ /**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+
+
+ function mapCacheHas(key) {
+ return getMapData(this, key).has(key);
+ }
+ /**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+
+
+ function mapCacheSet(key, value) {
+ var data = getMapData(this, key),
+ size = data.size;
+ data.set(key, value);
+ this.size += data.size == size ? 0 : 1;
+ return this;
+ } // Add methods to `MapCache`.
+
+
+ MapCache.prototype.clear = mapCacheClear;
+ MapCache.prototype['delete'] = mapCacheDelete;
+ MapCache.prototype.get = mapCacheGet;
+ MapCache.prototype.has = mapCacheHas;
+ MapCache.prototype.set = mapCacheSet;
+ /*------------------------------------------------------------------------*/
+
+ /**
+ *
+ * Creates an array cache object to store unique values.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [values] The values to cache.
+ */
+
+ function SetCache(values) {
+ var index = -1,
+ length = values == null ? 0 : values.length;
+ this.__data__ = new MapCache();
+
+ while (++index < length) {
+ this.add(values[index]);
+ }
+ }
+ /**
+ * Adds `value` to the array cache.
+ *
+ * @private
+ * @name add
+ * @memberOf SetCache
+ * @alias push
+ * @param {*} value The value to cache.
+ * @returns {Object} Returns the cache instance.
+ */
+
+
+ function setCacheAdd(value) {
+ this.__data__.set(value, HASH_UNDEFINED);
+
+ return this;
+ }
+ /**
+ * Checks if `value` is in the array cache.
+ *
+ * @private
+ * @name has
+ * @memberOf SetCache
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `true` if `value` is found, else `false`.
+ */
+
+
+ function setCacheHas(value) {
+ return this.__data__.has(value);
+ } // Add methods to `SetCache`.
+
+
+ SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
+ SetCache.prototype.has = setCacheHas;
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a stack cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+
+ function Stack(entries) {
+ var data = this.__data__ = new ListCache(entries);
+ this.size = data.size;
+ }
+ /**
+ * Removes all key-value entries from the stack.
+ *
+ * @private
+ * @name clear
+ * @memberOf Stack
+ */
+
+
+ function stackClear() {
+ this.__data__ = new ListCache();
+ this.size = 0;
+ }
+ /**
+ * Removes `key` and its value from the stack.
+ *
+ * @private
+ * @name delete
+ * @memberOf Stack
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+
+
+ function stackDelete(key) {
+ var data = this.__data__,
+ result = data['delete'](key);
+ this.size = data.size;
+ return result;
+ }
+ /**
+ * Gets the stack value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Stack
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+
+
+ function stackGet(key) {
+ return this.__data__.get(key);
+ }
+ /**
+ * Checks if a stack value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Stack
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+
+
+ function stackHas(key) {
+ return this.__data__.has(key);
+ }
+ /**
+ * Sets the stack `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Stack
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the stack cache instance.
+ */
+
+
+ function stackSet(key, value) {
+ var data = this.__data__;
+
+ if (data instanceof ListCache) {
+ var pairs = data.__data__;
+
+ if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {
+ pairs.push([key, value]);
+ this.size = ++data.size;
+ return this;
+ }
+
+ data = this.__data__ = new MapCache(pairs);
+ }
+
+ data.set(key, value);
+ this.size = data.size;
+ return this;
+ } // Add methods to `Stack`.
+
+
+ Stack.prototype.clear = stackClear;
+ Stack.prototype['delete'] = stackDelete;
+ Stack.prototype.get = stackGet;
+ Stack.prototype.has = stackHas;
+ Stack.prototype.set = stackSet;
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates an array of the enumerable property names of the array-like `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @param {boolean} inherited Specify returning inherited property names.
+ * @returns {Array} Returns the array of property names.
+ */
+
+ function arrayLikeKeys(value, inherited) {
+ var isArr = isArray(value),
+ isArg = !isArr && isArguments(value),
+ isBuff = !isArr && !isArg && isBuffer(value),
+ isType = !isArr && !isArg && !isBuff && isTypedArray(value),
+ skipIndexes = isArr || isArg || isBuff || isType,
+ result = skipIndexes ? baseTimes(value.length, String) : [],
+ length = result.length;
+
+ for (var key in value) {
+ if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode.
+ key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.
+ isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.
+ isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.
+ isIndex(key, length)))) {
+ result.push(key);
+ }
+ }
+
+ return result;
+ }
+ /**
+ * A specialized version of `_.sample` for arrays.
+ *
+ * @private
+ * @param {Array} array The array to sample.
+ * @returns {*} Returns the random element.
+ */
+
+
+ function arraySample(array) {
+ var length = array.length;
+ return length ? array[baseRandom(0, length - 1)] : undefined$1;
+ }
+ /**
+ * A specialized version of `_.sampleSize` for arrays.
+ *
+ * @private
+ * @param {Array} array The array to sample.
+ * @param {number} n The number of elements to sample.
+ * @returns {Array} Returns the random elements.
+ */
+
+
+ function arraySampleSize(array, n) {
+ return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
+ }
+ /**
+ * A specialized version of `_.shuffle` for arrays.
+ *
+ * @private
+ * @param {Array} array The array to shuffle.
+ * @returns {Array} Returns the new shuffled array.
+ */
+
+
+ function arrayShuffle(array) {
+ return shuffleSelf(copyArray(array));
+ }
+ /**
+ * This function is like `assignValue` except that it doesn't assign
+ * `undefined` values.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+
+
+ function assignMergeValue(object, key, value) {
+ if (value !== undefined$1 && !eq(object[key], value) || value === undefined$1 && !(key in object)) {
+ baseAssignValue(object, key, value);
+ }
+ }
+ /**
+ * Assigns `value` to `key` of `object` if the existing value is not equivalent
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+
+
+ function assignValue(object, key, value) {
+ var objValue = object[key];
+
+ if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined$1 && !(key in object)) {
+ baseAssignValue(object, key, value);
+ }
+ }
+ /**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+
+
+ function assocIndexOf(array, key) {
+ var length = array.length;
+
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+
+ return -1;
+ }
+ /**
+ * Aggregates elements of `collection` on `accumulator` with keys transformed
+ * by `iteratee` and values set by `setter`.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} setter The function to set `accumulator` values.
+ * @param {Function} iteratee The iteratee to transform keys.
+ * @param {Object} accumulator The initial aggregated object.
+ * @returns {Function} Returns `accumulator`.
+ */
+
+
+ function baseAggregator(collection, setter, iteratee, accumulator) {
+ baseEach(collection, function (value, key, collection) {
+ setter(accumulator, value, iteratee(value), collection);
+ });
+ return accumulator;
+ }
+ /**
+ * The base implementation of `_.assign` without support for multiple sources
+ * or `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+
+
+ function baseAssign(object, source) {
+ return object && copyObject(source, keys(source), object);
+ }
+ /**
+ * The base implementation of `_.assignIn` without support for multiple sources
+ * or `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+
+
+ function baseAssignIn(object, source) {
+ return object && copyObject(source, keysIn(source), object);
+ }
+ /**
+ * The base implementation of `assignValue` and `assignMergeValue` without
+ * value checks.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+
+
+ function baseAssignValue(object, key, value) {
+ if (key == '__proto__' && defineProperty) {
+ defineProperty(object, key, {
+ 'configurable': true,
+ 'enumerable': true,
+ 'value': value,
+ 'writable': true
+ });
+ } else {
+ object[key] = value;
+ }
+ }
+ /**
+ * The base implementation of `_.at` without support for individual paths.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {string[]} paths The property paths to pick.
+ * @returns {Array} Returns the picked elements.
+ */
+
+
+ function baseAt(object, paths) {
+ var index = -1,
+ length = paths.length,
+ result = Array(length),
+ skip = object == null;
+
+ while (++index < length) {
+ result[index] = skip ? undefined$1 : get(object, paths[index]);
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.clamp` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {number} number The number to clamp.
+ * @param {number} [lower] The lower bound.
+ * @param {number} upper The upper bound.
+ * @returns {number} Returns the clamped number.
+ */
+
+
+ function baseClamp(number, lower, upper) {
+ if (number === number) {
+ if (upper !== undefined$1) {
+ number = number <= upper ? number : upper;
+ }
+
+ if (lower !== undefined$1) {
+ number = number >= lower ? number : lower;
+ }
+ }
+
+ return number;
+ }
+ /**
+ * The base implementation of `_.clone` and `_.cloneDeep` which tracks
+ * traversed objects.
+ *
+ * @private
+ * @param {*} value The value to clone.
+ * @param {boolean} bitmask The bitmask flags.
+ * 1 - Deep clone
+ * 2 - Flatten inherited properties
+ * 4 - Clone symbols
+ * @param {Function} [customizer] The function to customize cloning.
+ * @param {string} [key] The key of `value`.
+ * @param {Object} [object] The parent object of `value`.
+ * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
+ * @returns {*} Returns the cloned value.
+ */
+
+
+ function baseClone(value, bitmask, customizer, key, object, stack) {
+ var result,
+ isDeep = bitmask & CLONE_DEEP_FLAG,
+ isFlat = bitmask & CLONE_FLAT_FLAG,
+ isFull = bitmask & CLONE_SYMBOLS_FLAG;
+
+ if (customizer) {
+ result = object ? customizer(value, key, object, stack) : customizer(value);
+ }
+
+ if (result !== undefined$1) {
+ return result;
+ }
+
+ if (!isObject(value)) {
+ return value;
+ }
+
+ var isArr = isArray(value);
+
+ if (isArr) {
+ result = initCloneArray(value);
+
+ if (!isDeep) {
+ return copyArray(value, result);
+ }
+ } else {
+ var tag = getTag(value),
+ isFunc = tag == funcTag || tag == genTag;
+
+ if (isBuffer(value)) {
+ return cloneBuffer(value, isDeep);
+ }
+
+ if (tag == objectTag || tag == argsTag || isFunc && !object) {
+ result = isFlat || isFunc ? {} : initCloneObject(value);
+
+ if (!isDeep) {
+ return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));
+ }
+ } else {
+ if (!cloneableTags[tag]) {
+ return object ? value : {};
+ }
+
+ result = initCloneByTag(value, tag, isDeep);
+ }
+ } // Check for circular references and return its corresponding clone.
+
+
+ stack || (stack = new Stack());
+ var stacked = stack.get(value);
+
+ if (stacked) {
+ return stacked;
+ }
+
+ stack.set(value, result);
+
+ if (isSet(value)) {
+ value.forEach(function (subValue) {
+ result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
+ });
+ } else if (isMap(value)) {
+ value.forEach(function (subValue, key) {
+ result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
+ });
+ }
+
+ var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;
+ var props = isArr ? undefined$1 : keysFunc(value);
+ arrayEach(props || value, function (subValue, key) {
+ if (props) {
+ key = subValue;
+ subValue = value[key];
+ } // Recursively populate clone (susceptible to call stack limits).
+
+
+ assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
+ });
+ return result;
+ }
+ /**
+ * The base implementation of `_.conforms` which doesn't clone `source`.
+ *
+ * @private
+ * @param {Object} source The object of property predicates to conform to.
+ * @returns {Function} Returns the new spec function.
+ */
+
+
+ function baseConforms(source) {
+ var props = keys(source);
+ return function (object) {
+ return baseConformsTo(object, source, props);
+ };
+ }
+ /**
+ * The base implementation of `_.conformsTo` which accepts `props` to check.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property predicates to conform to.
+ * @returns {boolean} Returns `true` if `object` conforms, else `false`.
+ */
+
+
+ function baseConformsTo(object, source, props) {
+ var length = props.length;
+
+ if (object == null) {
+ return !length;
+ }
+
+ object = Object(object);
+
+ while (length--) {
+ var key = props[length],
+ predicate = source[key],
+ value = object[key];
+
+ if (value === undefined$1 && !(key in object) || !predicate(value)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ /**
+ * The base implementation of `_.delay` and `_.defer` which accepts `args`
+ * to provide to `func`.
+ *
+ * @private
+ * @param {Function} func The function to delay.
+ * @param {number} wait The number of milliseconds to delay invocation.
+ * @param {Array} args The arguments to provide to `func`.
+ * @returns {number|Object} Returns the timer id or timeout object.
+ */
+
+
+ function baseDelay(func, wait, args) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ return setTimeout(function () {
+ func.apply(undefined$1, args);
+ }, wait);
+ }
+ /**
+ * The base implementation of methods like `_.difference` without support
+ * for excluding multiple arrays or iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Array} values The values to exclude.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of filtered values.
+ */
+
+
+ function baseDifference(array, values, iteratee, comparator) {
+ var index = -1,
+ includes = arrayIncludes,
+ isCommon = true,
+ length = array.length,
+ result = [],
+ valuesLength = values.length;
+
+ if (!length) {
+ return result;
+ }
+
+ if (iteratee) {
+ values = arrayMap(values, baseUnary(iteratee));
+ }
+
+ if (comparator) {
+ includes = arrayIncludesWith;
+ isCommon = false;
+ } else if (values.length >= LARGE_ARRAY_SIZE) {
+ includes = cacheHas;
+ isCommon = false;
+ values = new SetCache(values);
+ }
+
+ outer: while (++index < length) {
+ var value = array[index],
+ computed = iteratee == null ? value : iteratee(value);
+ value = comparator || value !== 0 ? value : 0;
+
+ if (isCommon && computed === computed) {
+ var valuesIndex = valuesLength;
+
+ while (valuesIndex--) {
+ if (values[valuesIndex] === computed) {
+ continue outer;
+ }
+ }
+
+ result.push(value);
+ } else if (!includes(values, computed, comparator)) {
+ result.push(value);
+ }
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.forEach` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array|Object} Returns `collection`.
+ */
+
+
+ var baseEach = createBaseEach(baseForOwn);
+ /**
+ * The base implementation of `_.forEachRight` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array|Object} Returns `collection`.
+ */
+
+ var baseEachRight = createBaseEach(baseForOwnRight, true);
+ /**
+ * The base implementation of `_.every` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`
+ */
+
+ function baseEvery(collection, predicate) {
+ var result = true;
+ baseEach(collection, function (value, index, collection) {
+ result = !!predicate(value, index, collection);
+ return result;
+ });
+ return result;
+ }
+ /**
+ * The base implementation of methods like `_.max` and `_.min` which accepts a
+ * `comparator` to determine the extremum value.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The iteratee invoked per iteration.
+ * @param {Function} comparator The comparator used to compare values.
+ * @returns {*} Returns the extremum value.
+ */
+
+
+ function baseExtremum(array, iteratee, comparator) {
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ var value = array[index],
+ current = iteratee(value);
+
+ if (current != null && (computed === undefined$1 ? current === current && !isSymbol(current) : comparator(current, computed))) {
+ var computed = current,
+ result = value;
+ }
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.fill` without an iteratee call guard.
+ *
+ * @private
+ * @param {Array} array The array to fill.
+ * @param {*} value The value to fill `array` with.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns `array`.
+ */
+
+
+ function baseFill(array, value, start, end) {
+ var length = array.length;
+ start = toInteger(start);
+
+ if (start < 0) {
+ start = -start > length ? 0 : length + start;
+ }
+
+ end = end === undefined$1 || end > length ? length : toInteger(end);
+
+ if (end < 0) {
+ end += length;
+ }
+
+ end = start > end ? 0 : toLength(end);
+
+ while (start < end) {
+ array[start++] = value;
+ }
+
+ return array;
+ }
+ /**
+ * The base implementation of `_.filter` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ */
+
+
+ function baseFilter(collection, predicate) {
+ var result = [];
+ baseEach(collection, function (value, index, collection) {
+ if (predicate(value, index, collection)) {
+ result.push(value);
+ }
+ });
+ return result;
+ }
+ /**
+ * The base implementation of `_.flatten` with support for restricting flattening.
+ *
+ * @private
+ * @param {Array} array The array to flatten.
+ * @param {number} depth The maximum recursion depth.
+ * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
+ * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
+ * @param {Array} [result=[]] The initial result value.
+ * @returns {Array} Returns the new flattened array.
+ */
+
+
+ function baseFlatten(array, depth, predicate, isStrict, result) {
+ var index = -1,
+ length = array.length;
+ predicate || (predicate = isFlattenable);
+ result || (result = []);
+
+ while (++index < length) {
+ var value = array[index];
+
+ if (depth > 0 && predicate(value)) {
+ if (depth > 1) {
+ // Recursively flatten arrays (susceptible to call stack limits).
+ baseFlatten(value, depth - 1, predicate, isStrict, result);
+ } else {
+ arrayPush(result, value);
+ }
+ } else if (!isStrict) {
+ result[result.length] = value;
+ }
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `baseForOwn` which iterates over `object`
+ * properties returned by `keysFunc` and invokes `iteratee` for each property.
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+
+
+ var baseFor = createBaseFor();
+ /**
+ * This function is like `baseFor` except that it iterates over properties
+ * in the opposite order.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+
+ var baseForRight = createBaseFor(true);
+ /**
+ * The base implementation of `_.forOwn` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+
+ function baseForOwn(object, iteratee) {
+ return object && baseFor(object, iteratee, keys);
+ }
+ /**
+ * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+
+
+ function baseForOwnRight(object, iteratee) {
+ return object && baseForRight(object, iteratee, keys);
+ }
+ /**
+ * The base implementation of `_.functions` which creates an array of
+ * `object` function property names filtered from `props`.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Array} props The property names to filter.
+ * @returns {Array} Returns the function names.
+ */
+
+
+ function baseFunctions(object, props) {
+ return arrayFilter(props, function (key) {
+ return isFunction(object[key]);
+ });
+ }
+ /**
+ * The base implementation of `_.get` without support for default values.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @returns {*} Returns the resolved value.
+ */
+
+
+ function baseGet(object, path) {
+ path = castPath(path, object);
+ var index = 0,
+ length = path.length;
+
+ while (object != null && index < length) {
+ object = object[toKey(path[index++])];
+ }
+
+ return index && index == length ? object : undefined$1;
+ }
+ /**
+ * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
+ * `keysFunc` and `symbolsFunc` to get the enumerable property names and
+ * symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @param {Function} symbolsFunc The function to get the symbols of `object`.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+
+
+ function baseGetAllKeys(object, keysFunc, symbolsFunc) {
+ var result = keysFunc(object);
+ return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
+ }
+ /**
+ * The base implementation of `getTag` without fallbacks for buggy environments.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+
+
+ function baseGetTag(value) {
+ if (value == null) {
+ return value === undefined$1 ? undefinedTag : nullTag;
+ }
+
+ return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
+ }
+ /**
+ * The base implementation of `_.gt` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is greater than `other`,
+ * else `false`.
+ */
+
+
+ function baseGt(value, other) {
+ return value > other;
+ }
+ /**
+ * The base implementation of `_.has` without support for deep paths.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {Array|string} key The key to check.
+ * @returns {boolean} Returns `true` if `key` exists, else `false`.
+ */
+
+
+ function baseHas(object, key) {
+ return object != null && hasOwnProperty.call(object, key);
+ }
+ /**
+ * The base implementation of `_.hasIn` without support for deep paths.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {Array|string} key The key to check.
+ * @returns {boolean} Returns `true` if `key` exists, else `false`.
+ */
+
+
+ function baseHasIn(object, key) {
+ return object != null && key in Object(object);
+ }
+ /**
+ * The base implementation of `_.inRange` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {number} number The number to check.
+ * @param {number} start The start of the range.
+ * @param {number} end The end of the range.
+ * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
+ */
+
+
+ function baseInRange(number, start, end) {
+ return number >= nativeMin(start, end) && number < nativeMax(start, end);
+ }
+ /**
+ * The base implementation of methods like `_.intersection`, without support
+ * for iteratee shorthands, that accepts an array of arrays to inspect.
+ *
+ * @private
+ * @param {Array} arrays The arrays to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of shared values.
+ */
+
+
+ function baseIntersection(arrays, iteratee, comparator) {
+ var includes = comparator ? arrayIncludesWith : arrayIncludes,
+ length = arrays[0].length,
+ othLength = arrays.length,
+ othIndex = othLength,
+ caches = Array(othLength),
+ maxLength = Infinity,
+ result = [];
+
+ while (othIndex--) {
+ var array = arrays[othIndex];
+
+ if (othIndex && iteratee) {
+ array = arrayMap(array, baseUnary(iteratee));
+ }
+
+ maxLength = nativeMin(array.length, maxLength);
+ caches[othIndex] = !comparator && (iteratee || length >= 120 && array.length >= 120) ? new SetCache(othIndex && array) : undefined$1;
+ }
+
+ array = arrays[0];
+ var index = -1,
+ seen = caches[0];
+
+ outer: while (++index < length && result.length < maxLength) {
+ var value = array[index],
+ computed = iteratee ? iteratee(value) : value;
+ value = comparator || value !== 0 ? value : 0;
+
+ if (!(seen ? cacheHas(seen, computed) : includes(result, computed, comparator))) {
+ othIndex = othLength;
+
+ while (--othIndex) {
+ var cache = caches[othIndex];
+
+ if (!(cache ? cacheHas(cache, computed) : includes(arrays[othIndex], computed, comparator))) {
+ continue outer;
+ }
+ }
+
+ if (seen) {
+ seen.push(computed);
+ }
+
+ result.push(value);
+ }
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.invert` and `_.invertBy` which inverts
+ * `object` with values transformed by `iteratee` and set by `setter`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} setter The function to set `accumulator` values.
+ * @param {Function} iteratee The iteratee to transform values.
+ * @param {Object} accumulator The initial inverted object.
+ * @returns {Function} Returns `accumulator`.
+ */
+
+
+ function baseInverter(object, setter, iteratee, accumulator) {
+ baseForOwn(object, function (value, key, object) {
+ setter(accumulator, iteratee(value), key, object);
+ });
+ return accumulator;
+ }
+ /**
+ * The base implementation of `_.invoke` without support for individual
+ * method arguments.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the method to invoke.
+ * @param {Array} args The arguments to invoke the method with.
+ * @returns {*} Returns the result of the invoked method.
+ */
+
+
+ function baseInvoke(object, path, args) {
+ path = castPath(path, object);
+ object = parent(object, path);
+ var func = object == null ? object : object[toKey(last(path))];
+ return func == null ? undefined$1 : apply(func, object, args);
+ }
+ /**
+ * The base implementation of `_.isArguments`.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ */
+
+
+ function baseIsArguments(value) {
+ return isObjectLike(value) && baseGetTag(value) == argsTag;
+ }
+ /**
+ * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
+ */
+
+
+ function baseIsArrayBuffer(value) {
+ return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
+ }
+ /**
+ * The base implementation of `_.isDate` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
+ */
+
+
+ function baseIsDate(value) {
+ return isObjectLike(value) && baseGetTag(value) == dateTag;
+ }
+ /**
+ * The base implementation of `_.isEqual` which supports partial comparisons
+ * and tracks traversed objects.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {boolean} bitmask The bitmask flags.
+ * 1 - Unordered comparison
+ * 2 - Partial comparison
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @param {Object} [stack] Tracks traversed `value` and `other` objects.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ */
+
+
+ function baseIsEqual(value, other, bitmask, customizer, stack) {
+ if (value === other) {
+ return true;
+ }
+
+ if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {
+ return value !== value && other !== other;
+ }
+
+ return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
+ }
+ /**
+ * A specialized version of `baseIsEqual` for arrays and objects which performs
+ * deep comparisons and tracks traversed objects enabling objects with circular
+ * references to be compared.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Object} [stack] Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+
+
+ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
+ var objIsArr = isArray(object),
+ othIsArr = isArray(other),
+ objTag = objIsArr ? arrayTag : getTag(object),
+ othTag = othIsArr ? arrayTag : getTag(other);
+ objTag = objTag == argsTag ? objectTag : objTag;
+ othTag = othTag == argsTag ? objectTag : othTag;
+ var objIsObj = objTag == objectTag,
+ othIsObj = othTag == objectTag,
+ isSameTag = objTag == othTag;
+
+ if (isSameTag && isBuffer(object)) {
+ if (!isBuffer(other)) {
+ return false;
+ }
+
+ objIsArr = true;
+ objIsObj = false;
+ }
+
+ if (isSameTag && !objIsObj) {
+ stack || (stack = new Stack());
+ return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
+ }
+
+ if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
+ var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
+
+ if (objIsWrapped || othIsWrapped) {
+ var objUnwrapped = objIsWrapped ? object.value() : object,
+ othUnwrapped = othIsWrapped ? other.value() : other;
+ stack || (stack = new Stack());
+ return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
+ }
+ }
+
+ if (!isSameTag) {
+ return false;
+ }
+
+ stack || (stack = new Stack());
+ return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
+ }
+ /**
+ * The base implementation of `_.isMap` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a map, else `false`.
+ */
+
+
+ function baseIsMap(value) {
+ return isObjectLike(value) && getTag(value) == mapTag;
+ }
+ /**
+ * The base implementation of `_.isMatch` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property values to match.
+ * @param {Array} matchData The property names, values, and compare flags to match.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ */
+
+
+ function baseIsMatch(object, source, matchData, customizer) {
+ var index = matchData.length,
+ length = index,
+ noCustomizer = !customizer;
+
+ if (object == null) {
+ return !length;
+ }
+
+ object = Object(object);
+
+ while (index--) {
+ var data = matchData[index];
+
+ if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {
+ return false;
+ }
+ }
+
+ while (++index < length) {
+ data = matchData[index];
+ var key = data[0],
+ objValue = object[key],
+ srcValue = data[1];
+
+ if (noCustomizer && data[2]) {
+ if (objValue === undefined$1 && !(key in object)) {
+ return false;
+ }
+ } else {
+ var stack = new Stack();
+
+ if (customizer) {
+ var result = customizer(objValue, srcValue, key, object, source, stack);
+ }
+
+ if (!(result === undefined$1 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result)) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+ /**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ */
+
+
+ function baseIsNative(value) {
+ if (!isObject(value) || isMasked(value)) {
+ return false;
+ }
+
+ var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+ }
+ /**
+ * The base implementation of `_.isRegExp` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
+ */
+
+
+ function baseIsRegExp(value) {
+ return isObjectLike(value) && baseGetTag(value) == regexpTag;
+ }
+ /**
+ * The base implementation of `_.isSet` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a set, else `false`.
+ */
+
+
+ function baseIsSet(value) {
+ return isObjectLike(value) && getTag(value) == setTag;
+ }
+ /**
+ * The base implementation of `_.isTypedArray` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+ */
+
+
+ function baseIsTypedArray(value) {
+ return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
+ }
+ /**
+ * The base implementation of `_.iteratee`.
+ *
+ * @private
+ * @param {*} [value=_.identity] The value to convert to an iteratee.
+ * @returns {Function} Returns the iteratee.
+ */
+
+
+ function baseIteratee(value) {
+ // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
+ // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
+ if (typeof value == 'function') {
+ return value;
+ }
+
+ if (value == null) {
+ return identity;
+ }
+
+ if (_typeof(value) == 'object') {
+ return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);
+ }
+
+ return property(value);
+ }
+ /**
+ * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+
+
+ function baseKeys(object) {
+ if (!isPrototype(object)) {
+ return nativeKeys(object);
+ }
+
+ var result = [];
+
+ for (var key in Object(object)) {
+ if (hasOwnProperty.call(object, key) && key != 'constructor') {
+ result.push(key);
+ }
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+
+
+ function baseKeysIn(object) {
+ if (!isObject(object)) {
+ return nativeKeysIn(object);
+ }
+
+ var isProto = isPrototype(object),
+ result = [];
+
+ for (var key in object) {
+ if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+ result.push(key);
+ }
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.lt` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is less than `other`,
+ * else `false`.
+ */
+
+
+ function baseLt(value, other) {
+ return value < other;
+ }
+ /**
+ * The base implementation of `_.map` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+
+
+ function baseMap(collection, iteratee) {
+ var index = -1,
+ result = isArrayLike(collection) ? Array(collection.length) : [];
+ baseEach(collection, function (value, key, collection) {
+ result[++index] = iteratee(value, key, collection);
+ });
+ return result;
+ }
+ /**
+ * The base implementation of `_.matches` which doesn't clone `source`.
+ *
+ * @private
+ * @param {Object} source The object of property values to match.
+ * @returns {Function} Returns the new spec function.
+ */
+
+
+ function baseMatches(source) {
+ var matchData = getMatchData(source);
+
+ if (matchData.length == 1 && matchData[0][2]) {
+ return matchesStrictComparable(matchData[0][0], matchData[0][1]);
+ }
+
+ return function (object) {
+ return object === source || baseIsMatch(object, source, matchData);
+ };
+ }
+ /**
+ * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
+ *
+ * @private
+ * @param {string} path The path of the property to get.
+ * @param {*} srcValue The value to match.
+ * @returns {Function} Returns the new spec function.
+ */
+
+
+ function baseMatchesProperty(path, srcValue) {
+ if (isKey(path) && isStrictComparable(srcValue)) {
+ return matchesStrictComparable(toKey(path), srcValue);
+ }
+
+ return function (object) {
+ var objValue = get(object, path);
+ return objValue === undefined$1 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
+ };
+ }
+ /**
+ * The base implementation of `_.merge` without support for multiple sources.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {number} srcIndex The index of `source`.
+ * @param {Function} [customizer] The function to customize merged values.
+ * @param {Object} [stack] Tracks traversed source values and their merged
+ * counterparts.
+ */
+
+
+ function baseMerge(object, source, srcIndex, customizer, stack) {
+ if (object === source) {
+ return;
+ }
+
+ baseFor(source, function (srcValue, key) {
+ stack || (stack = new Stack());
+
+ if (isObject(srcValue)) {
+ baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
+ } else {
+ var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + '', object, source, stack) : undefined$1;
+
+ if (newValue === undefined$1) {
+ newValue = srcValue;
+ }
+
+ assignMergeValue(object, key, newValue);
+ }
+ }, keysIn);
+ }
+ /**
+ * A specialized version of `baseMerge` for arrays and objects which performs
+ * deep merges and tracks traversed objects enabling objects with circular
+ * references to be merged.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {string} key The key of the value to merge.
+ * @param {number} srcIndex The index of `source`.
+ * @param {Function} mergeFunc The function to merge values.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @param {Object} [stack] Tracks traversed source values and their merged
+ * counterparts.
+ */
+
+
+ function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
+ var objValue = safeGet(object, key),
+ srcValue = safeGet(source, key),
+ stacked = stack.get(srcValue);
+
+ if (stacked) {
+ assignMergeValue(object, key, stacked);
+ return;
+ }
+
+ var newValue = customizer ? customizer(objValue, srcValue, key + '', object, source, stack) : undefined$1;
+ var isCommon = newValue === undefined$1;
+
+ if (isCommon) {
+ var isArr = isArray(srcValue),
+ isBuff = !isArr && isBuffer(srcValue),
+ isTyped = !isArr && !isBuff && isTypedArray(srcValue);
+ newValue = srcValue;
+
+ if (isArr || isBuff || isTyped) {
+ if (isArray(objValue)) {
+ newValue = objValue;
+ } else if (isArrayLikeObject(objValue)) {
+ newValue = copyArray(objValue);
+ } else if (isBuff) {
+ isCommon = false;
+ newValue = cloneBuffer(srcValue, true);
+ } else if (isTyped) {
+ isCommon = false;
+ newValue = cloneTypedArray(srcValue, true);
+ } else {
+ newValue = [];
+ }
+ } else if (isPlainObject(srcValue) || isArguments(srcValue)) {
+ newValue = objValue;
+
+ if (isArguments(objValue)) {
+ newValue = toPlainObject(objValue);
+ } else if (!isObject(objValue) || isFunction(objValue)) {
+ newValue = initCloneObject(srcValue);
+ }
+ } else {
+ isCommon = false;
+ }
+ }
+
+ if (isCommon) {
+ // Recursively merge objects and arrays (susceptible to call stack limits).
+ stack.set(srcValue, newValue);
+ mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
+ stack['delete'](srcValue);
+ }
+
+ assignMergeValue(object, key, newValue);
+ }
+ /**
+ * The base implementation of `_.nth` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {number} n The index of the element to return.
+ * @returns {*} Returns the nth element of `array`.
+ */
+
+
+ function baseNth(array, n) {
+ var length = array.length;
+
+ if (!length) {
+ return;
+ }
+
+ n += n < 0 ? length : 0;
+ return isIndex(n, length) ? array[n] : undefined$1;
+ }
+ /**
+ * The base implementation of `_.orderBy` without param guards.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+ * @param {string[]} orders The sort orders of `iteratees`.
+ * @returns {Array} Returns the new sorted array.
+ */
+
+
+ function baseOrderBy(collection, iteratees, orders) {
+ if (iteratees.length) {
+ iteratees = arrayMap(iteratees, function (iteratee) {
+ if (isArray(iteratee)) {
+ return function (value) {
+ return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
+ };
+ }
+
+ return iteratee;
+ });
+ } else {
+ iteratees = [identity];
+ }
+
+ var index = -1;
+ iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
+ var result = baseMap(collection, function (value, key, collection) {
+ var criteria = arrayMap(iteratees, function (iteratee) {
+ return iteratee(value);
+ });
+ return {
+ 'criteria': criteria,
+ 'index': ++index,
+ 'value': value
+ };
+ });
+ return baseSortBy(result, function (object, other) {
+ return compareMultiple(object, other, orders);
+ });
+ }
+ /**
+ * The base implementation of `_.pick` without support for individual
+ * property identifiers.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {string[]} paths The property paths to pick.
+ * @returns {Object} Returns the new object.
+ */
+
+
+ function basePick(object, paths) {
+ return basePickBy(object, paths, function (value, path) {
+ return hasIn(object, path);
+ });
+ }
+ /**
+ * The base implementation of `_.pickBy` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {string[]} paths The property paths to pick.
+ * @param {Function} predicate The function invoked per property.
+ * @returns {Object} Returns the new object.
+ */
+
+
+ function basePickBy(object, paths, predicate) {
+ var index = -1,
+ length = paths.length,
+ result = {};
+
+ while (++index < length) {
+ var path = paths[index],
+ value = baseGet(object, path);
+
+ if (predicate(value, path)) {
+ baseSet(result, castPath(path, object), value);
+ }
+ }
+
+ return result;
+ }
+ /**
+ * A specialized version of `baseProperty` which supports deep paths.
+ *
+ * @private
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new accessor function.
+ */
+
+
+ function basePropertyDeep(path) {
+ return function (object) {
+ return baseGet(object, path);
+ };
+ }
+ /**
+ * The base implementation of `_.pullAllBy` without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to remove.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns `array`.
+ */
+
+
+ function basePullAll(array, values, iteratee, comparator) {
+ var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
+ index = -1,
+ length = values.length,
+ seen = array;
+
+ if (array === values) {
+ values = copyArray(values);
+ }
+
+ if (iteratee) {
+ seen = arrayMap(array, baseUnary(iteratee));
+ }
+
+ while (++index < length) {
+ var fromIndex = 0,
+ value = values[index],
+ computed = iteratee ? iteratee(value) : value;
+
+ while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
+ if (seen !== array) {
+ splice.call(seen, fromIndex, 1);
+ }
+
+ splice.call(array, fromIndex, 1);
+ }
+ }
+
+ return array;
+ }
+ /**
+ * The base implementation of `_.pullAt` without support for individual
+ * indexes or capturing the removed elements.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {number[]} indexes The indexes of elements to remove.
+ * @returns {Array} Returns `array`.
+ */
+
+
+ function basePullAt(array, indexes) {
+ var length = array ? indexes.length : 0,
+ lastIndex = length - 1;
+
+ while (length--) {
+ var index = indexes[length];
+
+ if (length == lastIndex || index !== previous) {
+ var previous = index;
+
+ if (isIndex(index)) {
+ splice.call(array, index, 1);
+ } else {
+ baseUnset(array, index);
+ }
+ }
+ }
+
+ return array;
+ }
+ /**
+ * The base implementation of `_.random` without support for returning
+ * floating-point numbers.
+ *
+ * @private
+ * @param {number} lower The lower bound.
+ * @param {number} upper The upper bound.
+ * @returns {number} Returns the random number.
+ */
+
+
+ function baseRandom(lower, upper) {
+ return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
+ }
+ /**
+ * The base implementation of `_.range` and `_.rangeRight` which doesn't
+ * coerce arguments.
+ *
+ * @private
+ * @param {number} start The start of the range.
+ * @param {number} end The end of the range.
+ * @param {number} step The value to increment or decrement by.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Array} Returns the range of numbers.
+ */
+
+
+ function baseRange(start, end, step, fromRight) {
+ var index = -1,
+ length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
+ result = Array(length);
+
+ while (length--) {
+ result[fromRight ? length : ++index] = start;
+ start += step;
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.repeat` which doesn't coerce arguments.
+ *
+ * @private
+ * @param {string} string The string to repeat.
+ * @param {number} n The number of times to repeat the string.
+ * @returns {string} Returns the repeated string.
+ */
+
+
+ function baseRepeat(string, n) {
+ var result = '';
+
+ if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
+ return result;
+ } // Leverage the exponentiation by squaring algorithm for a faster repeat.
+ // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
+
+
+ do {
+ if (n % 2) {
+ result += string;
+ }
+
+ n = nativeFloor(n / 2);
+
+ if (n) {
+ string += string;
+ }
+ } while (n);
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.rest` which doesn't validate or coerce arguments.
+ *
+ * @private
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ */
+
+
+ function baseRest(func, start) {
+ return setToString(overRest(func, start, identity), func + '');
+ }
+ /**
+ * The base implementation of `_.sample`.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to sample.
+ * @returns {*} Returns the random element.
+ */
+
+
+ function baseSample(collection) {
+ return arraySample(values(collection));
+ }
+ /**
+ * The base implementation of `_.sampleSize` without param guards.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to sample.
+ * @param {number} n The number of elements to sample.
+ * @returns {Array} Returns the random elements.
+ */
+
+
+ function baseSampleSize(collection, n) {
+ var array = values(collection);
+ return shuffleSelf(array, baseClamp(n, 0, array.length));
+ }
+ /**
+ * The base implementation of `_.set`.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {*} value The value to set.
+ * @param {Function} [customizer] The function to customize path creation.
+ * @returns {Object} Returns `object`.
+ */
+
+
+ function baseSet(object, path, value, customizer) {
+ if (!isObject(object)) {
+ return object;
+ }
+
+ path = castPath(path, object);
+ var index = -1,
+ length = path.length,
+ lastIndex = length - 1,
+ nested = object;
+
+ while (nested != null && ++index < length) {
+ var key = toKey(path[index]),
+ newValue = value;
+
+ if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
+ return object;
+ }
+
+ if (index != lastIndex) {
+ var objValue = nested[key];
+ newValue = customizer ? customizer(objValue, key, nested) : undefined$1;
+
+ if (newValue === undefined$1) {
+ newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {};
+ }
+ }
+
+ assignValue(nested, key, newValue);
+ nested = nested[key];
+ }
+
+ return object;
+ }
+ /**
+ * The base implementation of `setData` without support for hot loop shorting.
+ *
+ * @private
+ * @param {Function} func The function to associate metadata with.
+ * @param {*} data The metadata.
+ * @returns {Function} Returns `func`.
+ */
+
+
+ var baseSetData = !metaMap ? identity : function (func, data) {
+ metaMap.set(func, data);
+ return func;
+ };
+ /**
+ * The base implementation of `setToString` without support for hot loop shorting.
+ *
+ * @private
+ * @param {Function} func The function to modify.
+ * @param {Function} string The `toString` result.
+ * @returns {Function} Returns `func`.
+ */
+
+ var baseSetToString = !defineProperty ? identity : function (func, string) {
+ return defineProperty(func, 'toString', {
+ 'configurable': true,
+ 'enumerable': false,
+ 'value': constant(string),
+ 'writable': true
+ });
+ };
+ /**
+ * The base implementation of `_.shuffle`.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to shuffle.
+ * @returns {Array} Returns the new shuffled array.
+ */
+
+ function baseShuffle(collection) {
+ return shuffleSelf(values(collection));
+ }
+ /**
+ * The base implementation of `_.slice` without an iteratee call guard.
+ *
+ * @private
+ * @param {Array} array The array to slice.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the slice of `array`.
+ */
+
+
+ function baseSlice(array, start, end) {
+ var index = -1,
+ length = array.length;
+
+ if (start < 0) {
+ start = -start > length ? 0 : length + start;
+ }
+
+ end = end > length ? length : end;
+
+ if (end < 0) {
+ end += length;
+ }
+
+ length = start > end ? 0 : end - start >>> 0;
+ start >>>= 0;
+ var result = Array(length);
+
+ while (++index < length) {
+ result[index] = array[index + start];
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.some` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ */
+
+
+ function baseSome(collection, predicate) {
+ var result;
+ baseEach(collection, function (value, index, collection) {
+ result = predicate(value, index, collection);
+ return !result;
+ });
+ return !!result;
+ }
+ /**
+ * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
+ * performs a binary search of `array` to determine the index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @private
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ */
+
+
+ function baseSortedIndex(array, value, retHighest) {
+ var low = 0,
+ high = array == null ? low : array.length;
+
+ if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
+ while (low < high) {
+ var mid = low + high >>> 1,
+ computed = array[mid];
+
+ if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value : computed < value)) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+
+ return high;
+ }
+
+ return baseSortedIndexBy(array, value, identity, retHighest);
+ }
+ /**
+ * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
+ * which invokes `iteratee` for `value` and each element of `array` to compute
+ * their sort ranking. The iteratee is invoked with one argument; (value).
+ *
+ * @private
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function} iteratee The iteratee invoked per element.
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ */
+
+
+ function baseSortedIndexBy(array, value, iteratee, retHighest) {
+ var low = 0,
+ high = array == null ? 0 : array.length;
+
+ if (high === 0) {
+ return 0;
+ }
+
+ value = iteratee(value);
+ var valIsNaN = value !== value,
+ valIsNull = value === null,
+ valIsSymbol = isSymbol(value),
+ valIsUndefined = value === undefined$1;
+
+ while (low < high) {
+ var mid = nativeFloor((low + high) / 2),
+ computed = iteratee(array[mid]),
+ othIsDefined = computed !== undefined$1,
+ othIsNull = computed === null,
+ othIsReflexive = computed === computed,
+ othIsSymbol = isSymbol(computed);
+
+ if (valIsNaN) {
+ var setLow = retHighest || othIsReflexive;
+ } else if (valIsUndefined) {
+ setLow = othIsReflexive && (retHighest || othIsDefined);
+ } else if (valIsNull) {
+ setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
+ } else if (valIsSymbol) {
+ setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
+ } else if (othIsNull || othIsSymbol) {
+ setLow = false;
+ } else {
+ setLow = retHighest ? computed <= value : computed < value;
+ }
+
+ if (setLow) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+
+ return nativeMin(high, MAX_ARRAY_INDEX);
+ }
+ /**
+ * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
+ * support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ */
+
+
+ function baseSortedUniq(array, iteratee) {
+ var index = -1,
+ length = array.length,
+ resIndex = 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index],
+ computed = iteratee ? iteratee(value) : value;
+
+ if (!index || !eq(computed, seen)) {
+ var seen = computed;
+ result[resIndex++] = value === 0 ? 0 : value;
+ }
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.toNumber` which doesn't ensure correct
+ * conversions of binary, hexadecimal, or octal string values.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {number} Returns the number.
+ */
+
+
+ function baseToNumber(value) {
+ if (typeof value == 'number') {
+ return value;
+ }
+
+ if (isSymbol(value)) {
+ return NAN;
+ }
+
+ return +value;
+ }
+ /**
+ * The base implementation of `_.toString` which doesn't convert nullish
+ * values to empty strings.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+
+
+ function baseToString(value) {
+ // Exit early for strings to avoid a performance hit in some environments.
+ if (typeof value == 'string') {
+ return value;
+ }
+
+ if (isArray(value)) {
+ // Recursively convert values (susceptible to call stack limits).
+ return arrayMap(value, baseToString) + '';
+ }
+
+ if (isSymbol(value)) {
+ return symbolToString ? symbolToString.call(value) : '';
+ }
+
+ var result = value + '';
+ return result == '0' && 1 / value == -INFINITY ? '-0' : result;
+ }
+ /**
+ * The base implementation of `_.uniqBy` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ */
+
+
+ function baseUniq(array, iteratee, comparator) {
+ var index = -1,
+ includes = arrayIncludes,
+ length = array.length,
+ isCommon = true,
+ result = [],
+ seen = result;
+
+ if (comparator) {
+ isCommon = false;
+ includes = arrayIncludesWith;
+ } else if (length >= LARGE_ARRAY_SIZE) {
+ var set = iteratee ? null : createSet(array);
+
+ if (set) {
+ return setToArray(set);
+ }
+
+ isCommon = false;
+ includes = cacheHas;
+ seen = new SetCache();
+ } else {
+ seen = iteratee ? [] : result;
+ }
+
+ outer: while (++index < length) {
+ var value = array[index],
+ computed = iteratee ? iteratee(value) : value;
+ value = comparator || value !== 0 ? value : 0;
+
+ if (isCommon && computed === computed) {
+ var seenIndex = seen.length;
+
+ while (seenIndex--) {
+ if (seen[seenIndex] === computed) {
+ continue outer;
+ }
+ }
+
+ if (iteratee) {
+ seen.push(computed);
+ }
+
+ result.push(value);
+ } else if (!includes(seen, computed, comparator)) {
+ if (seen !== result) {
+ seen.push(computed);
+ }
+
+ result.push(value);
+ }
+ }
+
+ return result;
+ }
+ /**
+ * The base implementation of `_.unset`.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The property path to unset.
+ * @returns {boolean} Returns `true` if the property is deleted, else `false`.
+ */
+
+
+ function baseUnset(object, path) {
+ path = castPath(path, object);
+ object = parent(object, path);
+ return object == null || delete object[toKey(last(path))];
+ }
+ /**
+ * The base implementation of `_.update`.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to update.
+ * @param {Function} updater The function to produce the updated value.
+ * @param {Function} [customizer] The function to customize path creation.
+ * @returns {Object} Returns `object`.
+ */
+
+
+ function baseUpdate(object, path, updater, customizer) {
+ return baseSet(object, path, updater(baseGet(object, path)), customizer);
+ }
+ /**
+ * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
+ * without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Array} Returns the slice of `array`.
+ */
+
+
+ function baseWhile(array, predicate, isDrop, fromRight) {
+ var length = array.length,
+ index = fromRight ? length : -1;
+
+ while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}
+
+ return isDrop ? baseSlice(array, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array, fromRight ? index + 1 : 0, fromRight ? length : index);
+ }
+ /**
+ * The base implementation of `wrapperValue` which returns the result of
+ * performing a sequence of actions on the unwrapped `value`, where each
+ * successive action is supplied the return value of the previous.
+ *
+ * @private
+ * @param {*} value The unwrapped value.
+ * @param {Array} actions Actions to perform to resolve the unwrapped value.
+ * @returns {*} Returns the resolved value.
+ */
+
+
+ function baseWrapperValue(value, actions) {
+ var result = value;
+
+ if (result instanceof LazyWrapper) {
+ result = result.value();
+ }
+
+ return arrayReduce(actions, function (result, action) {
+ return action.func.apply(action.thisArg, arrayPush([result], action.args));
+ }, result);
+ }
+ /**
+ * The base implementation of methods like `_.xor`, without support for
+ * iteratee shorthands, that accepts an array of arrays to inspect.
+ *
+ * @private
+ * @param {Array} arrays The arrays to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of values.
+ */
+
+
+ function baseXor(arrays, iteratee, comparator) {
+ var length = arrays.length;
+
+ if (length < 2) {
+ return length ? baseUniq(arrays[0]) : [];
+ }
+
+ var index = -1,
+ result = Array(length);
+
+ while (++index < length) {
+ var array = arrays[index],
+ othIndex = -1;
+
+ while (++othIndex < length) {
+ if (othIndex != index) {
+ result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
+ }
+ }
+ }
+
+ return baseUniq(baseFlatten(result, 1), iteratee, comparator);
+ }
+ /**
+ * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
+ *
+ * @private
+ * @param {Array} props The property identifiers.
+ * @param {Array} values The property values.
+ * @param {Function} assignFunc The function to assign values.
+ * @returns {Object} Returns the new object.
+ */
+
+
+ function baseZipObject(props, values, assignFunc) {
+ var index = -1,
+ length = props.length,
+ valsLength = values.length,
+ result = {};
+
+ while (++index < length) {
+ var value = index < valsLength ? values[index] : undefined$1;
+ assignFunc(result, props[index], value);
+ }
+
+ return result;
+ }
+ /**
+ * Casts `value` to an empty array if it's not an array like object.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {Array|Object} Returns the cast array-like object.
+ */
+
+
+ function castArrayLikeObject(value) {
+ return isArrayLikeObject(value) ? value : [];
+ }
+ /**
+ * Casts `value` to `identity` if it's not a function.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {Function} Returns cast function.
+ */
+
+
+ function castFunction(value) {
+ return typeof value == 'function' ? value : identity;
+ }
+ /**
+ * Casts `value` to a path array if it's not one.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {Array} Returns the cast property path array.
+ */
+
+
+ function castPath(value, object) {
+ if (isArray(value)) {
+ return value;
+ }
+
+ return isKey(value, object) ? [value] : stringToPath(toString(value));
+ }
+ /**
+ * A `baseRest` alias which can be replaced with `identity` by module
+ * replacement plugins.
+ *
+ * @private
+ * @type {Function}
+ * @param {Function} func The function to apply a rest parameter to.
+ * @returns {Function} Returns the new function.
+ */
+
+
+ var castRest = baseRest;
+ /**
+ * Casts `array` to a slice if it's needed.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {number} start The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the cast slice.
+ */
+
+ function castSlice(array, start, end) {
+ var length = array.length;
+ end = end === undefined$1 ? length : end;
+ return !start && end >= length ? array : baseSlice(array, start, end);
+ }
+ /**
+ * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
+ *
+ * @private
+ * @param {number|Object} id The timer id or timeout object of the timer to clear.
+ */
+
+
+ var clearTimeout = ctxClearTimeout || function (id) {
+ return root.clearTimeout(id);
+ };
+ /**
+ * Creates a clone of `buffer`.
+ *
+ * @private
+ * @param {Buffer} buffer The buffer to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Buffer} Returns the cloned buffer.
+ */
+
+
+ function cloneBuffer(buffer, isDeep) {
+ if (isDeep) {
+ return buffer.slice();
+ }
+
+ var length = buffer.length,
+ result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
+ buffer.copy(result);
+ return result;
+ }
+ /**
+ * Creates a clone of `arrayBuffer`.
+ *
+ * @private
+ * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
+ * @returns {ArrayBuffer} Returns the cloned array buffer.
+ */
+
+
+ function cloneArrayBuffer(arrayBuffer) {
+ var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
+ new Uint8Array(result).set(new Uint8Array(arrayBuffer));
+ return result;
+ }
+ /**
+ * Creates a clone of `dataView`.
+ *
+ * @private
+ * @param {Object} dataView The data view to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned data view.
+ */
+
+
+ function cloneDataView(dataView, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
+ return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
+ }
+ /**
+ * Creates a clone of `regexp`.
+ *
+ * @private
+ * @param {Object} regexp The regexp to clone.
+ * @returns {Object} Returns the cloned regexp.
+ */
+
+
+ function cloneRegExp(regexp) {
+ var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
+ result.lastIndex = regexp.lastIndex;
+ return result;
+ }
+ /**
+ * Creates a clone of the `symbol` object.
+ *
+ * @private
+ * @param {Object} symbol The symbol object to clone.
+ * @returns {Object} Returns the cloned symbol object.
+ */
+
+
+ function cloneSymbol(symbol) {
+ return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
+ }
+ /**
+ * Creates a clone of `typedArray`.
+ *
+ * @private
+ * @param {Object} typedArray The typed array to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned typed array.
+ */
+
+
+ function cloneTypedArray(typedArray, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
+ return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
+ }
+ /**
+ * Compares values to sort them in ascending order.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {number} Returns the sort order indicator for `value`.
+ */
+
+
+ function compareAscending(value, other) {
+ if (value !== other) {
+ var valIsDefined = value !== undefined$1,
+ valIsNull = value === null,
+ valIsReflexive = value === value,
+ valIsSymbol = isSymbol(value);
+ var othIsDefined = other !== undefined$1,
+ othIsNull = other === null,
+ othIsReflexive = other === other,
+ othIsSymbol = isSymbol(other);
+
+ if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) {
+ return 1;
+ }
+
+ if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) {
+ return -1;
+ }
+ }
+
+ return 0;
+ }
+ /**
+ * Used by `_.orderBy` to compare multiple properties of a value to another
+ * and stable sort them.
+ *
+ * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
+ * specify an order of "desc" for descending or "asc" for ascending sort order
+ * of corresponding values.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {boolean[]|string[]} orders The order to sort by for each property.
+ * @returns {number} Returns the sort order indicator for `object`.
+ */
+
+
+ function compareMultiple(object, other, orders) {
+ var index = -1,
+ objCriteria = object.criteria,
+ othCriteria = other.criteria,
+ length = objCriteria.length,
+ ordersLength = orders.length;
+
+ while (++index < length) {
+ var result = compareAscending(objCriteria[index], othCriteria[index]);
+
+ if (result) {
+ if (index >= ordersLength) {
+ return result;
+ }
+
+ var order = orders[index];
+ return result * (order == 'desc' ? -1 : 1);
+ }
+ } // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
+ // that causes it, under certain circumstances, to provide the same value for
+ // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
+ // for more details.
+ //
+ // This also ensures a stable sort in V8 and other engines.
+ // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
+
+
+ return object.index - other.index;
+ }
+ /**
+ * Creates an array that is the composition of partially applied arguments,
+ * placeholders, and provided arguments into a single array of arguments.
+ *
+ * @private
+ * @param {Array} args The provided arguments.
+ * @param {Array} partials The arguments to prepend to those provided.
+ * @param {Array} holders The `partials` placeholder indexes.
+ * @params {boolean} [isCurried] Specify composing for a curried function.
+ * @returns {Array} Returns the new array of composed arguments.
+ */
+
+
+ function composeArgs(args, partials, holders, isCurried) {
+ var argsIndex = -1,
+ argsLength = args.length,
+ holdersLength = holders.length,
+ leftIndex = -1,
+ leftLength = partials.length,
+ rangeLength = nativeMax(argsLength - holdersLength, 0),
+ result = Array(leftLength + rangeLength),
+ isUncurried = !isCurried;
+
+ while (++leftIndex < leftLength) {
+ result[leftIndex] = partials[leftIndex];
+ }
+
+ while (++argsIndex < holdersLength) {
+ if (isUncurried || argsIndex < argsLength) {
+ result[holders[argsIndex]] = args[argsIndex];
+ }
+ }
+
+ while (rangeLength--) {
+ result[leftIndex++] = args[argsIndex++];
+ }
+
+ return result;
+ }
+ /**
+ * This function is like `composeArgs` except that the arguments composition
+ * is tailored for `_.partialRight`.
+ *
+ * @private
+ * @param {Array} args The provided arguments.
+ * @param {Array} partials The arguments to append to those provided.
+ * @param {Array} holders The `partials` placeholder indexes.
+ * @params {boolean} [isCurried] Specify composing for a curried function.
+ * @returns {Array} Returns the new array of composed arguments.
+ */
+
+
+ function composeArgsRight(args, partials, holders, isCurried) {
+ var argsIndex = -1,
+ argsLength = args.length,
+ holdersIndex = -1,
+ holdersLength = holders.length,
+ rightIndex = -1,
+ rightLength = partials.length,
+ rangeLength = nativeMax(argsLength - holdersLength, 0),
+ result = Array(rangeLength + rightLength),
+ isUncurried = !isCurried;
+
+ while (++argsIndex < rangeLength) {
+ result[argsIndex] = args[argsIndex];
+ }
+
+ var offset = argsIndex;
+
+ while (++rightIndex < rightLength) {
+ result[offset + rightIndex] = partials[rightIndex];
+ }
+
+ while (++holdersIndex < holdersLength) {
+ if (isUncurried || argsIndex < argsLength) {
+ result[offset + holders[holdersIndex]] = args[argsIndex++];
+ }
+ }
+
+ return result;
+ }
+ /**
+ * Copies the values of `source` to `array`.
+ *
+ * @private
+ * @param {Array} source The array to copy values from.
+ * @param {Array} [array=[]] The array to copy values to.
+ * @returns {Array} Returns `array`.
+ */
+
+
+ function copyArray(source, array) {
+ var index = -1,
+ length = source.length;
+ array || (array = Array(length));
+
+ while (++index < length) {
+ array[index] = source[index];
+ }
+
+ return array;
+ }
+ /**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property identifiers to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @param {Function} [customizer] The function to customize copied values.
+ * @returns {Object} Returns `object`.
+ */
+
+
+ function copyObject(source, props, object, customizer) {
+ var isNew = !object;
+ object || (object = {});
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index];
+ var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined$1;
+
+ if (newValue === undefined$1) {
+ newValue = source[key];
+ }
+
+ if (isNew) {
+ baseAssignValue(object, key, newValue);
+ } else {
+ assignValue(object, key, newValue);
+ }
+ }
+
+ return object;
+ }
+ /**
+ * Copies own symbols of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy symbols from.
+ * @param {Object} [object={}] The object to copy symbols to.
+ * @returns {Object} Returns `object`.
+ */
+
+
+ function copySymbols(source, object) {
+ return copyObject(source, getSymbols(source), object);
+ }
+ /**
+ * Copies own and inherited symbols of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy symbols from.
+ * @param {Object} [object={}] The object to copy symbols to.
+ * @returns {Object} Returns `object`.
+ */
+
+
+ function copySymbolsIn(source, object) {
+ return copyObject(source, getSymbolsIn(source), object);
+ }
+ /**
+ * Creates a function like `_.groupBy`.
+ *
+ * @private
+ * @param {Function} setter The function to set accumulator values.
+ * @param {Function} [initializer] The accumulator object initializer.
+ * @returns {Function} Returns the new aggregator function.
+ */
+
+
+ function createAggregator(setter, initializer) {
+ return function (collection, iteratee) {
+ var func = isArray(collection) ? arrayAggregator : baseAggregator,
+ accumulator = initializer ? initializer() : {};
+ return func(collection, setter, getIteratee(iteratee, 2), accumulator);
+ };
+ }
+ /**
+ * Creates a function like `_.assign`.
+ *
+ * @private
+ * @param {Function} assigner The function to assign values.
+ * @returns {Function} Returns the new assigner function.
+ */
+
+
+ function createAssigner(assigner) {
+ return baseRest(function (object, sources) {
+ var index = -1,
+ length = sources.length,
+ customizer = length > 1 ? sources[length - 1] : undefined$1,
+ guard = length > 2 ? sources[2] : undefined$1;
+ customizer = assigner.length > 3 && typeof customizer == 'function' ? (length--, customizer) : undefined$1;
+
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+ customizer = length < 3 ? undefined$1 : customizer;
+ length = 1;
+ }
+
+ object = Object(object);
+
+ while (++index < length) {
+ var source = sources[index];
+
+ if (source) {
+ assigner(object, source, index, customizer);
+ }
+ }
+
+ return object;
+ });
+ }
+ /**
+ * Creates a `baseEach` or `baseEachRight` function.
+ *
+ * @private
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+
+
+ function createBaseEach(eachFunc, fromRight) {
+ return function (collection, iteratee) {
+ if (collection == null) {
+ return collection;
+ }
+
+ if (!isArrayLike(collection)) {
+ return eachFunc(collection, iteratee);
+ }
+
+ var length = collection.length,
+ index = fromRight ? length : -1,
+ iterable = Object(collection);
+
+ while (fromRight ? index-- : ++index < length) {
+ if (iteratee(iterable[index], index, iterable) === false) {
+ break;
+ }
+ }
+
+ return collection;
+ };
+ }
+ /**
+ * Creates a base function for methods like `_.forIn` and `_.forOwn`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+
+
+ function createBaseFor(fromRight) {
+ return function (object, iteratee, keysFunc) {
+ var index = -1,
+ iterable = Object(object),
+ props = keysFunc(object),
+ length = props.length;
+
+ while (length--) {
+ var key = props[fromRight ? length : ++index];
+
+ if (iteratee(iterable[key], key, iterable) === false) {
+ break;
+ }
+ }
+
+ return object;
+ };
+ }
+ /**
+ * Creates a function that wraps `func` to invoke it with the optional `this`
+ * binding of `thisArg`.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+
+
+ function createBind(func, bitmask, thisArg) {
+ var isBind = bitmask & WRAP_BIND_FLAG,
+ Ctor = createCtor(func);
+
+ function wrapper() {
+ var fn = this && this !== root && this instanceof wrapper ? Ctor : func;
+ return fn.apply(isBind ? thisArg : this, arguments);
+ }
+
+ return wrapper;
+ }
+ /**
+ * Creates a function like `_.lowerFirst`.
+ *
+ * @private
+ * @param {string} methodName The name of the `String` case method to use.
+ * @returns {Function} Returns the new case function.
+ */
+
+
+ function createCaseFirst(methodName) {
+ return function (string) {
+ string = toString(string);
+ var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined$1;
+ var chr = strSymbols ? strSymbols[0] : string.charAt(0);
+ var trailing = strSymbols ? castSlice(strSymbols, 1).join('') : string.slice(1);
+ return chr[methodName]() + trailing;
+ };
+ }
+ /**
+ * Creates a function like `_.camelCase`.
+ *
+ * @private
+ * @param {Function} callback The function to combine each word.
+ * @returns {Function} Returns the new compounder function.
+ */
+
+
+ function createCompounder(callback) {
+ return function (string) {
+ return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
+ };
+ }
+ /**
+ * Creates a function that produces an instance of `Ctor` regardless of
+ * whether it was invoked as part of a `new` expression or by `call` or `apply`.
+ *
+ * @private
+ * @param {Function} Ctor The constructor to wrap.
+ * @returns {Function} Returns the new wrapped function.
+ */
+
+
+ function createCtor(Ctor) {
+ return function () {
+ // Use a `switch` statement to work with class constructors. See
+ // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
+ // for more details.
+ var args = arguments;
+
+ switch (args.length) {
+ case 0:
+ return new Ctor();
+
+ case 1:
+ return new Ctor(args[0]);
+
+ case 2:
+ return new Ctor(args[0], args[1]);
+
+ case 3:
+ return new Ctor(args[0], args[1], args[2]);
+
+ case 4:
+ return new Ctor(args[0], args[1], args[2], args[3]);
+
+ case 5:
+ return new Ctor(args[0], args[1], args[2], args[3], args[4]);
+
+ case 6:
+ return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
+
+ case 7:
+ return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
+ }
+
+ var thisBinding = baseCreate(Ctor.prototype),
+ result = Ctor.apply(thisBinding, args); // Mimic the constructor's `return` behavior.
+ // See https://es5.github.io/#x13.2.2 for more details.
+
+ return isObject(result) ? result : thisBinding;
+ };
+ }
+ /**
+ * Creates a function that wraps `func` to enable currying.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @param {number} arity The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+
+
+ function createCurry(func, bitmask, arity) {
+ var Ctor = createCtor(func);
+
+ function wrapper() {
+ var length = arguments.length,
+ args = Array(length),
+ index = length,
+ placeholder = getHolder(wrapper);
+
+ while (index--) {
+ args[index] = arguments[index];
+ }
+
+ var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder);
+ length -= holders.length;
+
+ if (length < arity) {
+ return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, undefined$1, args, holders, undefined$1, undefined$1, arity - length);
+ }
+
+ var fn = this && this !== root && this instanceof wrapper ? Ctor : func;
+ return apply(fn, this, args);
+ }
+
+ return wrapper;
+ }
+ /**
+ * Creates a `_.find` or `_.findLast` function.
+ *
+ * @private
+ * @param {Function} findIndexFunc The function to find the collection index.
+ * @returns {Function} Returns the new find function.
+ */
+
+
+ function createFind(findIndexFunc) {
+ return function (collection, predicate, fromIndex) {
+ var iterable = Object(collection);
+
+ if (!isArrayLike(collection)) {
+ var iteratee = getIteratee(predicate, 3);
+ collection = keys(collection);
+
+ predicate = function predicate(key) {
+ return iteratee(iterable[key], key, iterable);
+ };
+ }
+
+ var index = findIndexFunc(collection, predicate, fromIndex);
+ return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined$1;
+ };
+ }
+ /**
+ * Creates a `_.flow` or `_.flowRight` function.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new flow function.
+ */
+
+
+ function createFlow(fromRight) {
+ return flatRest(function (funcs) {
+ var length = funcs.length,
+ index = length,
+ prereq = LodashWrapper.prototype.thru;
+
+ if (fromRight) {
+ funcs.reverse();
+ }
+
+ while (index--) {
+ var func = funcs[index];
+
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
+ var wrapper = new LodashWrapper([], true);
+ }
+ }
+
+ index = wrapper ? index : length;
+
+ while (++index < length) {
+ func = funcs[index];
+ var funcName = getFuncName(func),
+ data = funcName == 'wrapper' ? getData(func) : undefined$1;
+
+ if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data[4].length && data[9] == 1) {
+ wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
+ } else {
+ wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func);
+ }
+ }
+
+ return function () {
+ var args = arguments,
+ value = args[0];
+
+ if (wrapper && args.length == 1 && isArray(value)) {
+ return wrapper.plant(value).value();
+ }
+
+ var index = 0,
+ result = length ? funcs[index].apply(this, args) : value;
+
+ while (++index < length) {
+ result = funcs[index].call(this, result);
+ }
+
+ return result;
+ };
+ });
+ }
+ /**
+ * Creates a function that wraps `func` to invoke it with optional `this`
+ * binding of `thisArg`, partial application, and currying.
+ *
+ * @private
+ * @param {Function|string} func The function or method name to wrap.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {Array} [partials] The arguments to prepend to those provided to
+ * the new function.
+ * @param {Array} [holders] The `partials` placeholder indexes.
+ * @param {Array} [partialsRight] The arguments to append to those provided
+ * to the new function.
+ * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
+ * @param {Array} [argPos] The argument positions of the new function.
+ * @param {number} [ary] The arity cap of `func`.
+ * @param {number} [arity] The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+
+
+ function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
+ var isAry = bitmask & WRAP_ARY_FLAG,
+ isBind = bitmask & WRAP_BIND_FLAG,
+ isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
+ isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
+ isFlip = bitmask & WRAP_FLIP_FLAG,
+ Ctor = isBindKey ? undefined$1 : createCtor(func);
+
+ function wrapper() {
+ var length = arguments.length,
+ args = Array(length),
+ index = length;
+
+ while (index--) {
+ args[index] = arguments[index];
+ }
+
+ if (isCurried) {
+ var placeholder = getHolder(wrapper),
+ holdersCount = countHolders(args, placeholder);
+ }
+
+ if (partials) {
+ args = composeArgs(args, partials, holders, isCurried);
+ }
+
+ if (partialsRight) {
+ args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
+ }
+
+ length -= holdersCount;
+
+ if (isCurried && length < arity) {
+ var newHolders = replaceHolders(args, placeholder);
+ return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary, arity - length);
+ }
+
+ var thisBinding = isBind ? thisArg : this,
+ fn = isBindKey ? thisBinding[func] : func;
+ length = args.length;
+
+ if (argPos) {
+ args = reorder(args, argPos);
+ } else if (isFlip && length > 1) {
+ args.reverse();
+ }
+
+ if (isAry && ary < length) {
+ args.length = ary;
+ }
+
+ if (this && this !== root && this instanceof wrapper) {
+ fn = Ctor || createCtor(fn);
+ }
+
+ return fn.apply(thisBinding, args);
+ }
+
+ return wrapper;
+ }
+ /**
+ * Creates a function like `_.invertBy`.
+ *
+ * @private
+ * @param {Function} setter The function to set accumulator values.
+ * @param {Function} toIteratee The function to resolve iteratees.
+ * @returns {Function} Returns the new inverter function.
+ */
+
+
+ function createInverter(setter, toIteratee) {
+ return function (object, iteratee) {
+ return baseInverter(object, setter, toIteratee(iteratee), {});
+ };
+ }
+ /**
+ * Creates a function that performs a mathematical operation on two values.
+ *
+ * @private
+ * @param {Function} operator The function to perform the operation.
+ * @param {number} [defaultValue] The value used for `undefined` arguments.
+ * @returns {Function} Returns the new mathematical operation function.
+ */
+
+
+ function createMathOperation(operator, defaultValue) {
+ return function (value, other) {
+ var result;
+
+ if (value === undefined$1 && other === undefined$1) {
+ return defaultValue;
+ }
+
+ if (value !== undefined$1) {
+ result = value;
+ }
+
+ if (other !== undefined$1) {
+ if (result === undefined$1) {
+ return other;
+ }
+
+ if (typeof value == 'string' || typeof other == 'string') {
+ value = baseToString(value);
+ other = baseToString(other);
+ } else {
+ value = baseToNumber(value);
+ other = baseToNumber(other);
+ }
+
+ result = operator(value, other);
+ }
+
+ return result;
+ };
+ }
+ /**
+ * Creates a function like `_.over`.
+ *
+ * @private
+ * @param {Function} arrayFunc The function to iterate over iteratees.
+ * @returns {Function} Returns the new over function.
+ */
+
+
+ function createOver(arrayFunc) {
+ return flatRest(function (iteratees) {
+ iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
+ return baseRest(function (args) {
+ var thisArg = this;
+ return arrayFunc(iteratees, function (iteratee) {
+ return apply(iteratee, thisArg, args);
+ });
+ });
+ });
+ }
+ /**
+ * Creates the padding for `string` based on `length`. The `chars` string
+ * is truncated if the number of characters exceeds `length`.
+ *
+ * @private
+ * @param {number} length The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padding for `string`.
+ */
+
+
+ function createPadding(length, chars) {
+ chars = chars === undefined$1 ? ' ' : baseToString(chars);
+ var charsLength = chars.length;
+
+ if (charsLength < 2) {
+ return charsLength ? baseRepeat(chars, length) : chars;
+ }
+
+ var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
+ return hasUnicode(chars) ? castSlice(stringToArray(result), 0, length).join('') : result.slice(0, length);
+ }
+ /**
+ * Creates a function that wraps `func` to invoke it with the `this` binding
+ * of `thisArg` and `partials` prepended to the arguments it receives.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {Array} partials The arguments to prepend to those provided to
+ * the new function.
+ * @returns {Function} Returns the new wrapped function.
+ */
+
+
+ function createPartial(func, bitmask, thisArg, partials) {
+ var isBind = bitmask & WRAP_BIND_FLAG,
+ Ctor = createCtor(func);
+
+ function wrapper() {
+ var argsIndex = -1,
+ argsLength = arguments.length,
+ leftIndex = -1,
+ leftLength = partials.length,
+ args = Array(leftLength + argsLength),
+ fn = this && this !== root && this instanceof wrapper ? Ctor : func;
+
+ while (++leftIndex < leftLength) {
+ args[leftIndex] = partials[leftIndex];
+ }
+
+ while (argsLength--) {
+ args[leftIndex++] = arguments[++argsIndex];
+ }
+
+ return apply(fn, isBind ? thisArg : this, args);
+ }
+
+ return wrapper;
+ }
+ /**
+ * Creates a `_.range` or `_.rangeRight` function.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new range function.
+ */
+
+
+ function createRange(fromRight) {
+ return function (start, end, step) {
+ if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
+ end = step = undefined$1;
+ } // Ensure the sign of `-0` is preserved.
+
+
+ start = toFinite(start);
+
+ if (end === undefined$1) {
+ end = start;
+ start = 0;
+ } else {
+ end = toFinite(end);
+ }
+
+ step = step === undefined$1 ? start < end ? 1 : -1 : toFinite(step);
+ return baseRange(start, end, step, fromRight);
+ };
+ }
+ /**
+ * Creates a function that performs a relational operation on two values.
+ *
+ * @private
+ * @param {Function} operator The function to perform the operation.
+ * @returns {Function} Returns the new relational operation function.
+ */
+
+
+ function createRelationalOperation(operator) {
+ return function (value, other) {
+ if (!(typeof value == 'string' && typeof other == 'string')) {
+ value = toNumber(value);
+ other = toNumber(other);
+ }
+
+ return operator(value, other);
+ };
+ }
+ /**
+ * Creates a function that wraps `func` to continue currying.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @param {Function} wrapFunc The function to create the `func` wrapper.
+ * @param {*} placeholder The placeholder value.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {Array} [partials] The arguments to prepend to those provided to
+ * the new function.
+ * @param {Array} [holders] The `partials` placeholder indexes.
+ * @param {Array} [argPos] The argument positions of the new function.
+ * @param {number} [ary] The arity cap of `func`.
+ * @param {number} [arity] The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+
+
+ function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
+ var isCurry = bitmask & WRAP_CURRY_FLAG,
+ newHolders = isCurry ? holders : undefined$1,
+ newHoldersRight = isCurry ? undefined$1 : holders,
+ newPartials = isCurry ? partials : undefined$1,
+ newPartialsRight = isCurry ? undefined$1 : partials;
+ bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG;
+ bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
+
+ if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
+ bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
+ }
+
+ var newData = [func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, newHoldersRight, argPos, ary, arity];
+ var result = wrapFunc.apply(undefined$1, newData);
+
+ if (isLaziable(func)) {
+ setData(result, newData);
+ }
+
+ result.placeholder = placeholder;
+ return setWrapToString(result, func, bitmask);
+ }
+ /**
+ * Creates a function like `_.round`.
+ *
+ * @private
+ * @param {string} methodName The name of the `Math` method to use when rounding.
+ * @returns {Function} Returns the new round function.
+ */
+
+
+ function createRound(methodName) {
+ var func = Math[methodName];
+ return function (number, precision) {
+ number = toNumber(number);
+ precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
+
+ if (precision && nativeIsFinite(number)) {
+ // Shift with exponential notation to avoid floating-point issues.
+ // See [MDN](https://mdn.io/round#Examples) for more details.
+ var pair = (toString(number) + 'e').split('e'),
+ value = func(pair[0] + 'e' + (+pair[1] + precision));
+ pair = (toString(value) + 'e').split('e');
+ return +(pair[0] + 'e' + (+pair[1] - precision));
+ }
+
+ return func(number);
+ };
+ }
+ /**
+ * Creates a set object of `values`.
+ *
+ * @private
+ * @param {Array} values The values to add to the set.
+ * @returns {Object} Returns the new set.
+ */
+
+
+ var createSet = !(Set && 1 / setToArray(new Set([, -0]))[1] == INFINITY) ? noop : function (values) {
+ return new Set(values);
+ };
+ /**
+ * Creates a `_.toPairs` or `_.toPairsIn` function.
+ *
+ * @private
+ * @param {Function} keysFunc The function to get the keys of a given object.
+ * @returns {Function} Returns the new pairs function.
+ */
+
+ function createToPairs(keysFunc) {
+ return function (object) {
+ var tag = getTag(object);
+
+ if (tag == mapTag) {
+ return mapToArray(object);
+ }
+
+ if (tag == setTag) {
+ return setToPairs(object);
+ }
+
+ return baseToPairs(object, keysFunc(object));
+ };
+ }
+ /**
+ * Creates a function that either curries or invokes `func` with optional
+ * `this` binding and partially applied arguments.
+ *
+ * @private
+ * @param {Function|string} func The function or method name to wrap.
+ * @param {number} bitmask The bitmask flags.
+ * 1 - `_.bind`
+ * 2 - `_.bindKey`
+ * 4 - `_.curry` or `_.curryRight` of a bound function
+ * 8 - `_.curry`
+ * 16 - `_.curryRight`
+ * 32 - `_.partial`
+ * 64 - `_.partialRight`
+ * 128 - `_.rearg`
+ * 256 - `_.ary`
+ * 512 - `_.flip`
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {Array} [partials] The arguments to be partially applied.
+ * @param {Array} [holders] The `partials` placeholder indexes.
+ * @param {Array} [argPos] The argument positions of the new function.
+ * @param {number} [ary] The arity cap of `func`.
+ * @param {number} [arity] The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+
+
+ function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
+ var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
+
+ if (!isBindKey && typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ var length = partials ? partials.length : 0;
+
+ if (!length) {
+ bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
+ partials = holders = undefined$1;
+ }
+
+ ary = ary === undefined$1 ? ary : nativeMax(toInteger(ary), 0);
+ arity = arity === undefined$1 ? arity : toInteger(arity);
+ length -= holders ? holders.length : 0;
+
+ if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
+ var partialsRight = partials,
+ holdersRight = holders;
+ partials = holders = undefined$1;
+ }
+
+ var data = isBindKey ? undefined$1 : getData(func);
+ var newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];
+
+ if (data) {
+ mergeData(newData, data);
+ }
+
+ func = newData[0];
+ bitmask = newData[1];
+ thisArg = newData[2];
+ partials = newData[3];
+ holders = newData[4];
+ arity = newData[9] = newData[9] === undefined$1 ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length, 0);
+
+ if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
+ bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
+ }
+
+ if (!bitmask || bitmask == WRAP_BIND_FLAG) {
+ var result = createBind(func, bitmask, thisArg);
+ } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
+ result = createCurry(func, bitmask, arity);
+ } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
+ result = createPartial(func, bitmask, thisArg, partials);
+ } else {
+ result = createHybrid.apply(undefined$1, newData);
+ }
+
+ var setter = data ? baseSetData : setData;
+ return setWrapToString(setter(result, newData), func, bitmask);
+ }
+ /**
+ * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
+ * of source objects to the destination object for all destination properties
+ * that resolve to `undefined`.
+ *
+ * @private
+ * @param {*} objValue The destination value.
+ * @param {*} srcValue The source value.
+ * @param {string} key The key of the property to assign.
+ * @param {Object} object The parent object of `objValue`.
+ * @returns {*} Returns the value to assign.
+ */
+
+
+ function customDefaultsAssignIn(objValue, srcValue, key, object) {
+ if (objValue === undefined$1 || eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key)) {
+ return srcValue;
+ }
+
+ return objValue;
+ }
+ /**
+ * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
+ * objects into destination objects that are passed thru.
+ *
+ * @private
+ * @param {*} objValue The destination value.
+ * @param {*} srcValue The source value.
+ * @param {string} key The key of the property to merge.
+ * @param {Object} object The parent object of `objValue`.
+ * @param {Object} source The parent object of `srcValue`.
+ * @param {Object} [stack] Tracks traversed source values and their merged
+ * counterparts.
+ * @returns {*} Returns the value to assign.
+ */
+
+
+ function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
+ if (isObject(objValue) && isObject(srcValue)) {
+ // Recursively merge objects and arrays (susceptible to call stack limits).
+ stack.set(srcValue, objValue);
+ baseMerge(objValue, srcValue, undefined$1, customDefaultsMerge, stack);
+ stack['delete'](srcValue);
+ }
+
+ return objValue;
+ }
+ /**
+ * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
+ * objects.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @param {string} key The key of the property to inspect.
+ * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
+ */
+
+
+ function customOmitClone(value) {
+ return isPlainObject(value) ? undefined$1 : value;
+ }
+ /**
+ * A specialized version of `baseIsEqualDeep` for arrays with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Array} array The array to compare.
+ * @param {Array} other The other array to compare.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Object} stack Tracks traversed `array` and `other` objects.
+ * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
+ */
+
+
+ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
+ arrLength = array.length,
+ othLength = other.length;
+
+ if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
+ return false;
+ } // Check that cyclic values are equal.
+
+
+ var arrStacked = stack.get(array);
+ var othStacked = stack.get(other);
+
+ if (arrStacked && othStacked) {
+ return arrStacked == other && othStacked == array;
+ }
+
+ var index = -1,
+ result = true,
+ seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined$1;
+ stack.set(array, other);
+ stack.set(other, array); // Ignore non-index properties.
+
+ while (++index < arrLength) {
+ var arrValue = array[index],
+ othValue = other[index];
+
+ if (customizer) {
+ var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
+ }
+
+ if (compared !== undefined$1) {
+ if (compared) {
+ continue;
+ }
+
+ result = false;
+ break;
+ } // Recursively compare arrays (susceptible to call stack limits).
+
+
+ if (seen) {
+ if (!arraySome(other, function (othValue, othIndex) {
+ if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
+ return seen.push(othIndex);
+ }
+ })) {
+ result = false;
+ break;
+ }
+ } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
+ result = false;
+ break;
+ }
+ }
+
+ stack['delete'](array);
+ stack['delete'](other);
+ return result;
+ }
+ /**
+ * A specialized version of `baseIsEqualDeep` for comparing objects of
+ * the same `toStringTag`.
+ *
+ * **Note:** This function only supports comparing values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {string} tag The `toStringTag` of the objects to compare.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+
+
+ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
+ switch (tag) {
+ case dataViewTag:
+ if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
+ return false;
+ }
+
+ object = object.buffer;
+ other = other.buffer;
+
+ case arrayBufferTag:
+ if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
+ return false;
+ }
+
+ return true;
+
+ case boolTag:
+ case dateTag:
+ case numberTag:
+ // Coerce booleans to `1` or `0` and dates to milliseconds.
+ // Invalid dates are coerced to `NaN`.
+ return eq(+object, +other);
+
+ case errorTag:
+ return object.name == other.name && object.message == other.message;
+
+ case regexpTag:
+ case stringTag:
+ // Coerce regexes to strings and treat strings, primitives and objects,
+ // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
+ // for more details.
+ return object == other + '';
+
+ case mapTag:
+ var convert = mapToArray;
+
+ case setTag:
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
+ convert || (convert = setToArray);
+
+ if (object.size != other.size && !isPartial) {
+ return false;
+ } // Assume cyclic values are equal.
+
+
+ var stacked = stack.get(object);
+
+ if (stacked) {
+ return stacked == other;
+ }
+
+ bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits).
+
+ stack.set(object, other);
+ var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
+ stack['delete'](object);
+ return result;
+
+ case symbolTag:
+ if (symbolValueOf) {
+ return symbolValueOf.call(object) == symbolValueOf.call(other);
+ }
+
+ }
+
+ return false;
+ }
+ /**
+ * A specialized version of `baseIsEqualDeep` for objects with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+
+
+ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
+ objProps = getAllKeys(object),
+ objLength = objProps.length,
+ othProps = getAllKeys(other),
+ othLength = othProps.length;
+
+ if (objLength != othLength && !isPartial) {
+ return false;
+ }
+
+ var index = objLength;
+
+ while (index--) {
+ var key = objProps[index];
+
+ if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
+ return false;
+ }
+ } // Check that cyclic values are equal.
+
+
+ var objStacked = stack.get(object);
+ var othStacked = stack.get(other);
+
+ if (objStacked && othStacked) {
+ return objStacked == other && othStacked == object;
+ }
+
+ var result = true;
+ stack.set(object, other);
+ stack.set(other, object);
+ var skipCtor = isPartial;
+
+ while (++index < objLength) {
+ key = objProps[index];
+ var objValue = object[key],
+ othValue = other[key];
+
+ if (customizer) {
+ var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
+ } // Recursively compare objects (susceptible to call stack limits).
+
+
+ if (!(compared === undefined$1 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
+ result = false;
+ break;
+ }
+
+ skipCtor || (skipCtor = key == 'constructor');
+ }
+
+ if (result && !skipCtor) {
+ var objCtor = object.constructor,
+ othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal.
+
+ if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {
+ result = false;
+ }
+ }
+
+ stack['delete'](object);
+ stack['delete'](other);
+ return result;
+ }
+ /**
+ * A specialized version of `baseRest` which flattens the rest array.
+ *
+ * @private
+ * @param {Function} func The function to apply a rest parameter to.
+ * @returns {Function} Returns the new function.
+ */
+
+
+ function flatRest(func) {
+ return setToString(overRest(func, undefined$1, flatten), func + '');
+ }
+ /**
+ * Creates an array of own enumerable property names and symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+
+
+ function getAllKeys(object) {
+ return baseGetAllKeys(object, keys, getSymbols);
+ }
+ /**
+ * Creates an array of own and inherited enumerable property names and
+ * symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+
+
+ function getAllKeysIn(object) {
+ return baseGetAllKeys(object, keysIn, getSymbolsIn);
+ }
+ /**
+ * Gets metadata for `func`.
+ *
+ * @private
+ * @param {Function} func The function to query.
+ * @returns {*} Returns the metadata for `func`.
+ */
+
+
+ var getData = !metaMap ? noop : function (func) {
+ return metaMap.get(func);
+ };
+ /**
+ * Gets the name of `func`.
+ *
+ * @private
+ * @param {Function} func The function to query.
+ * @returns {string} Returns the function name.
+ */
+
+ function getFuncName(func) {
+ var result = func.name + '',
+ array = realNames[result],
+ length = hasOwnProperty.call(realNames, result) ? array.length : 0;
+
+ while (length--) {
+ var data = array[length],
+ otherFunc = data.func;
+
+ if (otherFunc == null || otherFunc == func) {
+ return data.name;
+ }
+ }
+
+ return result;
+ }
+ /**
+ * Gets the argument placeholder value for `func`.
+ *
+ * @private
+ * @param {Function} func The function to inspect.
+ * @returns {*} Returns the placeholder value.
+ */
+
+
+ function getHolder(func) {
+ var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
+ return object.placeholder;
+ }
+ /**
+ * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
+ * this function returns the custom method, otherwise it returns `baseIteratee`.
+ * If arguments are provided, the chosen function is invoked with them and
+ * its result is returned.
+ *
+ * @private
+ * @param {*} [value] The value to convert to an iteratee.
+ * @param {number} [arity] The arity of the created iteratee.
+ * @returns {Function} Returns the chosen function or its result.
+ */
+
+
+ function getIteratee() {
+ var result = lodash.iteratee || iteratee;
+ result = result === iteratee ? baseIteratee : result;
+ return arguments.length ? result(arguments[0], arguments[1]) : result;
+ }
+ /**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+
+
+ function getMapData(map, key) {
+ var data = map.__data__;
+ return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;
+ }
+ /**
+ * Gets the property names, values, and compare flags of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the match data of `object`.
+ */
+
+
+ function getMatchData(object) {
+ var result = keys(object),
+ length = result.length;
+
+ while (length--) {
+ var key = result[length],
+ value = object[key];
+ result[length] = [key, value, isStrictComparable(value)];
+ }
+
+ return result;
+ }
+ /**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+
+
+ function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined$1;
+ }
+ /**
+ * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the raw `toStringTag`.
+ */
+
+
+ function getRawTag(value) {
+ var isOwn = hasOwnProperty.call(value, symToStringTag),
+ tag = value[symToStringTag];
+
+ try {
+ value[symToStringTag] = undefined$1;
+ var unmasked = true;
+ } catch (e) {}
+
+ var result = nativeObjectToString.call(value);
+
+ if (unmasked) {
+ if (isOwn) {
+ value[symToStringTag] = tag;
+ } else {
+ delete value[symToStringTag];
+ }
+ }
+
+ return result;
+ }
+ /**
+ * Creates an array of the own enumerable symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of symbols.
+ */
+
+
+ var getSymbols = !nativeGetSymbols ? stubArray : function (object) {
+ if (object == null) {
+ return [];
+ }
+
+ object = Object(object);
+ return arrayFilter(nativeGetSymbols(object), function (symbol) {
+ return propertyIsEnumerable.call(object, symbol);
+ });
+ };
+ /**
+ * Creates an array of the own and inherited enumerable symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of symbols.
+ */
+
+ var getSymbolsIn = !nativeGetSymbols ? stubArray : function (object) {
+ var result = [];
+
+ while (object) {
+ arrayPush(result, getSymbols(object));
+ object = getPrototype(object);
+ }
+
+ return result;
+ };
+ /**
+ * Gets the `toStringTag` of `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+
+ var getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
+
+ if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag || Map && getTag(new Map()) != mapTag || Promise && getTag(Promise.resolve()) != promiseTag || Set && getTag(new Set()) != setTag || WeakMap && getTag(new WeakMap()) != weakMapTag) {
+ getTag = function getTag(value) {
+ var result = baseGetTag(value),
+ Ctor = result == objectTag ? value.constructor : undefined$1,
+ ctorString = Ctor ? toSource(Ctor) : '';
+
+ if (ctorString) {
+ switch (ctorString) {
+ case dataViewCtorString:
+ return dataViewTag;
+
+ case mapCtorString:
+ return mapTag;
+
+ case promiseCtorString:
+ return promiseTag;
+
+ case setCtorString:
+ return setTag;
+
+ case weakMapCtorString:
+ return weakMapTag;
+ }
+ }
+
+ return result;
+ };
+ }
+ /**
+ * Gets the view, applying any `transforms` to the `start` and `end` positions.
+ *
+ * @private
+ * @param {number} start The start of the view.
+ * @param {number} end The end of the view.
+ * @param {Array} transforms The transformations to apply to the view.
+ * @returns {Object} Returns an object containing the `start` and `end`
+ * positions of the view.
+ */
+
+
+ function getView(start, end, transforms) {
+ var index = -1,
+ length = transforms.length;
+
+ while (++index < length) {
+ var data = transforms[index],
+ size = data.size;
+
+ switch (data.type) {
+ case 'drop':
+ start += size;
+ break;
+
+ case 'dropRight':
+ end -= size;
+ break;
+
+ case 'take':
+ end = nativeMin(end, start + size);
+ break;
+
+ case 'takeRight':
+ start = nativeMax(start, end - size);
+ break;
+ }
+ }
+
+ return {
+ 'start': start,
+ 'end': end
+ };
+ }
+ /**
+ * Extracts wrapper details from the `source` body comment.
+ *
+ * @private
+ * @param {string} source The source to inspect.
+ * @returns {Array} Returns the wrapper details.
+ */
+
+
+ function getWrapDetails(source) {
+ var match = source.match(reWrapDetails);
+ return match ? match[1].split(reSplitDetails) : [];
+ }
+ /**
+ * Checks if `path` exists on `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @param {Function} hasFunc The function to check properties.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ */
+
+
+ function hasPath(object, path, hasFunc) {
+ path = castPath(path, object);
+ var index = -1,
+ length = path.length,
+ result = false;
+
+ while (++index < length) {
+ var key = toKey(path[index]);
+
+ if (!(result = object != null && hasFunc(object, key))) {
+ break;
+ }
+
+ object = object[key];
+ }
+
+ if (result || ++index != length) {
+ return result;
+ }
+
+ length = object == null ? 0 : object.length;
+ return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));
+ }
+ /**
+ * Initializes an array clone.
+ *
+ * @private
+ * @param {Array} array The array to clone.
+ * @returns {Array} Returns the initialized clone.
+ */
+
+
+ function initCloneArray(array) {
+ var length = array.length,
+ result = new array.constructor(length); // Add properties assigned by `RegExp#exec`.
+
+ if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
+ result.index = array.index;
+ result.input = array.input;
+ }
+
+ return result;
+ }
+ /**
+ * Initializes an object clone.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+
+
+ function initCloneObject(object) {
+ return typeof object.constructor == 'function' && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};
+ }
+ /**
+ * Initializes an object clone based on its `toStringTag`.
+ *
+ * **Note:** This function only supports cloning values with tags of
+ * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @param {string} tag The `toStringTag` of the object to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+
+
+ function initCloneByTag(object, tag, isDeep) {
+ var Ctor = object.constructor;
+
+ switch (tag) {
+ case arrayBufferTag:
+ return cloneArrayBuffer(object);
+
+ case boolTag:
+ case dateTag:
+ return new Ctor(+object);
+
+ case dataViewTag:
+ return cloneDataView(object, isDeep);
+
+ case float32Tag:
+ case float64Tag:
+ case int8Tag:
+ case int16Tag:
+ case int32Tag:
+ case uint8Tag:
+ case uint8ClampedTag:
+ case uint16Tag:
+ case uint32Tag:
+ return cloneTypedArray(object, isDeep);
+
+ case mapTag:
+ return new Ctor();
+
+ case numberTag:
+ case stringTag:
+ return new Ctor(object);
+
+ case regexpTag:
+ return cloneRegExp(object);
+
+ case setTag:
+ return new Ctor();
+
+ case symbolTag:
+ return cloneSymbol(object);
+ }
+ }
+ /**
+ * Inserts wrapper `details` in a comment at the top of the `source` body.
+ *
+ * @private
+ * @param {string} source The source to modify.
+ * @returns {Array} details The details to insert.
+ * @returns {string} Returns the modified source.
+ */
+
+
+ function insertWrapDetails(source, details) {
+ var length = details.length;
+
+ if (!length) {
+ return source;
+ }
+
+ var lastIndex = length - 1;
+ details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
+ details = details.join(length > 2 ? ', ' : ' ');
+ return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
+ }
+ /**
+ * Checks if `value` is a flattenable `arguments` object or array.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
+ */
+
+
+ function isFlattenable(value) {
+ return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);
+ }
+ /**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+
+
+ function isIndex(value, length) {
+ var type = _typeof(value);
+
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;
+ }
+ /**
+ * Checks if the given arguments are from an iteratee call.
+ *
+ * @private
+ * @param {*} value The potential iteratee value argument.
+ * @param {*} index The potential iteratee index or key argument.
+ * @param {*} object The potential iteratee object argument.
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
+ * else `false`.
+ */
+
+
+ function isIterateeCall(value, index, object) {
+ if (!isObject(object)) {
+ return false;
+ }
+
+ var type = _typeof(index);
+
+ if (type == 'number' ? isArrayLike(object) && isIndex(index, object.length) : type == 'string' && index in object) {
+ return eq(object[index], value);
+ }
+
+ return false;
+ }
+ /**
+ * Checks if `value` is a property name and not a property path.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+ */
+
+
+ function isKey(value, object) {
+ if (isArray(value)) {
+ return false;
+ }
+
+ var type = _typeof(value);
+
+ if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) {
+ return true;
+ }
+
+ return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
+ }
+ /**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+
+
+ function isKeyable(value) {
+ var type = _typeof(value);
+
+ return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;
+ }
+ /**
+ * Checks if `func` has a lazy counterpart.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
+ * else `false`.
+ */
+
+
+ function isLaziable(func) {
+ var funcName = getFuncName(func),
+ other = lodash[funcName];
+
+ if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
+ return false;
+ }
+
+ if (func === other) {
+ return true;
+ }
+
+ var data = getData(other);
+ return !!data && func === data[0];
+ }
+ /**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+
+
+ function isMasked(func) {
+ return !!maskSrcKey && maskSrcKey in func;
+ }
+ /**
+ * Checks if `func` is capable of being masked.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
+ */
+
+
+ var isMaskable = coreJsData ? isFunction : stubFalse;
+ /**
+ * Checks if `value` is likely a prototype object.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
+ */
+
+ function isPrototype(value) {
+ var Ctor = value && value.constructor,
+ proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;
+ return value === proto;
+ }
+ /**
+ * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` if suitable for strict
+ * equality comparisons, else `false`.
+ */
+
+
+ function isStrictComparable(value) {
+ return value === value && !isObject(value);
+ }
+ /**
+ * A specialized version of `matchesProperty` for source values suitable
+ * for strict equality comparisons, i.e. `===`.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @param {*} srcValue The value to match.
+ * @returns {Function} Returns the new spec function.
+ */
+
+
+ function matchesStrictComparable(key, srcValue) {
+ return function (object) {
+ if (object == null) {
+ return false;
+ }
+
+ return object[key] === srcValue && (srcValue !== undefined$1 || key in Object(object));
+ };
+ }
+ /**
+ * A specialized version of `_.memoize` which clears the memoized function's
+ * cache when it exceeds `MAX_MEMOIZE_SIZE`.
+ *
+ * @private
+ * @param {Function} func The function to have its output memoized.
+ * @returns {Function} Returns the new memoized function.
+ */
+
+
+ function memoizeCapped(func) {
+ var result = memoize(func, function (key) {
+ if (cache.size === MAX_MEMOIZE_SIZE) {
+ cache.clear();
+ }
+
+ return key;
+ });
+ var cache = result.cache;
+ return result;
+ }
+ /**
+ * Merges the function metadata of `source` into `data`.
+ *
+ * Merging metadata reduces the number of wrappers used to invoke a function.
+ * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
+ * may be applied regardless of execution order. Methods like `_.ary` and
+ * `_.rearg` modify function arguments, making the order in which they are
+ * executed important, preventing the merging of metadata. However, we make
+ * an exception for a safe combined case where curried functions have `_.ary`
+ * and or `_.rearg` applied.
+ *
+ * @private
+ * @param {Array} data The destination metadata.
+ * @param {Array} source The source metadata.
+ * @returns {Array} Returns `data`.
+ */
+
+
+ function mergeData(data, source) {
+ var bitmask = data[1],
+ srcBitmask = source[1],
+ newBitmask = bitmask | srcBitmask,
+ isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
+ var isCombo = srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG || srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_REARG_FLAG && data[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG; // Exit early if metadata can't be merged.
+
+ if (!(isCommon || isCombo)) {
+ return data;
+ } // Use source `thisArg` if available.
+
+
+ if (srcBitmask & WRAP_BIND_FLAG) {
+ data[2] = source[2]; // Set when currying a bound function.
+
+ newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
+ } // Compose partial arguments.
+
+
+ var value = source[3];
+
+ if (value) {
+ var partials = data[3];
+ data[3] = partials ? composeArgs(partials, value, source[4]) : value;
+ data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
+ } // Compose partial right arguments.
+
+
+ value = source[5];
+
+ if (value) {
+ partials = data[5];
+ data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
+ data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
+ } // Use source `argPos` if available.
+
+
+ value = source[7];
+
+ if (value) {
+ data[7] = value;
+ } // Use source `ary` if it's smaller.
+
+
+ if (srcBitmask & WRAP_ARY_FLAG) {
+ data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
+ } // Use source `arity` if one is not provided.
+
+
+ if (data[9] == null) {
+ data[9] = source[9];
+ } // Use source `func` and merge bitmasks.
+
+
+ data[0] = source[0];
+ data[1] = newBitmask;
+ return data;
+ }
+ /**
+ * This function is like
+ * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+ * except that it includes inherited enumerable properties.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+
+
+ function nativeKeysIn(object) {
+ var result = [];
+
+ if (object != null) {
+ for (var key in Object(object)) {
+ result.push(key);
+ }
+ }
+
+ return result;
+ }
+ /**
+ * Converts `value` to a string using `Object.prototype.toString`.
+ *
+ * @private
+ * @param {*} value The value to convert.
+ * @returns {string} Returns the converted string.
+ */
+
+
+ function objectToString(value) {
+ return nativeObjectToString.call(value);
+ }
+ /**
+ * A specialized version of `baseRest` which transforms the rest array.
+ *
+ * @private
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @param {Function} transform The rest array transform.
+ * @returns {Function} Returns the new function.
+ */
+
+
+ function overRest(func, start, transform) {
+ start = nativeMax(start === undefined$1 ? func.length - 1 : start, 0);
+ return function () {
+ var args = arguments,
+ index = -1,
+ length = nativeMax(args.length - start, 0),
+ array = Array(length);
+
+ while (++index < length) {
+ array[index] = args[start + index];
+ }
+
+ index = -1;
+ var otherArgs = Array(start + 1);
+
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+
+ otherArgs[start] = transform(array);
+ return apply(func, this, otherArgs);
+ };
+ }
+ /**
+ * Gets the parent value at `path` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} path The path to get the parent value of.
+ * @returns {*} Returns the parent value.
+ */
+
+
+ function parent(object, path) {
+ return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
+ }
+ /**
+ * Reorder `array` according to the specified indexes where the element at
+ * the first index is assigned as the first element, the element at
+ * the second index is assigned as the second element, and so on.
+ *
+ * @private
+ * @param {Array} array The array to reorder.
+ * @param {Array} indexes The arranged array indexes.
+ * @returns {Array} Returns `array`.
+ */
+
+
+ function reorder(array, indexes) {
+ var arrLength = array.length,
+ length = nativeMin(indexes.length, arrLength),
+ oldArray = copyArray(array);
+
+ while (length--) {
+ var index = indexes[length];
+ array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined$1;
+ }
+
+ return array;
+ }
+ /**
+ * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+
+
+ function safeGet(object, key) {
+ if (key === 'constructor' && typeof object[key] === 'function') {
+ return;
+ }
+
+ if (key == '__proto__') {
+ return;
+ }
+
+ return object[key];
+ }
+ /**
+ * Sets metadata for `func`.
+ *
+ * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
+ * period of time, it will trip its breaker and transition to an identity
+ * function to avoid garbage collection pauses in V8. See
+ * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
+ * for more details.
+ *
+ * @private
+ * @param {Function} func The function to associate metadata with.
+ * @param {*} data The metadata.
+ * @returns {Function} Returns `func`.
+ */
+
+
+ var setData = shortOut(baseSetData);
+ /**
+ * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
+ *
+ * @private
+ * @param {Function} func The function to delay.
+ * @param {number} wait The number of milliseconds to delay invocation.
+ * @returns {number|Object} Returns the timer id or timeout object.
+ */
+
+ var setTimeout = ctxSetTimeout || function (func, wait) {
+ return root.setTimeout(func, wait);
+ };
+ /**
+ * Sets the `toString` method of `func` to return `string`.
+ *
+ * @private
+ * @param {Function} func The function to modify.
+ * @param {Function} string The `toString` result.
+ * @returns {Function} Returns `func`.
+ */
+
+
+ var setToString = shortOut(baseSetToString);
+ /**
+ * Sets the `toString` method of `wrapper` to mimic the source of `reference`
+ * with wrapper details in a comment at the top of the source body.
+ *
+ * @private
+ * @param {Function} wrapper The function to modify.
+ * @param {Function} reference The reference function.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @returns {Function} Returns `wrapper`.
+ */
+
+ function setWrapToString(wrapper, reference, bitmask) {
+ var source = reference + '';
+ return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
+ }
+ /**
+ * Creates a function that'll short out and invoke `identity` instead
+ * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
+ * milliseconds.
+ *
+ * @private
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new shortable function.
+ */
+
+
+ function shortOut(func) {
+ var count = 0,
+ lastCalled = 0;
+ return function () {
+ var stamp = nativeNow(),
+ remaining = HOT_SPAN - (stamp - lastCalled);
+ lastCalled = stamp;
+
+ if (remaining > 0) {
+ if (++count >= HOT_COUNT) {
+ return arguments[0];
+ }
+ } else {
+ count = 0;
+ }
+
+ return func.apply(undefined$1, arguments);
+ };
+ }
+ /**
+ * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
+ *
+ * @private
+ * @param {Array} array The array to shuffle.
+ * @param {number} [size=array.length] The size of `array`.
+ * @returns {Array} Returns `array`.
+ */
+
+
+ function shuffleSelf(array, size) {
+ var index = -1,
+ length = array.length,
+ lastIndex = length - 1;
+ size = size === undefined$1 ? length : size;
+
+ while (++index < size) {
+ var rand = baseRandom(index, lastIndex),
+ value = array[rand];
+ array[rand] = array[index];
+ array[index] = value;
+ }
+
+ array.length = size;
+ return array;
+ }
+ /**
+ * Converts `string` to a property path array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the property path array.
+ */
+
+
+ var stringToPath = memoizeCapped(function (string) {
+ var result = [];
+
+ if (string.charCodeAt(0) === 46
+ /* . */
+ ) {
+ result.push('');
+ }
+
+ string.replace(rePropName, function (match, number, quote, subString) {
+ result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match);
+ });
+ return result;
+ });
+ /**
+ * Converts `value` to a string key if it's not a string or symbol.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {string|symbol} Returns the key.
+ */
+
+ function toKey(value) {
+ if (typeof value == 'string' || isSymbol(value)) {
+ return value;
+ }
+
+ var result = value + '';
+ return result == '0' && 1 / value == -INFINITY ? '-0' : result;
+ }
+ /**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to convert.
+ * @returns {string} Returns the source code.
+ */
+
+
+ function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString.call(func);
+ } catch (e) {}
+
+ try {
+ return func + '';
+ } catch (e) {}
+ }
+
+ return '';
+ }
+ /**
+ * Updates wrapper `details` based on `bitmask` flags.
+ *
+ * @private
+ * @returns {Array} details The details to modify.
+ * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
+ * @returns {Array} Returns `details`.
+ */
+
+
+ function updateWrapDetails(details, bitmask) {
+ arrayEach(wrapFlags, function (pair) {
+ var value = '_.' + pair[0];
+
+ if (bitmask & pair[1] && !arrayIncludes(details, value)) {
+ details.push(value);
+ }
+ });
+ return details.sort();
+ }
+ /**
+ * Creates a clone of `wrapper`.
+ *
+ * @private
+ * @param {Object} wrapper The wrapper to clone.
+ * @returns {Object} Returns the cloned wrapper.
+ */
+
+
+ function wrapperClone(wrapper) {
+ if (wrapper instanceof LazyWrapper) {
+ return wrapper.clone();
+ }
+
+ var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
+ result.__actions__ = copyArray(wrapper.__actions__);
+ result.__index__ = wrapper.__index__;
+ result.__values__ = wrapper.__values__;
+ return result;
+ }
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates an array of elements split into groups the length of `size`.
+ * If `array` can't be split evenly, the final chunk will be the remaining
+ * elements.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to process.
+ * @param {number} [size=1] The length of each chunk
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the new array of chunks.
+ * @example
+ *
+ * _.chunk(['a', 'b', 'c', 'd'], 2);
+ * // => [['a', 'b'], ['c', 'd']]
+ *
+ * _.chunk(['a', 'b', 'c', 'd'], 3);
+ * // => [['a', 'b', 'c'], ['d']]
+ */
+
+
+ function chunk(array, size, guard) {
+ if (guard ? isIterateeCall(array, size, guard) : size === undefined$1) {
+ size = 1;
+ } else {
+ size = nativeMax(toInteger(size), 0);
+ }
+
+ var length = array == null ? 0 : array.length;
+
+ if (!length || size < 1) {
+ return [];
+ }
+
+ var index = 0,
+ resIndex = 0,
+ result = Array(nativeCeil(length / size));
+
+ while (index < length) {
+ result[resIndex++] = baseSlice(array, index, index += size);
+ }
+
+ return result;
+ }
+ /**
+ * Creates an array with all falsey values removed. The values `false`, `null`,
+ * `0`, `""`, `undefined`, and `NaN` are falsey.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to compact.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.compact([0, 1, false, 2, '', 3]);
+ * // => [1, 2, 3]
+ */
+
+
+ function compact(array) {
+ var index = -1,
+ length = array == null ? 0 : array.length,
+ resIndex = 0,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+
+ if (value) {
+ result[resIndex++] = value;
+ }
+ }
+
+ return result;
+ }
+ /**
+ * Creates a new array concatenating `array` with any additional arrays
+ * and/or values.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to concatenate.
+ * @param {...*} [values] The values to concatenate.
+ * @returns {Array} Returns the new concatenated array.
+ * @example
+ *
+ * var array = [1];
+ * var other = _.concat(array, 2, [3], [[4]]);
+ *
+ * console.log(other);
+ * // => [1, 2, 3, [4]]
+ *
+ * console.log(array);
+ * // => [1]
+ */
+
+
+ function concat() {
+ var length = arguments.length;
+
+ if (!length) {
+ return [];
+ }
+
+ var args = Array(length - 1),
+ array = arguments[0],
+ index = length;
+
+ while (index--) {
+ args[index - 1] = arguments[index];
+ }
+
+ return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
+ }
+ /**
+ * Creates an array of `array` values not included in the other given arrays
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons. The order and references of result values are
+ * determined by the first array.
+ *
+ * **Note:** Unlike `_.pullAll`, this method returns a new array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {...Array} [values] The values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ * @see _.without, _.xor
+ * @example
+ *
+ * _.difference([2, 1], [2, 3]);
+ * // => [1]
+ */
+
+
+ var difference = baseRest(function (array, values) {
+ return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) : [];
+ });
+ /**
+ * This method is like `_.difference` except that it accepts `iteratee` which
+ * is invoked for each element of `array` and `values` to generate the criterion
+ * by which they're compared. The order and references of result values are
+ * determined by the first array. The iteratee is invoked with one argument:
+ * (value).
+ *
+ * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {...Array} [values] The values to exclude.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
+ * // => [1.2]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
+ * // => [{ 'x': 2 }]
+ */
+
+ var differenceBy = baseRest(function (array, values) {
+ var iteratee = last(values);
+
+ if (isArrayLikeObject(iteratee)) {
+ iteratee = undefined$1;
+ }
+
+ return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) : [];
+ });
+ /**
+ * This method is like `_.difference` except that it accepts `comparator`
+ * which is invoked to compare elements of `array` to `values`. The order and
+ * references of result values are determined by the first array. The comparator
+ * is invoked with two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {...Array} [values] The values to exclude.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ *
+ * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
+ * // => [{ 'x': 2, 'y': 1 }]
+ */
+
+ var differenceWith = baseRest(function (array, values) {
+ var comparator = last(values);
+
+ if (isArrayLikeObject(comparator)) {
+ comparator = undefined$1;
+ }
+
+ return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined$1, comparator) : [];
+ });
+ /**
+ * Creates a slice of `array` with `n` elements dropped from the beginning.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.5.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to drop.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.drop([1, 2, 3]);
+ * // => [2, 3]
+ *
+ * _.drop([1, 2, 3], 2);
+ * // => [3]
+ *
+ * _.drop([1, 2, 3], 5);
+ * // => []
+ *
+ * _.drop([1, 2, 3], 0);
+ * // => [1, 2, 3]
+ */
+
+ function drop(array, n, guard) {
+ var length = array == null ? 0 : array.length;
+
+ if (!length) {
+ return [];
+ }
+
+ n = guard || n === undefined$1 ? 1 : toInteger(n);
+ return baseSlice(array, n < 0 ? 0 : n, length);
+ }
+ /**
+ * Creates a slice of `array` with `n` elements dropped from the end.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to drop.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.dropRight([1, 2, 3]);
+ * // => [1, 2]
+ *
+ * _.dropRight([1, 2, 3], 2);
+ * // => [1]
+ *
+ * _.dropRight([1, 2, 3], 5);
+ * // => []
+ *
+ * _.dropRight([1, 2, 3], 0);
+ * // => [1, 2, 3]
+ */
+
+
+ function dropRight(array, n, guard) {
+ var length = array == null ? 0 : array.length;
+
+ if (!length) {
+ return [];
+ }
+
+ n = guard || n === undefined$1 ? 1 : toInteger(n);
+ n = length - n;
+ return baseSlice(array, 0, n < 0 ? 0 : n);
+ }
+ /**
+ * Creates a slice of `array` excluding elements dropped from the end.
+ * Elements are dropped until `predicate` returns falsey. The predicate is
+ * invoked with three arguments: (value, index, array).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * _.dropRightWhile(users, function(o) { return !o.active; });
+ * // => objects for ['barney']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
+ * // => objects for ['barney', 'fred']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.dropRightWhile(users, ['active', false]);
+ * // => objects for ['barney']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.dropRightWhile(users, 'active');
+ * // => objects for ['barney', 'fred', 'pebbles']
+ */
+
+
+ function dropRightWhile(array, predicate) {
+ return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true, true) : [];
+ }
+ /**
+ * Creates a slice of `array` excluding elements dropped from the beginning.
+ * Elements are dropped until `predicate` returns falsey. The predicate is
+ * invoked with three arguments: (value, index, array).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * _.dropWhile(users, function(o) { return !o.active; });
+ * // => objects for ['pebbles']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.dropWhile(users, { 'user': 'barney', 'active': false });
+ * // => objects for ['fred', 'pebbles']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.dropWhile(users, ['active', false]);
+ * // => objects for ['pebbles']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.dropWhile(users, 'active');
+ * // => objects for ['barney', 'fred', 'pebbles']
+ */
+
+
+ function dropWhile(array, predicate) {
+ return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true) : [];
+ }
+ /**
+ * Fills elements of `array` with `value` from `start` up to, but not
+ * including, `end`.
+ *
+ * **Note:** This method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.2.0
+ * @category Array
+ * @param {Array} array The array to fill.
+ * @param {*} value The value to fill `array` with.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [1, 2, 3];
+ *
+ * _.fill(array, 'a');
+ * console.log(array);
+ * // => ['a', 'a', 'a']
+ *
+ * _.fill(Array(3), 2);
+ * // => [2, 2, 2]
+ *
+ * _.fill([4, 6, 8, 10], '*', 1, 3);
+ * // => [4, '*', '*', 10]
+ */
+
+
+ function fill(array, value, start, end) {
+ var length = array == null ? 0 : array.length;
+
+ if (!length) {
+ return [];
+ }
+
+ if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
+ start = 0;
+ end = length;
+ }
+
+ return baseFill(array, value, start, end);
+ }
+ /**
+ * This method is like `_.find` except that it returns the index of the first
+ * element `predicate` returns truthy for instead of the element itself.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * _.findIndex(users, function(o) { return o.user == 'barney'; });
+ * // => 0
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.findIndex(users, { 'user': 'fred', 'active': false });
+ * // => 1
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.findIndex(users, ['active', false]);
+ * // => 0
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.findIndex(users, 'active');
+ * // => 2
+ */
+
+
+ function findIndex(array, predicate, fromIndex) {
+ var length = array == null ? 0 : array.length;
+
+ if (!length) {
+ return -1;
+ }
+
+ var index = fromIndex == null ? 0 : toInteger(fromIndex);
+
+ if (index < 0) {
+ index = nativeMax(length + index, 0);
+ }
+
+ return baseFindIndex(array, getIteratee(predicate, 3), index);
+ }
+ /**
+ * This method is like `_.findIndex` except that it iterates over elements
+ * of `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=array.length-1] The index to search from.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
+ * // => 2
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.findLastIndex(users, { 'user': 'barney', 'active': true });
+ * // => 0
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.findLastIndex(users, ['active', false]);
+ * // => 2
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.findLastIndex(users, 'active');
+ * // => 0
+ */
+
+
+ function findLastIndex(array, predicate, fromIndex) {
+ var length = array == null ? 0 : array.length;
+
+ if (!length) {
+ return -1;
+ }
+
+ var index = length - 1;
+
+ if (fromIndex !== undefined$1) {
+ index = toInteger(fromIndex);
+ index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
+ }
+
+ return baseFindIndex(array, getIteratee(predicate, 3), index, true);
+ }
+ /**
+ * Flattens `array` a single level deep.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to flatten.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * _.flatten([1, [2, [3, [4]], 5]]);
+ * // => [1, 2, [3, [4]], 5]
+ */
+
+
+ function flatten(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseFlatten(array, 1) : [];
+ }
+ /**
+ * Recursively flattens `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to flatten.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * _.flattenDeep([1, [2, [3, [4]], 5]]);
+ * // => [1, 2, 3, 4, 5]
+ */
+
+
+ function flattenDeep(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseFlatten(array, INFINITY) : [];
+ }
+ /**
+ * Recursively flatten `array` up to `depth` times.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.4.0
+ * @category Array
+ * @param {Array} array The array to flatten.
+ * @param {number} [depth=1] The maximum recursion depth.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * var array = [1, [2, [3, [4]], 5]];
+ *
+ * _.flattenDepth(array, 1);
+ * // => [1, 2, [3, [4]], 5]
+ *
+ * _.flattenDepth(array, 2);
+ * // => [1, 2, 3, [4], 5]
+ */
+
+
+ function flattenDepth(array, depth) {
+ var length = array == null ? 0 : array.length;
+
+ if (!length) {
+ return [];
+ }
+
+ depth = depth === undefined$1 ? 1 : toInteger(depth);
+ return baseFlatten(array, depth);
+ }
+ /**
+ * The inverse of `_.toPairs`; this method returns an object composed
+ * from key-value `pairs`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} pairs The key-value pairs.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * _.fromPairs([['a', 1], ['b', 2]]);
+ * // => { 'a': 1, 'b': 2 }
+ */
+
+
+ function fromPairs(pairs) {
+ var index = -1,
+ length = pairs == null ? 0 : pairs.length,
+ result = {};
+
+ while (++index < length) {
+ var pair = pairs[index];
+ result[pair[0]] = pair[1];
+ }
+
+ return result;
+ }
+ /**
+ * Gets the first element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @alias first
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the first element of `array`.
+ * @example
+ *
+ * _.head([1, 2, 3]);
+ * // => 1
+ *
+ * _.head([]);
+ * // => undefined
+ */
+
+
+ function head(array) {
+ return array && array.length ? array[0] : undefined$1;
+ }
+ /**
+ * Gets the index at which the first occurrence of `value` is found in `array`
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons. If `fromIndex` is negative, it's used as the
+ * offset from the end of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.indexOf([1, 2, 1, 2], 2);
+ * // => 1
+ *
+ * // Search from the `fromIndex`.
+ * _.indexOf([1, 2, 1, 2], 2, 2);
+ * // => 3
+ */
+
+
+ function indexOf(array, value, fromIndex) {
+ var length = array == null ? 0 : array.length;
+
+ if (!length) {
+ return -1;
+ }
+
+ var index = fromIndex == null ? 0 : toInteger(fromIndex);
+
+ if (index < 0) {
+ index = nativeMax(length + index, 0);
+ }
+
+ return baseIndexOf(array, value, index);
+ }
+ /**
+ * Gets all but the last element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.initial([1, 2, 3]);
+ * // => [1, 2]
+ */
+
+
+ function initial(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseSlice(array, 0, -1) : [];
+ }
+ /**
+ * Creates an array of unique values that are included in all given arrays
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons. The order and references of result values are
+ * determined by the first array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of intersecting values.
+ * @example
+ *
+ * _.intersection([2, 1], [2, 3]);
+ * // => [2]
+ */
+
+
+ var intersection = baseRest(function (arrays) {
+ var mapped = arrayMap(arrays, castArrayLikeObject);
+ return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : [];
+ });
+ /**
+ * This method is like `_.intersection` except that it accepts `iteratee`
+ * which is invoked for each element of each `arrays` to generate the criterion
+ * by which they're compared. The order and references of result values are
+ * determined by the first array. The iteratee is invoked with one argument:
+ * (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns the new array of intersecting values.
+ * @example
+ *
+ * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
+ * // => [2.1]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }]
+ */
+
+ var intersectionBy = baseRest(function (arrays) {
+ var iteratee = last(arrays),
+ mapped = arrayMap(arrays, castArrayLikeObject);
+
+ if (iteratee === last(mapped)) {
+ iteratee = undefined$1;
+ } else {
+ mapped.pop();
+ }
+
+ return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee, 2)) : [];
+ });
+ /**
+ * This method is like `_.intersection` except that it accepts `comparator`
+ * which is invoked to compare elements of `arrays`. The order and references
+ * of result values are determined by the first array. The comparator is
+ * invoked with two arguments: (arrVal, othVal).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of intersecting values.
+ * @example
+ *
+ * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ *
+ * _.intersectionWith(objects, others, _.isEqual);
+ * // => [{ 'x': 1, 'y': 2 }]
+ */
+
+ var intersectionWith = baseRest(function (arrays) {
+ var comparator = last(arrays),
+ mapped = arrayMap(arrays, castArrayLikeObject);
+ comparator = typeof comparator == 'function' ? comparator : undefined$1;
+
+ if (comparator) {
+ mapped.pop();
+ }
+
+ return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined$1, comparator) : [];
+ });
+ /**
+ * Converts all elements in `array` into a string separated by `separator`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to convert.
+ * @param {string} [separator=','] The element separator.
+ * @returns {string} Returns the joined string.
+ * @example
+ *
+ * _.join(['a', 'b', 'c'], '~');
+ * // => 'a~b~c'
+ */
+
+ function join(array, separator) {
+ return array == null ? '' : nativeJoin.call(array, separator);
+ }
+ /**
+ * Gets the last element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the last element of `array`.
+ * @example
+ *
+ * _.last([1, 2, 3]);
+ * // => 3
+ */
+
+
+ function last(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? array[length - 1] : undefined$1;
+ }
+ /**
+ * This method is like `_.indexOf` except that it iterates over elements of
+ * `array` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} [fromIndex=array.length-1] The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.lastIndexOf([1, 2, 1, 2], 2);
+ * // => 3
+ *
+ * // Search from the `fromIndex`.
+ * _.lastIndexOf([1, 2, 1, 2], 2, 2);
+ * // => 1
+ */
+
+
+ function lastIndexOf(array, value, fromIndex) {
+ var length = array == null ? 0 : array.length;
+
+ if (!length) {
+ return -1;
+ }
+
+ var index = length;
+
+ if (fromIndex !== undefined$1) {
+ index = toInteger(fromIndex);
+ index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
+ }
+
+ return value === value ? strictLastIndexOf(array, value, index) : baseFindIndex(array, baseIsNaN, index, true);
+ }
+ /**
+ * Gets the element at index `n` of `array`. If `n` is negative, the nth
+ * element from the end is returned.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.11.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=0] The index of the element to return.
+ * @returns {*} Returns the nth element of `array`.
+ * @example
+ *
+ * var array = ['a', 'b', 'c', 'd'];
+ *
+ * _.nth(array, 1);
+ * // => 'b'
+ *
+ * _.nth(array, -2);
+ * // => 'c';
+ */
+
+
+ function nth(array, n) {
+ return array && array.length ? baseNth(array, toInteger(n)) : undefined$1;
+ }
+ /**
+ * Removes all given values from `array` using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
+ * to remove elements from an array by predicate.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {...*} [values] The values to remove.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
+ *
+ * _.pull(array, 'a', 'c');
+ * console.log(array);
+ * // => ['b', 'b']
+ */
+
+
+ var pull = baseRest(pullAll);
+ /**
+ * This method is like `_.pull` except that it accepts an array of values to remove.
+ *
+ * **Note:** Unlike `_.difference`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to remove.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
+ *
+ * _.pullAll(array, ['a', 'c']);
+ * console.log(array);
+ * // => ['b', 'b']
+ */
+
+ function pullAll(array, values) {
+ return array && array.length && values && values.length ? basePullAll(array, values) : array;
+ }
+ /**
+ * This method is like `_.pullAll` except that it accepts `iteratee` which is
+ * invoked for each element of `array` and `values` to generate the criterion
+ * by which they're compared. The iteratee is invoked with one argument: (value).
+ *
+ * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to remove.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
+ *
+ * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
+ * console.log(array);
+ * // => [{ 'x': 2 }]
+ */
+
+
+ function pullAllBy(array, values, iteratee) {
+ return array && array.length && values && values.length ? basePullAll(array, values, getIteratee(iteratee, 2)) : array;
+ }
+ /**
+ * This method is like `_.pullAll` except that it accepts `comparator` which
+ * is invoked to compare elements of `array` to `values`. The comparator is
+ * invoked with two arguments: (arrVal, othVal).
+ *
+ * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.6.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to remove.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
+ *
+ * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
+ * console.log(array);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
+ */
+
+
+ function pullAllWith(array, values, comparator) {
+ return array && array.length && values && values.length ? basePullAll(array, values, undefined$1, comparator) : array;
+ }
+ /**
+ * Removes elements from `array` corresponding to `indexes` and returns an
+ * array of removed elements.
+ *
+ * **Note:** Unlike `_.at`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {...(number|number[])} [indexes] The indexes of elements to remove.
+ * @returns {Array} Returns the new array of removed elements.
+ * @example
+ *
+ * var array = ['a', 'b', 'c', 'd'];
+ * var pulled = _.pullAt(array, [1, 3]);
+ *
+ * console.log(array);
+ * // => ['a', 'c']
+ *
+ * console.log(pulled);
+ * // => ['b', 'd']
+ */
+
+
+ var pullAt = flatRest(function (array, indexes) {
+ var length = array == null ? 0 : array.length,
+ result = baseAt(array, indexes);
+ basePullAt(array, arrayMap(indexes, function (index) {
+ return isIndex(index, length) ? +index : index;
+ }).sort(compareAscending));
+ return result;
+ });
+ /**
+ * Removes all elements from `array` that `predicate` returns truthy for
+ * and returns an array of the removed elements. The predicate is invoked
+ * with three arguments: (value, index, array).
+ *
+ * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
+ * to pull elements from an array by value.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new array of removed elements.
+ * @example
+ *
+ * var array = [1, 2, 3, 4];
+ * var evens = _.remove(array, function(n) {
+ * return n % 2 == 0;
+ * });
+ *
+ * console.log(array);
+ * // => [1, 3]
+ *
+ * console.log(evens);
+ * // => [2, 4]
+ */
+
+ function remove(array, predicate) {
+ var result = [];
+
+ if (!(array && array.length)) {
+ return result;
+ }
+
+ var index = -1,
+ indexes = [],
+ length = array.length;
+ predicate = getIteratee(predicate, 3);
+
+ while (++index < length) {
+ var value = array[index];
+
+ if (predicate(value, index, array)) {
+ result.push(value);
+ indexes.push(index);
+ }
+ }
+
+ basePullAt(array, indexes);
+ return result;
+ }
+ /**
+ * Reverses `array` so that the first element becomes the last, the second
+ * element becomes the second to last, and so on.
+ *
+ * **Note:** This method mutates `array` and is based on
+ * [`Array#reverse`](https://mdn.io/Array/reverse).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [1, 2, 3];
+ *
+ * _.reverse(array);
+ * // => [3, 2, 1]
+ *
+ * console.log(array);
+ * // => [3, 2, 1]
+ */
+
+
+ function reverse(array) {
+ return array == null ? array : nativeReverse.call(array);
+ }
+ /**
+ * Creates a slice of `array` from `start` up to, but not including, `end`.
+ *
+ * **Note:** This method is used instead of
+ * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
+ * returned.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to slice.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the slice of `array`.
+ */
+
+
+ function slice(array, start, end) {
+ var length = array == null ? 0 : array.length;
+
+ if (!length) {
+ return [];
+ }
+
+ if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
+ start = 0;
+ end = length;
+ } else {
+ start = start == null ? 0 : toInteger(start);
+ end = end === undefined$1 ? length : toInteger(end);
+ }
+
+ return baseSlice(array, start, end);
+ }
+ /**
+ * Uses a binary search to determine the lowest index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * _.sortedIndex([30, 50], 40);
+ * // => 1
+ */
+
+
+ function sortedIndex(array, value) {
+ return baseSortedIndex(array, value);
+ }
+ /**
+ * This method is like `_.sortedIndex` except that it accepts `iteratee`
+ * which is invoked for `value` and each element of `array` to compute their
+ * sort ranking. The iteratee is invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * var objects = [{ 'x': 4 }, { 'x': 5 }];
+ *
+ * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
+ * // => 0
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
+ * // => 0
+ */
+
+
+ function sortedIndexBy(array, value, iteratee) {
+ return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
+ }
+ /**
+ * This method is like `_.indexOf` except that it performs a binary
+ * search on a sorted `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
+ * // => 1
+ */
+
+
+ function sortedIndexOf(array, value) {
+ var length = array == null ? 0 : array.length;
+
+ if (length) {
+ var index = baseSortedIndex(array, value);
+
+ if (index < length && eq(array[index], value)) {
+ return index;
+ }
+ }
+
+ return -1;
+ }
+ /**
+ * This method is like `_.sortedIndex` except that it returns the highest
+ * index at which `value` should be inserted into `array` in order to
+ * maintain its sort order.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
+ * // => 4
+ */
+
+
+ function sortedLastIndex(array, value) {
+ return baseSortedIndex(array, value, true);
+ }
+ /**
+ * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
+ * which is invoked for `value` and each element of `array` to compute their
+ * sort ranking. The iteratee is invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * var objects = [{ 'x': 4 }, { 'x': 5 }];
+ *
+ * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
+ * // => 1
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
+ * // => 1
+ */
+
+
+ function sortedLastIndexBy(array, value, iteratee) {
+ return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
+ }
+ /**
+ * This method is like `_.lastIndexOf` except that it performs a binary
+ * search on a sorted `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
+ * // => 3
+ */
+
+
+ function sortedLastIndexOf(array, value) {
+ var length = array == null ? 0 : array.length;
+
+ if (length) {
+ var index = baseSortedIndex(array, value, true) - 1;
+
+ if (eq(array[index], value)) {
+ return index;
+ }
+ }
+
+ return -1;
+ }
+ /**
+ * This method is like `_.uniq` except that it's designed and optimized
+ * for sorted arrays.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @returns {Array} Returns the new duplicate free array.
+ * @example
+ *
+ * _.sortedUniq([1, 1, 2]);
+ * // => [1, 2]
+ */
+
+
+ function sortedUniq(array) {
+ return array && array.length ? baseSortedUniq(array) : [];
+ }
+ /**
+ * This method is like `_.uniqBy` except that it's designed and optimized
+ * for sorted arrays.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The iteratee invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ * @example
+ *
+ * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
+ * // => [1.1, 2.3]
+ */
+
+
+ function sortedUniqBy(array, iteratee) {
+ return array && array.length ? baseSortedUniq(array, getIteratee(iteratee, 2)) : [];
+ }
+ /**
+ * Gets all but the first element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.tail([1, 2, 3]);
+ * // => [2, 3]
+ */
+
+
+ function tail(array) {
+ var length = array == null ? 0 : array.length;
+ return length ? baseSlice(array, 1, length) : [];
+ }
+ /**
+ * Creates a slice of `array` with `n` elements taken from the beginning.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to take.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.take([1, 2, 3]);
+ * // => [1]
+ *
+ * _.take([1, 2, 3], 2);
+ * // => [1, 2]
+ *
+ * _.take([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * _.take([1, 2, 3], 0);
+ * // => []
+ */
+
+
+ function take(array, n, guard) {
+ if (!(array && array.length)) {
+ return [];
+ }
+
+ n = guard || n === undefined$1 ? 1 : toInteger(n);
+ return baseSlice(array, 0, n < 0 ? 0 : n);
+ }
+ /**
+ * Creates a slice of `array` with `n` elements taken from the end.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to take.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.takeRight([1, 2, 3]);
+ * // => [3]
+ *
+ * _.takeRight([1, 2, 3], 2);
+ * // => [2, 3]
+ *
+ * _.takeRight([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * _.takeRight([1, 2, 3], 0);
+ * // => []
+ */
+
+
+ function takeRight(array, n, guard) {
+ var length = array == null ? 0 : array.length;
+
+ if (!length) {
+ return [];
+ }
+
+ n = guard || n === undefined$1 ? 1 : toInteger(n);
+ n = length - n;
+ return baseSlice(array, n < 0 ? 0 : n, length);
+ }
+ /**
+ * Creates a slice of `array` with elements taken from the end. Elements are
+ * taken until `predicate` returns falsey. The predicate is invoked with
+ * three arguments: (value, index, array).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * _.takeRightWhile(users, function(o) { return !o.active; });
+ * // => objects for ['fred', 'pebbles']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
+ * // => objects for ['pebbles']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.takeRightWhile(users, ['active', false]);
+ * // => objects for ['fred', 'pebbles']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.takeRightWhile(users, 'active');
+ * // => []
+ */
+
+
+ function takeRightWhile(array, predicate) {
+ return array && array.length ? baseWhile(array, getIteratee(predicate, 3), false, true) : [];
+ }
+ /**
+ * Creates a slice of `array` with elements taken from the beginning. Elements
+ * are taken until `predicate` returns falsey. The predicate is invoked with
+ * three arguments: (value, index, array).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * _.takeWhile(users, function(o) { return !o.active; });
+ * // => objects for ['barney', 'fred']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.takeWhile(users, { 'user': 'barney', 'active': false });
+ * // => objects for ['barney']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.takeWhile(users, ['active', false]);
+ * // => objects for ['barney', 'fred']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.takeWhile(users, 'active');
+ * // => []
+ */
+
+
+ function takeWhile(array, predicate) {
+ return array && array.length ? baseWhile(array, getIteratee(predicate, 3)) : [];
+ }
+ /**
+ * Creates an array of unique values, in order, from all given arrays using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of combined values.
+ * @example
+ *
+ * _.union([2], [1, 2]);
+ * // => [2, 1]
+ */
+
+
+ var union = baseRest(function (arrays) {
+ return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
+ });
+ /**
+ * This method is like `_.union` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by
+ * which uniqueness is computed. Result values are chosen from the first
+ * array in which the value occurs. The iteratee is invoked with one argument:
+ * (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns the new array of combined values.
+ * @example
+ *
+ * _.unionBy([2.1], [1.2, 2.3], Math.floor);
+ * // => [2.1, 1.2]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }, { 'x': 2 }]
+ */
+
+ var unionBy = baseRest(function (arrays) {
+ var iteratee = last(arrays);
+
+ if (isArrayLikeObject(iteratee)) {
+ iteratee = undefined$1;
+ }
+
+ return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
+ });
+ /**
+ * This method is like `_.union` except that it accepts `comparator` which
+ * is invoked to compare elements of `arrays`. Result values are chosen from
+ * the first array in which the value occurs. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of combined values.
+ * @example
+ *
+ * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ *
+ * _.unionWith(objects, others, _.isEqual);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
+ */
+
+ var unionWith = baseRest(function (arrays) {
+ var comparator = last(arrays);
+ comparator = typeof comparator == 'function' ? comparator : undefined$1;
+ return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined$1, comparator);
+ });
+ /**
+ * Creates a duplicate-free version of an array, using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons, in which only the first occurrence of each element
+ * is kept. The order of result values is determined by the order they occur
+ * in the array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @returns {Array} Returns the new duplicate free array.
+ * @example
+ *
+ * _.uniq([2, 1, 2]);
+ * // => [2, 1]
+ */
+
+ function uniq(array) {
+ return array && array.length ? baseUniq(array) : [];
+ }
+ /**
+ * This method is like `_.uniq` except that it accepts `iteratee` which is
+ * invoked for each element in `array` to generate the criterion by which
+ * uniqueness is computed. The order of result values is determined by the
+ * order they occur in the array. The iteratee is invoked with one argument:
+ * (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ * @example
+ *
+ * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
+ * // => [2.1, 1.2]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }, { 'x': 2 }]
+ */
+
+
+ function uniqBy(array, iteratee) {
+ return array && array.length ? baseUniq(array, getIteratee(iteratee, 2)) : [];
+ }
+ /**
+ * This method is like `_.uniq` except that it accepts `comparator` which
+ * is invoked to compare elements of `array`. The order of result values is
+ * determined by the order they occur in the array.The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new duplicate free array.
+ * @example
+ *
+ * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ *
+ * _.uniqWith(objects, _.isEqual);
+ * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
+ */
+
+
+ function uniqWith(array, comparator) {
+ comparator = typeof comparator == 'function' ? comparator : undefined$1;
+ return array && array.length ? baseUniq(array, undefined$1, comparator) : [];
+ }
+ /**
+ * This method is like `_.zip` except that it accepts an array of grouped
+ * elements and creates an array regrouping the elements to their pre-zip
+ * configuration.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.2.0
+ * @category Array
+ * @param {Array} array The array of grouped elements to process.
+ * @returns {Array} Returns the new array of regrouped elements.
+ * @example
+ *
+ * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
+ * // => [['a', 1, true], ['b', 2, false]]
+ *
+ * _.unzip(zipped);
+ * // => [['a', 'b'], [1, 2], [true, false]]
+ */
+
+
+ function unzip(array) {
+ if (!(array && array.length)) {
+ return [];
+ }
+
+ var length = 0;
+ array = arrayFilter(array, function (group) {
+ if (isArrayLikeObject(group)) {
+ length = nativeMax(group.length, length);
+ return true;
+ }
+ });
+ return baseTimes(length, function (index) {
+ return arrayMap(array, baseProperty(index));
+ });
+ }
+ /**
+ * This method is like `_.unzip` except that it accepts `iteratee` to specify
+ * how regrouped values should be combined. The iteratee is invoked with the
+ * elements of each group: (...group).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.8.0
+ * @category Array
+ * @param {Array} array The array of grouped elements to process.
+ * @param {Function} [iteratee=_.identity] The function to combine
+ * regrouped values.
+ * @returns {Array} Returns the new array of regrouped elements.
+ * @example
+ *
+ * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
+ * // => [[1, 10, 100], [2, 20, 200]]
+ *
+ * _.unzipWith(zipped, _.add);
+ * // => [3, 30, 300]
+ */
+
+
+ function unzipWith(array, iteratee) {
+ if (!(array && array.length)) {
+ return [];
+ }
+
+ var result = unzip(array);
+
+ if (iteratee == null) {
+ return result;
+ }
+
+ return arrayMap(result, function (group) {
+ return apply(iteratee, undefined$1, group);
+ });
+ }
+ /**
+ * Creates an array excluding all given values using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * **Note:** Unlike `_.pull`, this method returns a new array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {...*} [values] The values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ * @see _.difference, _.xor
+ * @example
+ *
+ * _.without([2, 1, 2, 3], 1, 2);
+ * // => [3]
+ */
+
+
+ var without = baseRest(function (array, values) {
+ return isArrayLikeObject(array) ? baseDifference(array, values) : [];
+ });
+ /**
+ * Creates an array of unique values that is the
+ * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
+ * of the given arrays. The order of result values is determined by the order
+ * they occur in the arrays.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of filtered values.
+ * @see _.difference, _.without
+ * @example
+ *
+ * _.xor([2, 1], [2, 3]);
+ * // => [1, 3]
+ */
+
+ var xor = baseRest(function (arrays) {
+ return baseXor(arrayFilter(arrays, isArrayLikeObject));
+ });
+ /**
+ * This method is like `_.xor` except that it accepts `iteratee` which is
+ * invoked for each element of each `arrays` to generate the criterion by
+ * which by which they're compared. The order of result values is determined
+ * by the order they occur in the arrays. The iteratee is invoked with one
+ * argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
+ * // => [1.2, 3.4]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 2 }]
+ */
+
+ var xorBy = baseRest(function (arrays) {
+ var iteratee = last(arrays);
+
+ if (isArrayLikeObject(iteratee)) {
+ iteratee = undefined$1;
+ }
+
+ return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
+ });
+ /**
+ * This method is like `_.xor` except that it accepts `comparator` which is
+ * invoked to compare elements of `arrays`. The order of result values is
+ * determined by the order they occur in the arrays. The comparator is invoked
+ * with two arguments: (arrVal, othVal).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @param {Function} [comparator] The comparator invoked per element.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
+ * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
+ *
+ * _.xorWith(objects, others, _.isEqual);
+ * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
+ */
+
+ var xorWith = baseRest(function (arrays) {
+ var comparator = last(arrays);
+ comparator = typeof comparator == 'function' ? comparator : undefined$1;
+ return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined$1, comparator);
+ });
+ /**
+ * Creates an array of grouped elements, the first of which contains the
+ * first elements of the given arrays, the second of which contains the
+ * second elements of the given arrays, and so on.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to process.
+ * @returns {Array} Returns the new array of grouped elements.
+ * @example
+ *
+ * _.zip(['a', 'b'], [1, 2], [true, false]);
+ * // => [['a', 1, true], ['b', 2, false]]
+ */
+
+ var zip = baseRest(unzip);
+ /**
+ * This method is like `_.fromPairs` except that it accepts two arrays,
+ * one of property identifiers and one of corresponding values.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.4.0
+ * @category Array
+ * @param {Array} [props=[]] The property identifiers.
+ * @param {Array} [values=[]] The property values.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * _.zipObject(['a', 'b'], [1, 2]);
+ * // => { 'a': 1, 'b': 2 }
+ */
+
+ function zipObject(props, values) {
+ return baseZipObject(props || [], values || [], assignValue);
+ }
+ /**
+ * This method is like `_.zipObject` except that it supports property paths.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.1.0
+ * @category Array
+ * @param {Array} [props=[]] The property identifiers.
+ * @param {Array} [values=[]] The property values.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
+ * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
+ */
+
+
+ function zipObjectDeep(props, values) {
+ return baseZipObject(props || [], values || [], baseSet);
+ }
+ /**
+ * This method is like `_.zip` except that it accepts `iteratee` to specify
+ * how grouped values should be combined. The iteratee is invoked with the
+ * elements of each group: (...group).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.8.0
+ * @category Array
+ * @param {...Array} [arrays] The arrays to process.
+ * @param {Function} [iteratee=_.identity] The function to combine
+ * grouped values.
+ * @returns {Array} Returns the new array of grouped elements.
+ * @example
+ *
+ * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
+ * return a + b + c;
+ * });
+ * // => [111, 222]
+ */
+
+
+ var zipWith = baseRest(function (arrays) {
+ var length = arrays.length,
+ iteratee = length > 1 ? arrays[length - 1] : undefined$1;
+ iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined$1;
+ return unzipWith(arrays, iteratee);
+ });
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a `lodash` wrapper instance that wraps `value` with explicit method
+ * chain sequences enabled. The result of such sequences must be unwrapped
+ * with `_#value`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.3.0
+ * @category Seq
+ * @param {*} value The value to wrap.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 },
+ * { 'user': 'pebbles', 'age': 1 }
+ * ];
+ *
+ * var youngest = _
+ * .chain(users)
+ * .sortBy('age')
+ * .map(function(o) {
+ * return o.user + ' is ' + o.age;
+ * })
+ * .head()
+ * .value();
+ * // => 'pebbles is 1'
+ */
+
+ function chain(value) {
+ var result = lodash(value);
+ result.__chain__ = true;
+ return result;
+ }
+ /**
+ * This method invokes `interceptor` and returns `value`. The interceptor
+ * is invoked with one argument; (value). The purpose of this method is to
+ * "tap into" a method chain sequence in order to modify intermediate results.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Seq
+ * @param {*} value The value to provide to `interceptor`.
+ * @param {Function} interceptor The function to invoke.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * _([1, 2, 3])
+ * .tap(function(array) {
+ * // Mutate input array.
+ * array.pop();
+ * })
+ * .reverse()
+ * .value();
+ * // => [2, 1]
+ */
+
+
+ function tap(value, interceptor) {
+ interceptor(value);
+ return value;
+ }
+ /**
+ * This method is like `_.tap` except that it returns the result of `interceptor`.
+ * The purpose of this method is to "pass thru" values replacing intermediate
+ * results in a method chain sequence.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Seq
+ * @param {*} value The value to provide to `interceptor`.
+ * @param {Function} interceptor The function to invoke.
+ * @returns {*} Returns the result of `interceptor`.
+ * @example
+ *
+ * _(' abc ')
+ * .chain()
+ * .trim()
+ * .thru(function(value) {
+ * return [value];
+ * })
+ * .value();
+ * // => ['abc']
+ */
+
+
+ function thru(value, interceptor) {
+ return interceptor(value);
+ }
+ /**
+ * This method is the wrapper version of `_.at`.
+ *
+ * @name at
+ * @memberOf _
+ * @since 1.0.0
+ * @category Seq
+ * @param {...(string|string[])} [paths] The property paths to pick.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
+ *
+ * _(object).at(['a[0].b.c', 'a[1]']).value();
+ * // => [3, 4]
+ */
+
+
+ var wrapperAt = flatRest(function (paths) {
+ var length = paths.length,
+ start = length ? paths[0] : 0,
+ value = this.__wrapped__,
+ interceptor = function interceptor(object) {
+ return baseAt(object, paths);
+ };
+
+ if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) {
+ return this.thru(interceptor);
+ }
+
+ value = value.slice(start, +start + (length ? 1 : 0));
+
+ value.__actions__.push({
+ 'func': thru,
+ 'args': [interceptor],
+ 'thisArg': undefined$1
+ });
+
+ return new LodashWrapper(value, this.__chain__).thru(function (array) {
+ if (length && !array.length) {
+ array.push(undefined$1);
+ }
+
+ return array;
+ });
+ });
+ /**
+ * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
+ *
+ * @name chain
+ * @memberOf _
+ * @since 0.1.0
+ * @category Seq
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * // A sequence without explicit chaining.
+ * _(users).head();
+ * // => { 'user': 'barney', 'age': 36 }
+ *
+ * // A sequence with explicit chaining.
+ * _(users)
+ * .chain()
+ * .head()
+ * .pick('user')
+ * .value();
+ * // => { 'user': 'barney' }
+ */
+
+ function wrapperChain() {
+ return chain(this);
+ }
+ /**
+ * Executes the chain sequence and returns the wrapped result.
+ *
+ * @name commit
+ * @memberOf _
+ * @since 3.2.0
+ * @category Seq
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var array = [1, 2];
+ * var wrapped = _(array).push(3);
+ *
+ * console.log(array);
+ * // => [1, 2]
+ *
+ * wrapped = wrapped.commit();
+ * console.log(array);
+ * // => [1, 2, 3]
+ *
+ * wrapped.last();
+ * // => 3
+ *
+ * console.log(array);
+ * // => [1, 2, 3]
+ */
+
+
+ function wrapperCommit() {
+ return new LodashWrapper(this.value(), this.__chain__);
+ }
+ /**
+ * Gets the next value on a wrapped object following the
+ * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
+ *
+ * @name next
+ * @memberOf _
+ * @since 4.0.0
+ * @category Seq
+ * @returns {Object} Returns the next iterator value.
+ * @example
+ *
+ * var wrapped = _([1, 2]);
+ *
+ * wrapped.next();
+ * // => { 'done': false, 'value': 1 }
+ *
+ * wrapped.next();
+ * // => { 'done': false, 'value': 2 }
+ *
+ * wrapped.next();
+ * // => { 'done': true, 'value': undefined }
+ */
+
+
+ function wrapperNext() {
+ if (this.__values__ === undefined$1) {
+ this.__values__ = toArray(this.value());
+ }
+
+ var done = this.__index__ >= this.__values__.length,
+ value = done ? undefined$1 : this.__values__[this.__index__++];
+ return {
+ 'done': done,
+ 'value': value
+ };
+ }
+ /**
+ * Enables the wrapper to be iterable.
+ *
+ * @name Symbol.iterator
+ * @memberOf _
+ * @since 4.0.0
+ * @category Seq
+ * @returns {Object} Returns the wrapper object.
+ * @example
+ *
+ * var wrapped = _([1, 2]);
+ *
+ * wrapped[Symbol.iterator]() === wrapped;
+ * // => true
+ *
+ * Array.from(wrapped);
+ * // => [1, 2]
+ */
+
+
+ function wrapperToIterator() {
+ return this;
+ }
+ /**
+ * Creates a clone of the chain sequence planting `value` as the wrapped value.
+ *
+ * @name plant
+ * @memberOf _
+ * @since 3.2.0
+ * @category Seq
+ * @param {*} value The value to plant.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var wrapped = _([1, 2]).map(square);
+ * var other = wrapped.plant([3, 4]);
+ *
+ * other.value();
+ * // => [9, 16]
+ *
+ * wrapped.value();
+ * // => [1, 4]
+ */
+
+
+ function wrapperPlant(value) {
+ var result,
+ parent = this;
+
+ while (parent instanceof baseLodash) {
+ var clone = wrapperClone(parent);
+ clone.__index__ = 0;
+ clone.__values__ = undefined$1;
+
+ if (result) {
+ previous.__wrapped__ = clone;
+ } else {
+ result = clone;
+ }
+
+ var previous = clone;
+ parent = parent.__wrapped__;
+ }
+
+ previous.__wrapped__ = value;
+ return result;
+ }
+ /**
+ * This method is the wrapper version of `_.reverse`.
+ *
+ * **Note:** This method mutates the wrapped array.
+ *
+ * @name reverse
+ * @memberOf _
+ * @since 0.1.0
+ * @category Seq
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var array = [1, 2, 3];
+ *
+ * _(array).reverse().value()
+ * // => [3, 2, 1]
+ *
+ * console.log(array);
+ * // => [3, 2, 1]
+ */
+
+
+ function wrapperReverse() {
+ var value = this.__wrapped__;
+
+ if (value instanceof LazyWrapper) {
+ var wrapped = value;
+
+ if (this.__actions__.length) {
+ wrapped = new LazyWrapper(this);
+ }
+
+ wrapped = wrapped.reverse();
+
+ wrapped.__actions__.push({
+ 'func': thru,
+ 'args': [reverse],
+ 'thisArg': undefined$1
+ });
+
+ return new LodashWrapper(wrapped, this.__chain__);
+ }
+
+ return this.thru(reverse);
+ }
+ /**
+ * Executes the chain sequence to resolve the unwrapped value.
+ *
+ * @name value
+ * @memberOf _
+ * @since 0.1.0
+ * @alias toJSON, valueOf
+ * @category Seq
+ * @returns {*} Returns the resolved unwrapped value.
+ * @example
+ *
+ * _([1, 2, 3]).value();
+ * // => [1, 2, 3]
+ */
+
+
+ function wrapperValue() {
+ return baseWrapperValue(this.__wrapped__, this.__actions__);
+ }
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` thru `iteratee`. The corresponding value of
+ * each key is the number of times the key was returned by `iteratee`. The
+ * iteratee is invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.5.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.countBy([6.1, 4.2, 6.3], Math.floor);
+ * // => { '4': 1, '6': 2 }
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.countBy(['one', 'two', 'three'], 'length');
+ * // => { '3': 2, '5': 1 }
+ */
+
+
+ var countBy = createAggregator(function (result, value, key) {
+ if (hasOwnProperty.call(result, key)) {
+ ++result[key];
+ } else {
+ baseAssignValue(result, key, 1);
+ }
+ });
+ /**
+ * Checks if `predicate` returns truthy for **all** elements of `collection`.
+ * Iteration is stopped once `predicate` returns falsey. The predicate is
+ * invoked with three arguments: (value, index|key, collection).
+ *
+ * **Note:** This method returns `true` for
+ * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
+ * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
+ * elements of empty collections.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`.
+ * @example
+ *
+ * _.every([true, 1, null, 'yes'], Boolean);
+ * // => false
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.every(users, { 'user': 'barney', 'active': false });
+ * // => false
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.every(users, ['active', false]);
+ * // => true
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.every(users, 'active');
+ * // => false
+ */
+
+ function every(collection, predicate, guard) {
+ var func = isArray(collection) ? arrayEvery : baseEvery;
+
+ if (guard && isIterateeCall(collection, predicate, guard)) {
+ predicate = undefined$1;
+ }
+
+ return func(collection, getIteratee(predicate, 3));
+ }
+ /**
+ * Iterates over elements of `collection`, returning an array of all elements
+ * `predicate` returns truthy for. The predicate is invoked with three
+ * arguments: (value, index|key, collection).
+ *
+ * **Note:** Unlike `_.remove`, this method returns a new array.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ * @see _.reject
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * _.filter(users, function(o) { return !o.active; });
+ * // => objects for ['fred']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.filter(users, { 'age': 36, 'active': true });
+ * // => objects for ['barney']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.filter(users, ['active', false]);
+ * // => objects for ['fred']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.filter(users, 'active');
+ * // => objects for ['barney']
+ *
+ * // Combining several predicates using `_.overEvery` or `_.overSome`.
+ * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
+ * // => objects for ['fred', 'barney']
+ */
+
+
+ function filter(collection, predicate) {
+ var func = isArray(collection) ? arrayFilter : baseFilter;
+ return func(collection, getIteratee(predicate, 3));
+ }
+ /**
+ * Iterates over elements of `collection`, returning the first element
+ * `predicate` returns truthy for. The predicate is invoked with three
+ * arguments: (value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false },
+ * { 'user': 'pebbles', 'age': 1, 'active': true }
+ * ];
+ *
+ * _.find(users, function(o) { return o.age < 40; });
+ * // => object for 'barney'
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.find(users, { 'age': 1, 'active': true });
+ * // => object for 'pebbles'
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.find(users, ['active', false]);
+ * // => object for 'fred'
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.find(users, 'active');
+ * // => object for 'barney'
+ */
+
+
+ var find = createFind(findIndex);
+ /**
+ * This method is like `_.find` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param {number} [fromIndex=collection.length-1] The index to search from.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * _.findLast([1, 2, 3, 4], function(n) {
+ * return n % 2 == 1;
+ * });
+ * // => 3
+ */
+
+ var findLast = createFind(findLastIndex);
+ /**
+ * Creates a flattened array of values by running each element in `collection`
+ * thru `iteratee` and flattening the mapped results. The iteratee is invoked
+ * with three arguments: (value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * function duplicate(n) {
+ * return [n, n];
+ * }
+ *
+ * _.flatMap([1, 2], duplicate);
+ * // => [1, 1, 2, 2]
+ */
+
+ function flatMap(collection, iteratee) {
+ return baseFlatten(map(collection, iteratee), 1);
+ }
+ /**
+ * This method is like `_.flatMap` except that it recursively flattens the
+ * mapped results.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.7.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * function duplicate(n) {
+ * return [[[n, n]]];
+ * }
+ *
+ * _.flatMapDeep([1, 2], duplicate);
+ * // => [1, 1, 2, 2]
+ */
+
+
+ function flatMapDeep(collection, iteratee) {
+ return baseFlatten(map(collection, iteratee), INFINITY);
+ }
+ /**
+ * This method is like `_.flatMap` except that it recursively flattens the
+ * mapped results up to `depth` times.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.7.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {number} [depth=1] The maximum recursion depth.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * function duplicate(n) {
+ * return [[[n, n]]];
+ * }
+ *
+ * _.flatMapDepth([1, 2], duplicate, 2);
+ * // => [[1, 1], [2, 2]]
+ */
+
+
+ function flatMapDepth(collection, iteratee, depth) {
+ depth = depth === undefined$1 ? 1 : toInteger(depth);
+ return baseFlatten(map(collection, iteratee), depth);
+ }
+ /**
+ * Iterates over elements of `collection` and invokes `iteratee` for each element.
+ * The iteratee is invoked with three arguments: (value, index|key, collection).
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
+ *
+ * **Note:** As with other "Collections" methods, objects with a "length"
+ * property are iterated like arrays. To avoid this behavior use `_.forIn`
+ * or `_.forOwn` for object iteration.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @alias each
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array|Object} Returns `collection`.
+ * @see _.forEachRight
+ * @example
+ *
+ * _.forEach([1, 2], function(value) {
+ * console.log(value);
+ * });
+ * // => Logs `1` then `2`.
+ *
+ * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
+ */
+
+
+ function forEach(collection, iteratee) {
+ var func = isArray(collection) ? arrayEach : baseEach;
+ return func(collection, getIteratee(iteratee, 3));
+ }
+ /**
+ * This method is like `_.forEach` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @alias eachRight
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array|Object} Returns `collection`.
+ * @see _.forEach
+ * @example
+ *
+ * _.forEachRight([1, 2], function(value) {
+ * console.log(value);
+ * });
+ * // => Logs `2` then `1`.
+ */
+
+
+ function forEachRight(collection, iteratee) {
+ var func = isArray(collection) ? arrayEachRight : baseEachRight;
+ return func(collection, getIteratee(iteratee, 3));
+ }
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` thru `iteratee`. The order of grouped values
+ * is determined by the order they occur in `collection`. The corresponding
+ * value of each key is an array of elements responsible for generating the
+ * key. The iteratee is invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.groupBy([6.1, 4.2, 6.3], Math.floor);
+ * // => { '4': [4.2], '6': [6.1, 6.3] }
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.groupBy(['one', 'two', 'three'], 'length');
+ * // => { '3': ['one', 'two'], '5': ['three'] }
+ */
+
+
+ var groupBy = createAggregator(function (result, value, key) {
+ if (hasOwnProperty.call(result, key)) {
+ result[key].push(value);
+ } else {
+ baseAssignValue(result, key, [value]);
+ }
+ });
+ /**
+ * Checks if `value` is in `collection`. If `collection` is a string, it's
+ * checked for a substring of `value`, otherwise
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * is used for equality comparisons. If `fromIndex` is negative, it's used as
+ * the offset from the end of `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to inspect.
+ * @param {*} value The value to search for.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
+ * @returns {boolean} Returns `true` if `value` is found, else `false`.
+ * @example
+ *
+ * _.includes([1, 2, 3], 1);
+ * // => true
+ *
+ * _.includes([1, 2, 3], 1, 2);
+ * // => false
+ *
+ * _.includes({ 'a': 1, 'b': 2 }, 1);
+ * // => true
+ *
+ * _.includes('abcd', 'bc');
+ * // => true
+ */
+
+ function includes(collection, value, fromIndex, guard) {
+ collection = isArrayLike(collection) ? collection : values(collection);
+ fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0;
+ var length = collection.length;
+
+ if (fromIndex < 0) {
+ fromIndex = nativeMax(length + fromIndex, 0);
+ }
+
+ return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;
+ }
+ /**
+ * Invokes the method at `path` of each element in `collection`, returning
+ * an array of the results of each invoked method. Any additional arguments
+ * are provided to each invoked method. If `path` is a function, it's invoked
+ * for, and `this` bound to, each element in `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Array|Function|string} path The path of the method to invoke or
+ * the function invoked per iteration.
+ * @param {...*} [args] The arguments to invoke each method with.
+ * @returns {Array} Returns the array of results.
+ * @example
+ *
+ * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
+ * // => [[1, 5, 7], [1, 2, 3]]
+ *
+ * _.invokeMap([123, 456], String.prototype.split, '');
+ * // => [['1', '2', '3'], ['4', '5', '6']]
+ */
+
+
+ var invokeMap = baseRest(function (collection, path, args) {
+ var index = -1,
+ isFunc = typeof path == 'function',
+ result = isArrayLike(collection) ? Array(collection.length) : [];
+ baseEach(collection, function (value) {
+ result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
+ });
+ return result;
+ });
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` thru `iteratee`. The corresponding value of
+ * each key is the last element responsible for generating the key. The
+ * iteratee is invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * var array = [
+ * { 'dir': 'left', 'code': 97 },
+ * { 'dir': 'right', 'code': 100 }
+ * ];
+ *
+ * _.keyBy(array, function(o) {
+ * return String.fromCharCode(o.code);
+ * });
+ * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
+ *
+ * _.keyBy(array, 'dir');
+ * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
+ */
+
+ var keyBy = createAggregator(function (result, value, key) {
+ baseAssignValue(result, key, value);
+ });
+ /**
+ * Creates an array of values by running each element in `collection` thru
+ * `iteratee`. The iteratee is invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * Many lodash methods are guarded to work as iteratees for methods like
+ * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
+ *
+ * The guarded methods are:
+ * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
+ * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
+ * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
+ * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * _.map([4, 8], square);
+ * // => [16, 64]
+ *
+ * _.map({ 'a': 4, 'b': 8 }, square);
+ * // => [16, 64] (iteration order is not guaranteed)
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.map(users, 'user');
+ * // => ['barney', 'fred']
+ */
+
+ function map(collection, iteratee) {
+ var func = isArray(collection) ? arrayMap : baseMap;
+ return func(collection, getIteratee(iteratee, 3));
+ }
+ /**
+ * This method is like `_.sortBy` except that it allows specifying the sort
+ * orders of the iteratees to sort by. If `orders` is unspecified, all values
+ * are sorted in ascending order. Otherwise, specify an order of "desc" for
+ * descending or "asc" for ascending sort order of corresponding values.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
+ * The iteratees to sort by.
+ * @param {string[]} [orders] The sort orders of `iteratees`.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
+ * @returns {Array} Returns the new sorted array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'fred', 'age': 48 },
+ * { 'user': 'barney', 'age': 34 },
+ * { 'user': 'fred', 'age': 40 },
+ * { 'user': 'barney', 'age': 36 }
+ * ];
+ *
+ * // Sort by `user` in ascending order and by `age` in descending order.
+ * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
+ */
+
+
+ function orderBy(collection, iteratees, orders, guard) {
+ if (collection == null) {
+ return [];
+ }
+
+ if (!isArray(iteratees)) {
+ iteratees = iteratees == null ? [] : [iteratees];
+ }
+
+ orders = guard ? undefined$1 : orders;
+
+ if (!isArray(orders)) {
+ orders = orders == null ? [] : [orders];
+ }
+
+ return baseOrderBy(collection, iteratees, orders);
+ }
+ /**
+ * Creates an array of elements split into two groups, the first of which
+ * contains elements `predicate` returns truthy for, the second of which
+ * contains elements `predicate` returns falsey for. The predicate is
+ * invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the array of grouped elements.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false },
+ * { 'user': 'fred', 'age': 40, 'active': true },
+ * { 'user': 'pebbles', 'age': 1, 'active': false }
+ * ];
+ *
+ * _.partition(users, function(o) { return o.active; });
+ * // => objects for [['fred'], ['barney', 'pebbles']]
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.partition(users, { 'age': 1, 'active': false });
+ * // => objects for [['pebbles'], ['barney', 'fred']]
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.partition(users, ['active', false]);
+ * // => objects for [['barney', 'pebbles'], ['fred']]
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.partition(users, 'active');
+ * // => objects for [['fred'], ['barney', 'pebbles']]
+ */
+
+
+ var partition = createAggregator(function (result, value, key) {
+ result[key ? 0 : 1].push(value);
+ }, function () {
+ return [[], []];
+ });
+ /**
+ * Reduces `collection` to a value which is the accumulated result of running
+ * each element in `collection` thru `iteratee`, where each successive
+ * invocation is supplied the return value of the previous. If `accumulator`
+ * is not given, the first element of `collection` is used as the initial
+ * value. The iteratee is invoked with four arguments:
+ * (accumulator, value, index|key, collection).
+ *
+ * Many lodash methods are guarded to work as iteratees for methods like
+ * `_.reduce`, `_.reduceRight`, and `_.transform`.
+ *
+ * The guarded methods are:
+ * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
+ * and `sortBy`
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @returns {*} Returns the accumulated value.
+ * @see _.reduceRight
+ * @example
+ *
+ * _.reduce([1, 2], function(sum, n) {
+ * return sum + n;
+ * }, 0);
+ * // => 3
+ *
+ * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
+ * (result[value] || (result[value] = [])).push(key);
+ * return result;
+ * }, {});
+ * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
+ */
+
+ function reduce(collection, iteratee, accumulator) {
+ var func = isArray(collection) ? arrayReduce : baseReduce,
+ initAccum = arguments.length < 3;
+ return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
+ }
+ /**
+ * This method is like `_.reduce` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @returns {*} Returns the accumulated value.
+ * @see _.reduce
+ * @example
+ *
+ * var array = [[0, 1], [2, 3], [4, 5]];
+ *
+ * _.reduceRight(array, function(flattened, other) {
+ * return flattened.concat(other);
+ * }, []);
+ * // => [4, 5, 2, 3, 0, 1]
+ */
+
+
+ function reduceRight(collection, iteratee, accumulator) {
+ var func = isArray(collection) ? arrayReduceRight : baseReduce,
+ initAccum = arguments.length < 3;
+ return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
+ }
+ /**
+ * The opposite of `_.filter`; this method returns the elements of `collection`
+ * that `predicate` does **not** return truthy for.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ * @see _.filter
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false },
+ * { 'user': 'fred', 'age': 40, 'active': true }
+ * ];
+ *
+ * _.reject(users, function(o) { return !o.active; });
+ * // => objects for ['fred']
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.reject(users, { 'age': 40, 'active': true });
+ * // => objects for ['barney']
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.reject(users, ['active', false]);
+ * // => objects for ['fred']
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.reject(users, 'active');
+ * // => objects for ['barney']
+ */
+
+
+ function reject(collection, predicate) {
+ var func = isArray(collection) ? arrayFilter : baseFilter;
+ return func(collection, negate(getIteratee(predicate, 3)));
+ }
+ /**
+ * Gets a random element from `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to sample.
+ * @returns {*} Returns the random element.
+ * @example
+ *
+ * _.sample([1, 2, 3, 4]);
+ * // => 2
+ */
+
+
+ function sample(collection) {
+ var func = isArray(collection) ? arraySample : baseSample;
+ return func(collection);
+ }
+ /**
+ * Gets `n` random elements at unique keys from `collection` up to the
+ * size of `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to sample.
+ * @param {number} [n=1] The number of elements to sample.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Array} Returns the random elements.
+ * @example
+ *
+ * _.sampleSize([1, 2, 3], 2);
+ * // => [3, 1]
+ *
+ * _.sampleSize([1, 2, 3], 4);
+ * // => [2, 3, 1]
+ */
+
+
+ function sampleSize(collection, n, guard) {
+ if (guard ? isIterateeCall(collection, n, guard) : n === undefined$1) {
+ n = 1;
+ } else {
+ n = toInteger(n);
+ }
+
+ var func = isArray(collection) ? arraySampleSize : baseSampleSize;
+ return func(collection, n);
+ }
+ /**
+ * Creates an array of shuffled values, using a version of the
+ * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to shuffle.
+ * @returns {Array} Returns the new shuffled array.
+ * @example
+ *
+ * _.shuffle([1, 2, 3, 4]);
+ * // => [4, 1, 3, 2]
+ */
+
+
+ function shuffle(collection) {
+ var func = isArray(collection) ? arrayShuffle : baseShuffle;
+ return func(collection);
+ }
+ /**
+ * Gets the size of `collection` by returning its length for array-like
+ * values or the number of own enumerable string keyed properties for objects.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to inspect.
+ * @returns {number} Returns the collection size.
+ * @example
+ *
+ * _.size([1, 2, 3]);
+ * // => 3
+ *
+ * _.size({ 'a': 1, 'b': 2 });
+ * // => 2
+ *
+ * _.size('pebbles');
+ * // => 7
+ */
+
+
+ function size(collection) {
+ if (collection == null) {
+ return 0;
+ }
+
+ if (isArrayLike(collection)) {
+ return isString(collection) ? stringSize(collection) : collection.length;
+ }
+
+ var tag = getTag(collection);
+
+ if (tag == mapTag || tag == setTag) {
+ return collection.size;
+ }
+
+ return baseKeys(collection).length;
+ }
+ /**
+ * Checks if `predicate` returns truthy for **any** element of `collection`.
+ * Iteration is stopped once `predicate` returns truthy. The predicate is
+ * invoked with three arguments: (value, index|key, collection).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ * @example
+ *
+ * _.some([null, 0, 'yes', false], Boolean);
+ * // => true
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false }
+ * ];
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.some(users, { 'user': 'barney', 'active': false });
+ * // => false
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.some(users, ['active', false]);
+ * // => true
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.some(users, 'active');
+ * // => true
+ */
+
+
+ function some(collection, predicate, guard) {
+ var func = isArray(collection) ? arraySome : baseSome;
+
+ if (guard && isIterateeCall(collection, predicate, guard)) {
+ predicate = undefined$1;
+ }
+
+ return func(collection, getIteratee(predicate, 3));
+ }
+ /**
+ * Creates an array of elements, sorted in ascending order by the results of
+ * running each element in a collection thru each iteratee. This method
+ * performs a stable sort, that is, it preserves the original sort order of
+ * equal elements. The iteratees are invoked with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Collection
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {...(Function|Function[])} [iteratees=[_.identity]]
+ * The iteratees to sort by.
+ * @returns {Array} Returns the new sorted array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'fred', 'age': 48 },
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 30 },
+ * { 'user': 'barney', 'age': 34 }
+ * ];
+ *
+ * _.sortBy(users, [function(o) { return o.user; }]);
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
+ *
+ * _.sortBy(users, ['user', 'age']);
+ * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
+ */
+
+
+ var sortBy = baseRest(function (collection, iteratees) {
+ if (collection == null) {
+ return [];
+ }
+
+ var length = iteratees.length;
+
+ if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
+ iteratees = [];
+ } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
+ iteratees = [iteratees[0]];
+ }
+
+ return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
+ });
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Gets the timestamp of the number of milliseconds that have elapsed since
+ * the Unix epoch (1 January 1970 00:00:00 UTC).
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Date
+ * @returns {number} Returns the timestamp.
+ * @example
+ *
+ * _.defer(function(stamp) {
+ * console.log(_.now() - stamp);
+ * }, _.now());
+ * // => Logs the number of milliseconds it took for the deferred invocation.
+ */
+
+ var now = ctxNow || function () {
+ return root.Date.now();
+ };
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * The opposite of `_.before`; this method creates a function that invokes
+ * `func` once it's called `n` or more times.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {number} n The number of calls before `func` is invoked.
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var saves = ['profile', 'settings'];
+ *
+ * var done = _.after(saves.length, function() {
+ * console.log('done saving!');
+ * });
+ *
+ * _.forEach(saves, function(type) {
+ * asyncSave({ 'type': type, 'complete': done });
+ * });
+ * // => Logs 'done saving!' after the two async saves have completed.
+ */
+
+
+ function after(n, func) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ n = toInteger(n);
+ return function () {
+ if (--n < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ }
+ /**
+ * Creates a function that invokes `func`, with up to `n` arguments,
+ * ignoring any additional arguments.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Function
+ * @param {Function} func The function to cap arguments for.
+ * @param {number} [n=func.length] The arity cap.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Function} Returns the new capped function.
+ * @example
+ *
+ * _.map(['6', '8', '10'], _.ary(parseInt, 1));
+ * // => [6, 8, 10]
+ */
+
+
+ function ary(func, n, guard) {
+ n = guard ? undefined$1 : n;
+ n = func && n == null ? func.length : n;
+ return createWrap(func, WRAP_ARY_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, n);
+ }
+ /**
+ * Creates a function that invokes `func`, with the `this` binding and arguments
+ * of the created function, while it's called less than `n` times. Subsequent
+ * calls to the created function return the result of the last `func` invocation.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Function
+ * @param {number} n The number of calls at which `func` is no longer invoked.
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * jQuery(element).on('click', _.before(5, addContactToList));
+ * // => Allows adding up to 4 contacts to the list.
+ */
+
+
+ function before(n, func) {
+ var result;
+
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ n = toInteger(n);
+ return function () {
+ if (--n > 0) {
+ result = func.apply(this, arguments);
+ }
+
+ if (n <= 1) {
+ func = undefined$1;
+ }
+
+ return result;
+ };
+ }
+ /**
+ * Creates a function that invokes `func` with the `this` binding of `thisArg`
+ * and `partials` prepended to the arguments it receives.
+ *
+ * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
+ * may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
+ * property of bound functions.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to bind.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * function greet(greeting, punctuation) {
+ * return greeting + ' ' + this.user + punctuation;
+ * }
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * var bound = _.bind(greet, object, 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * // Bound with placeholders.
+ * var bound = _.bind(greet, object, _, '!');
+ * bound('hi');
+ * // => 'hi fred!'
+ */
+
+
+ var bind = baseRest(function (func, thisArg, partials) {
+ var bitmask = WRAP_BIND_FLAG;
+
+ if (partials.length) {
+ var holders = replaceHolders(partials, getHolder(bind));
+ bitmask |= WRAP_PARTIAL_FLAG;
+ }
+
+ return createWrap(func, bitmask, thisArg, partials, holders);
+ });
+ /**
+ * Creates a function that invokes the method at `object[key]` with `partials`
+ * prepended to the arguments it receives.
+ *
+ * This method differs from `_.bind` by allowing bound functions to reference
+ * methods that may be redefined or don't yet exist. See
+ * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
+ * for more details.
+ *
+ * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.10.0
+ * @category Function
+ * @param {Object} object The object to invoke the method on.
+ * @param {string} key The key of the method.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * var object = {
+ * 'user': 'fred',
+ * 'greet': function(greeting, punctuation) {
+ * return greeting + ' ' + this.user + punctuation;
+ * }
+ * };
+ *
+ * var bound = _.bindKey(object, 'greet', 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * object.greet = function(greeting, punctuation) {
+ * return greeting + 'ya ' + this.user + punctuation;
+ * };
+ *
+ * bound('!');
+ * // => 'hiya fred!'
+ *
+ * // Bound with placeholders.
+ * var bound = _.bindKey(object, 'greet', _, '!');
+ * bound('hi');
+ * // => 'hiya fred!'
+ */
+
+ var bindKey = baseRest(function (object, key, partials) {
+ var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
+
+ if (partials.length) {
+ var holders = replaceHolders(partials, getHolder(bindKey));
+ bitmask |= WRAP_PARTIAL_FLAG;
+ }
+
+ return createWrap(key, bitmask, object, partials, holders);
+ });
+ /**
+ * Creates a function that accepts arguments of `func` and either invokes
+ * `func` returning its result, if at least `arity` number of arguments have
+ * been provided, or returns a function that accepts the remaining `func`
+ * arguments, and so on. The arity of `func` may be specified if `func.length`
+ * is not sufficient.
+ *
+ * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
+ * may be used as a placeholder for provided arguments.
+ *
+ * **Note:** This method doesn't set the "length" property of curried functions.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Function
+ * @param {Function} func The function to curry.
+ * @param {number} [arity=func.length] The arity of `func`.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Function} Returns the new curried function.
+ * @example
+ *
+ * var abc = function(a, b, c) {
+ * return [a, b, c];
+ * };
+ *
+ * var curried = _.curry(abc);
+ *
+ * curried(1)(2)(3);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2)(3);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2, 3);
+ * // => [1, 2, 3]
+ *
+ * // Curried with placeholders.
+ * curried(1)(_, 3)(2);
+ * // => [1, 2, 3]
+ */
+
+ function curry(func, arity, guard) {
+ arity = guard ? undefined$1 : arity;
+ var result = createWrap(func, WRAP_CURRY_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, undefined$1, arity);
+ result.placeholder = curry.placeholder;
+ return result;
+ }
+ /**
+ * This method is like `_.curry` except that arguments are applied to `func`
+ * in the manner of `_.partialRight` instead of `_.partial`.
+ *
+ * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for provided arguments.
+ *
+ * **Note:** This method doesn't set the "length" property of curried functions.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Function
+ * @param {Function} func The function to curry.
+ * @param {number} [arity=func.length] The arity of `func`.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Function} Returns the new curried function.
+ * @example
+ *
+ * var abc = function(a, b, c) {
+ * return [a, b, c];
+ * };
+ *
+ * var curried = _.curryRight(abc);
+ *
+ * curried(3)(2)(1);
+ * // => [1, 2, 3]
+ *
+ * curried(2, 3)(1);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2, 3);
+ * // => [1, 2, 3]
+ *
+ * // Curried with placeholders.
+ * curried(3)(1, _)(2);
+ * // => [1, 2, 3]
+ */
+
+
+ function curryRight(func, arity, guard) {
+ arity = guard ? undefined$1 : arity;
+ var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, undefined$1, arity);
+ result.placeholder = curryRight.placeholder;
+ return result;
+ }
+ /**
+ * Creates a debounced function that delays invoking `func` until after `wait`
+ * milliseconds have elapsed since the last time the debounced function was
+ * invoked. The debounced function comes with a `cancel` method to cancel
+ * delayed `func` invocations and a `flush` method to immediately invoke them.
+ * Provide `options` to indicate whether `func` should be invoked on the
+ * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
+ * with the last arguments provided to the debounced function. Subsequent
+ * calls to the debounced function return the result of the last `func`
+ * invocation.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is
+ * invoked on the trailing edge of the timeout only if the debounced function
+ * is invoked more than once during the `wait` timeout.
+ *
+ * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
+ * until to the next tick, similar to `setTimeout` with a timeout of `0`.
+ *
+ * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
+ * for details over the differences between `_.debounce` and `_.throttle`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to debounce.
+ * @param {number} [wait=0] The number of milliseconds to delay.
+ * @param {Object} [options={}] The options object.
+ * @param {boolean} [options.leading=false]
+ * Specify invoking on the leading edge of the timeout.
+ * @param {number} [options.maxWait]
+ * The maximum time `func` is allowed to be delayed before it's invoked.
+ * @param {boolean} [options.trailing=true]
+ * Specify invoking on the trailing edge of the timeout.
+ * @returns {Function} Returns the new debounced function.
+ * @example
+ *
+ * // Avoid costly calculations while the window size is in flux.
+ * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
+ *
+ * // Invoke `sendMail` when clicked, debouncing subsequent calls.
+ * jQuery(element).on('click', _.debounce(sendMail, 300, {
+ * 'leading': true,
+ * 'trailing': false
+ * }));
+ *
+ * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
+ * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
+ * var source = new EventSource('/stream');
+ * jQuery(source).on('message', debounced);
+ *
+ * // Cancel the trailing debounced invocation.
+ * jQuery(window).on('popstate', debounced.cancel);
+ */
+
+
+ function debounce(func, wait, options) {
+ var lastArgs,
+ lastThis,
+ maxWait,
+ result,
+ timerId,
+ lastCallTime,
+ lastInvokeTime = 0,
+ leading = false,
+ maxing = false,
+ trailing = true;
+
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ wait = toNumber(wait) || 0;
+
+ if (isObject(options)) {
+ leading = !!options.leading;
+ maxing = 'maxWait' in options;
+ maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
+ }
+
+ function invokeFunc(time) {
+ var args = lastArgs,
+ thisArg = lastThis;
+ lastArgs = lastThis = undefined$1;
+ lastInvokeTime = time;
+ result = func.apply(thisArg, args);
+ return result;
+ }
+
+ function leadingEdge(time) {
+ // Reset any `maxWait` timer.
+ lastInvokeTime = time; // Start the timer for the trailing edge.
+
+ timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.
+
+ return leading ? invokeFunc(time) : result;
+ }
+
+ function remainingWait(time) {
+ var timeSinceLastCall = time - lastCallTime,
+ timeSinceLastInvoke = time - lastInvokeTime,
+ timeWaiting = wait - timeSinceLastCall;
+ return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
+ }
+
+ function shouldInvoke(time) {
+ var timeSinceLastCall = time - lastCallTime,
+ timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the
+ // trailing edge, the system time has gone backwards and we're treating
+ // it as the trailing edge, or we've hit the `maxWait` limit.
+
+ return lastCallTime === undefined$1 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
+ }
+
+ function timerExpired() {
+ var time = now();
+
+ if (shouldInvoke(time)) {
+ return trailingEdge(time);
+ } // Restart the timer.
+
+
+ timerId = setTimeout(timerExpired, remainingWait(time));
+ }
+
+ function trailingEdge(time) {
+ timerId = undefined$1; // Only invoke if we have `lastArgs` which means `func` has been
+ // debounced at least once.
+
+ if (trailing && lastArgs) {
+ return invokeFunc(time);
+ }
+
+ lastArgs = lastThis = undefined$1;
+ return result;
+ }
+
+ function cancel() {
+ if (timerId !== undefined$1) {
+ clearTimeout(timerId);
+ }
+
+ lastInvokeTime = 0;
+ lastArgs = lastCallTime = lastThis = timerId = undefined$1;
+ }
+
+ function flush() {
+ return timerId === undefined$1 ? result : trailingEdge(now());
+ }
+
+ function debounced() {
+ var time = now(),
+ isInvoking = shouldInvoke(time);
+ lastArgs = arguments;
+ lastThis = this;
+ lastCallTime = time;
+
+ if (isInvoking) {
+ if (timerId === undefined$1) {
+ return leadingEdge(lastCallTime);
+ }
+
+ if (maxing) {
+ // Handle invocations in a tight loop.
+ clearTimeout(timerId);
+ timerId = setTimeout(timerExpired, wait);
+ return invokeFunc(lastCallTime);
+ }
+ }
+
+ if (timerId === undefined$1) {
+ timerId = setTimeout(timerExpired, wait);
+ }
+
+ return result;
+ }
+
+ debounced.cancel = cancel;
+ debounced.flush = flush;
+ return debounced;
+ }
+ /**
+ * Defers invoking the `func` until the current call stack has cleared. Any
+ * additional arguments are provided to `func` when it's invoked.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to defer.
+ * @param {...*} [args] The arguments to invoke `func` with.
+ * @returns {number} Returns the timer id.
+ * @example
+ *
+ * _.defer(function(text) {
+ * console.log(text);
+ * }, 'deferred');
+ * // => Logs 'deferred' after one millisecond.
+ */
+
+
+ var defer = baseRest(function (func, args) {
+ return baseDelay(func, 1, args);
+ });
+ /**
+ * Invokes `func` after `wait` milliseconds. Any additional arguments are
+ * provided to `func` when it's invoked.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to delay.
+ * @param {number} wait The number of milliseconds to delay invocation.
+ * @param {...*} [args] The arguments to invoke `func` with.
+ * @returns {number} Returns the timer id.
+ * @example
+ *
+ * _.delay(function(text) {
+ * console.log(text);
+ * }, 1000, 'later');
+ * // => Logs 'later' after one second.
+ */
+
+ var delay = baseRest(function (func, wait, args) {
+ return baseDelay(func, toNumber(wait) || 0, args);
+ });
+ /**
+ * Creates a function that invokes `func` with arguments reversed.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Function
+ * @param {Function} func The function to flip arguments for.
+ * @returns {Function} Returns the new flipped function.
+ * @example
+ *
+ * var flipped = _.flip(function() {
+ * return _.toArray(arguments);
+ * });
+ *
+ * flipped('a', 'b', 'c', 'd');
+ * // => ['d', 'c', 'b', 'a']
+ */
+
+ function flip(func) {
+ return createWrap(func, WRAP_FLIP_FLAG);
+ }
+ /**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided, it determines the cache key for storing the result based on the
+ * arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is used as the map cache key. The `func`
+ * is invoked with the `this` binding of the memoized function.
+ *
+ * **Note:** The cache is exposed as the `cache` property on the memoized
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
+ * constructor with one whose instances implement the
+ * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
+ * method interface of `clear`, `delete`, `get`, `has`, and `set`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @returns {Function} Returns the new memoized function.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ * var other = { 'c': 3, 'd': 4 };
+ *
+ * var values = _.memoize(_.values);
+ * values(object);
+ * // => [1, 2]
+ *
+ * values(other);
+ * // => [3, 4]
+ *
+ * object.a = 2;
+ * values(object);
+ * // => [1, 2]
+ *
+ * // Modify the result cache.
+ * values.cache.set(object, ['a', 'b']);
+ * values(object);
+ * // => ['a', 'b']
+ *
+ * // Replace `_.memoize.Cache`.
+ * _.memoize.Cache = WeakMap;
+ */
+
+
+ function memoize(func, resolver) {
+ if (typeof func != 'function' || resolver != null && typeof resolver != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ var memoized = function memoized() {
+ var args = arguments,
+ key = resolver ? resolver.apply(this, args) : args[0],
+ cache = memoized.cache;
+
+ if (cache.has(key)) {
+ return cache.get(key);
+ }
+
+ var result = func.apply(this, args);
+ memoized.cache = cache.set(key, result) || cache;
+ return result;
+ };
+
+ memoized.cache = new (memoize.Cache || MapCache)();
+ return memoized;
+ } // Expose `MapCache`.
+
+
+ memoize.Cache = MapCache;
+ /**
+ * Creates a function that negates the result of the predicate `func`. The
+ * `func` predicate is invoked with the `this` binding and arguments of the
+ * created function.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Function
+ * @param {Function} predicate The predicate to negate.
+ * @returns {Function} Returns the new negated function.
+ * @example
+ *
+ * function isEven(n) {
+ * return n % 2 == 0;
+ * }
+ *
+ * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
+ * // => [1, 3, 5]
+ */
+
+ function negate(predicate) {
+ if (typeof predicate != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ return function () {
+ var args = arguments;
+
+ switch (args.length) {
+ case 0:
+ return !predicate.call(this);
+
+ case 1:
+ return !predicate.call(this, args[0]);
+
+ case 2:
+ return !predicate.call(this, args[0], args[1]);
+
+ case 3:
+ return !predicate.call(this, args[0], args[1], args[2]);
+ }
+
+ return !predicate.apply(this, args);
+ };
+ }
+ /**
+ * Creates a function that is restricted to invoking `func` once. Repeat calls
+ * to the function return the value of the first invocation. The `func` is
+ * invoked with the `this` binding and arguments of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var initialize = _.once(createApplication);
+ * initialize();
+ * initialize();
+ * // => `createApplication` is invoked once
+ */
+
+
+ function once(func) {
+ return before(2, func);
+ }
+ /**
+ * Creates a function that invokes `func` with its arguments transformed.
+ *
+ * @static
+ * @since 4.0.0
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to wrap.
+ * @param {...(Function|Function[])} [transforms=[_.identity]]
+ * The argument transforms.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * function doubled(n) {
+ * return n * 2;
+ * }
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var func = _.overArgs(function(x, y) {
+ * return [x, y];
+ * }, [square, doubled]);
+ *
+ * func(9, 3);
+ * // => [81, 6]
+ *
+ * func(10, 5);
+ * // => [100, 10]
+ */
+
+
+ var overArgs = castRest(function (func, transforms) {
+ transforms = transforms.length == 1 && isArray(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
+ var funcsLength = transforms.length;
+ return baseRest(function (args) {
+ var index = -1,
+ length = nativeMin(args.length, funcsLength);
+
+ while (++index < length) {
+ args[index] = transforms[index].call(this, args[index]);
+ }
+
+ return apply(func, this, args);
+ });
+ });
+ /**
+ * Creates a function that invokes `func` with `partials` prepended to the
+ * arguments it receives. This method is like `_.bind` except it does **not**
+ * alter the `this` binding.
+ *
+ * The `_.partial.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** This method doesn't set the "length" property of partially
+ * applied functions.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.2.0
+ * @category Function
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * function greet(greeting, name) {
+ * return greeting + ' ' + name;
+ * }
+ *
+ * var sayHelloTo = _.partial(greet, 'hello');
+ * sayHelloTo('fred');
+ * // => 'hello fred'
+ *
+ * // Partially applied with placeholders.
+ * var greetFred = _.partial(greet, _, 'fred');
+ * greetFred('hi');
+ * // => 'hi fred'
+ */
+
+ var partial = baseRest(function (func, partials) {
+ var holders = replaceHolders(partials, getHolder(partial));
+ return createWrap(func, WRAP_PARTIAL_FLAG, undefined$1, partials, holders);
+ });
+ /**
+ * This method is like `_.partial` except that partially applied arguments
+ * are appended to the arguments it receives.
+ *
+ * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** This method doesn't set the "length" property of partially
+ * applied functions.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.0.0
+ * @category Function
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * function greet(greeting, name) {
+ * return greeting + ' ' + name;
+ * }
+ *
+ * var greetFred = _.partialRight(greet, 'fred');
+ * greetFred('hi');
+ * // => 'hi fred'
+ *
+ * // Partially applied with placeholders.
+ * var sayHelloTo = _.partialRight(greet, 'hello', _);
+ * sayHelloTo('fred');
+ * // => 'hello fred'
+ */
+
+ var partialRight = baseRest(function (func, partials) {
+ var holders = replaceHolders(partials, getHolder(partialRight));
+ return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined$1, partials, holders);
+ });
+ /**
+ * Creates a function that invokes `func` with arguments arranged according
+ * to the specified `indexes` where the argument value at the first index is
+ * provided as the first argument, the argument value at the second index is
+ * provided as the second argument, and so on.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Function
+ * @param {Function} func The function to rearrange arguments for.
+ * @param {...(number|number[])} indexes The arranged argument indexes.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var rearged = _.rearg(function(a, b, c) {
+ * return [a, b, c];
+ * }, [2, 0, 1]);
+ *
+ * rearged('b', 'c', 'a')
+ * // => ['a', 'b', 'c']
+ */
+
+ var rearg = flatRest(function (func, indexes) {
+ return createWrap(func, WRAP_REARG_FLAG, undefined$1, undefined$1, undefined$1, indexes);
+ });
+ /**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * created function and arguments from `start` and beyond provided as
+ * an array.
+ *
+ * **Note:** This method is based on the
+ * [rest parameter](https://mdn.io/rest_parameters).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Function
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.rest(function(what, names) {
+ * return what + ' ' + _.initial(names).join(', ') +
+ * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+ * });
+ *
+ * say('hello', 'fred', 'barney', 'pebbles');
+ * // => 'hello fred, barney, & pebbles'
+ */
+
+ function rest(func, start) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ start = start === undefined$1 ? start : toInteger(start);
+ return baseRest(func, start);
+ }
+ /**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * create function and an array of arguments much like
+ * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
+ *
+ * **Note:** This method is based on the
+ * [spread operator](https://mdn.io/spread_operator).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.2.0
+ * @category Function
+ * @param {Function} func The function to spread arguments over.
+ * @param {number} [start=0] The start position of the spread.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.spread(function(who, what) {
+ * return who + ' says ' + what;
+ * });
+ *
+ * say(['fred', 'hello']);
+ * // => 'fred says hello'
+ *
+ * var numbers = Promise.all([
+ * Promise.resolve(40),
+ * Promise.resolve(36)
+ * ]);
+ *
+ * numbers.then(_.spread(function(x, y) {
+ * return x + y;
+ * }));
+ * // => a Promise of 76
+ */
+
+
+ function spread(func, start) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ start = start == null ? 0 : nativeMax(toInteger(start), 0);
+ return baseRest(function (args) {
+ var array = args[start],
+ otherArgs = castSlice(args, 0, start);
+
+ if (array) {
+ arrayPush(otherArgs, array);
+ }
+
+ return apply(func, this, otherArgs);
+ });
+ }
+ /**
+ * Creates a throttled function that only invokes `func` at most once per
+ * every `wait` milliseconds. The throttled function comes with a `cancel`
+ * method to cancel delayed `func` invocations and a `flush` method to
+ * immediately invoke them. Provide `options` to indicate whether `func`
+ * should be invoked on the leading and/or trailing edge of the `wait`
+ * timeout. The `func` is invoked with the last arguments provided to the
+ * throttled function. Subsequent calls to the throttled function return the
+ * result of the last `func` invocation.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is
+ * invoked on the trailing edge of the timeout only if the throttled function
+ * is invoked more than once during the `wait` timeout.
+ *
+ * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
+ * until to the next tick, similar to `setTimeout` with a timeout of `0`.
+ *
+ * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
+ * for details over the differences between `_.throttle` and `_.debounce`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to throttle.
+ * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
+ * @param {Object} [options={}] The options object.
+ * @param {boolean} [options.leading=true]
+ * Specify invoking on the leading edge of the timeout.
+ * @param {boolean} [options.trailing=true]
+ * Specify invoking on the trailing edge of the timeout.
+ * @returns {Function} Returns the new throttled function.
+ * @example
+ *
+ * // Avoid excessively updating the position while scrolling.
+ * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
+ *
+ * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
+ * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
+ * jQuery(element).on('click', throttled);
+ *
+ * // Cancel the trailing throttled invocation.
+ * jQuery(window).on('popstate', throttled.cancel);
+ */
+
+
+ function throttle(func, wait, options) {
+ var leading = true,
+ trailing = true;
+
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+
+ if (isObject(options)) {
+ leading = 'leading' in options ? !!options.leading : leading;
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
+ }
+
+ return debounce(func, wait, {
+ 'leading': leading,
+ 'maxWait': wait,
+ 'trailing': trailing
+ });
+ }
+ /**
+ * Creates a function that accepts up to one argument, ignoring any
+ * additional arguments.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Function
+ * @param {Function} func The function to cap arguments for.
+ * @returns {Function} Returns the new capped function.
+ * @example
+ *
+ * _.map(['6', '8', '10'], _.unary(parseInt));
+ * // => [6, 8, 10]
+ */
+
+
+ function unary(func) {
+ return ary(func, 1);
+ }
+ /**
+ * Creates a function that provides `value` to `wrapper` as its first
+ * argument. Any additional arguments provided to the function are appended
+ * to those provided to the `wrapper`. The wrapper is invoked with the `this`
+ * binding of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {*} value The value to wrap.
+ * @param {Function} [wrapper=identity] The wrapper function.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var p = _.wrap(_.escape, function(func, text) {
+ * return '' + func(text) + '
';
+ * });
+ *
+ * p('fred, barney, & pebbles');
+ * // => 'fred, barney, & pebbles
'
+ */
+
+
+ function wrap(value, wrapper) {
+ return partial(castFunction(wrapper), value);
+ }
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Casts `value` as an array if it's not one.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.4.0
+ * @category Lang
+ * @param {*} value The value to inspect.
+ * @returns {Array} Returns the cast array.
+ * @example
+ *
+ * _.castArray(1);
+ * // => [1]
+ *
+ * _.castArray({ 'a': 1 });
+ * // => [{ 'a': 1 }]
+ *
+ * _.castArray('abc');
+ * // => ['abc']
+ *
+ * _.castArray(null);
+ * // => [null]
+ *
+ * _.castArray(undefined);
+ * // => [undefined]
+ *
+ * _.castArray();
+ * // => []
+ *
+ * var array = [1, 2, 3];
+ * console.log(_.castArray(array) === array);
+ * // => true
+ */
+
+
+ function castArray() {
+ if (!arguments.length) {
+ return [];
+ }
+
+ var value = arguments[0];
+ return isArray(value) ? value : [value];
+ }
+ /**
+ * Creates a shallow clone of `value`.
+ *
+ * **Note:** This method is loosely based on the
+ * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
+ * and supports cloning arrays, array buffers, booleans, date objects, maps,
+ * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
+ * arrays. The own enumerable properties of `arguments` objects are cloned
+ * as plain objects. An empty object is returned for uncloneable values such
+ * as error objects, functions, DOM nodes, and WeakMaps.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to clone.
+ * @returns {*} Returns the cloned value.
+ * @see _.cloneDeep
+ * @example
+ *
+ * var objects = [{ 'a': 1 }, { 'b': 2 }];
+ *
+ * var shallow = _.clone(objects);
+ * console.log(shallow[0] === objects[0]);
+ * // => true
+ */
+
+
+ function clone(value) {
+ return baseClone(value, CLONE_SYMBOLS_FLAG);
+ }
+ /**
+ * This method is like `_.clone` except that it accepts `customizer` which
+ * is invoked to produce the cloned value. If `customizer` returns `undefined`,
+ * cloning is handled by the method instead. The `customizer` is invoked with
+ * up to four arguments; (value [, index|key, object, stack]).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to clone.
+ * @param {Function} [customizer] The function to customize cloning.
+ * @returns {*} Returns the cloned value.
+ * @see _.cloneDeepWith
+ * @example
+ *
+ * function customizer(value) {
+ * if (_.isElement(value)) {
+ * return value.cloneNode(false);
+ * }
+ * }
+ *
+ * var el = _.cloneWith(document.body, customizer);
+ *
+ * console.log(el === document.body);
+ * // => false
+ * console.log(el.nodeName);
+ * // => 'BODY'
+ * console.log(el.childNodes.length);
+ * // => 0
+ */
+
+
+ function cloneWith(value, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined$1;
+ return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
+ }
+ /**
+ * This method is like `_.clone` except that it recursively clones `value`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.0.0
+ * @category Lang
+ * @param {*} value The value to recursively clone.
+ * @returns {*} Returns the deep cloned value.
+ * @see _.clone
+ * @example
+ *
+ * var objects = [{ 'a': 1 }, { 'b': 2 }];
+ *
+ * var deep = _.cloneDeep(objects);
+ * console.log(deep[0] === objects[0]);
+ * // => false
+ */
+
+
+ function cloneDeep(value) {
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
+ }
+ /**
+ * This method is like `_.cloneWith` except that it recursively clones `value`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to recursively clone.
+ * @param {Function} [customizer] The function to customize cloning.
+ * @returns {*} Returns the deep cloned value.
+ * @see _.cloneWith
+ * @example
+ *
+ * function customizer(value) {
+ * if (_.isElement(value)) {
+ * return value.cloneNode(true);
+ * }
+ * }
+ *
+ * var el = _.cloneDeepWith(document.body, customizer);
+ *
+ * console.log(el === document.body);
+ * // => false
+ * console.log(el.nodeName);
+ * // => 'BODY'
+ * console.log(el.childNodes.length);
+ * // => 20
+ */
+
+
+ function cloneDeepWith(value, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined$1;
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
+ }
+ /**
+ * Checks if `object` conforms to `source` by invoking the predicate
+ * properties of `source` with the corresponding property values of `object`.
+ *
+ * **Note:** This method is equivalent to `_.conforms` when `source` is
+ * partially applied.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.14.0
+ * @category Lang
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property predicates to conform to.
+ * @returns {boolean} Returns `true` if `object` conforms, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ *
+ * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
+ * // => true
+ *
+ * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
+ * // => false
+ */
+
+
+ function conformsTo(object, source) {
+ return source == null || baseConformsTo(object, source, keys(source));
+ }
+ /**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+
+
+ function eq(value, other) {
+ return value === other || value !== value && other !== other;
+ }
+ /**
+ * Checks if `value` is greater than `other`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.9.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is greater than `other`,
+ * else `false`.
+ * @see _.lt
+ * @example
+ *
+ * _.gt(3, 1);
+ * // => true
+ *
+ * _.gt(3, 3);
+ * // => false
+ *
+ * _.gt(1, 3);
+ * // => false
+ */
+
+
+ var gt = createRelationalOperation(baseGt);
+ /**
+ * Checks if `value` is greater than or equal to `other`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.9.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is greater than or equal to
+ * `other`, else `false`.
+ * @see _.lte
+ * @example
+ *
+ * _.gte(3, 1);
+ * // => true
+ *
+ * _.gte(3, 3);
+ * // => true
+ *
+ * _.gte(1, 3);
+ * // => false
+ */
+
+ var gte = createRelationalOperation(function (value, other) {
+ return value >= other;
+ });
+ /**
+ * Checks if `value` is likely an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+
+ var isArguments = baseIsArguments(function () {
+ return arguments;
+ }()) ? baseIsArguments : function (value) {
+ return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
+ };
+ /**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+
+ var isArray = Array.isArray;
+ /**
+ * Checks if `value` is classified as an `ArrayBuffer` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
+ * @example
+ *
+ * _.isArrayBuffer(new ArrayBuffer(2));
+ * // => true
+ *
+ * _.isArrayBuffer(new Array(2));
+ * // => false
+ */
+
+ var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
+ /**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+
+ function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+ }
+ /**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
+ * else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+
+
+ function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+ }
+ /**
+ * Checks if `value` is classified as a boolean primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
+ * @example
+ *
+ * _.isBoolean(false);
+ * // => true
+ *
+ * _.isBoolean(null);
+ * // => false
+ */
+
+
+ function isBoolean(value) {
+ return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag;
+ }
+ /**
+ * Checks if `value` is a buffer.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
+ * @example
+ *
+ * _.isBuffer(new Buffer(2));
+ * // => true
+ *
+ * _.isBuffer(new Uint8Array(2));
+ * // => false
+ */
+
+
+ var isBuffer = nativeIsBuffer || stubFalse;
+ /**
+ * Checks if `value` is classified as a `Date` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
+ * @example
+ *
+ * _.isDate(new Date);
+ * // => true
+ *
+ * _.isDate('Mon April 23 2012');
+ * // => false
+ */
+
+ var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
+ /**
+ * Checks if `value` is likely a DOM element.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
+ * @example
+ *
+ * _.isElement(document.body);
+ * // => true
+ *
+ * _.isElement('');
+ * // => false
+ */
+
+ function isElement(value) {
+ return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
+ }
+ /**
+ * Checks if `value` is an empty object, collection, map, or set.
+ *
+ * Objects are considered empty if they have no own enumerable string keyed
+ * properties.
+ *
+ * Array-like values such as `arguments` objects, arrays, buffers, strings, or
+ * jQuery-like collections are considered empty if they have a `length` of `0`.
+ * Similarly, maps and sets are considered empty if they have a `size` of `0`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is empty, else `false`.
+ * @example
+ *
+ * _.isEmpty(null);
+ * // => true
+ *
+ * _.isEmpty(true);
+ * // => true
+ *
+ * _.isEmpty(1);
+ * // => true
+ *
+ * _.isEmpty([1, 2, 3]);
+ * // => false
+ *
+ * _.isEmpty({ 'a': 1 });
+ * // => false
+ */
+
+
+ function isEmpty(value) {
+ if (value == null) {
+ return true;
+ }
+
+ if (isArrayLike(value) && (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || isBuffer(value) || isTypedArray(value) || isArguments(value))) {
+ return !value.length;
+ }
+
+ var tag = getTag(value);
+
+ if (tag == mapTag || tag == setTag) {
+ return !value.size;
+ }
+
+ if (isPrototype(value)) {
+ return !baseKeys(value).length;
+ }
+
+ for (var key in value) {
+ if (hasOwnProperty.call(value, key)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ /**
+ * Performs a deep comparison between two values to determine if they are
+ * equivalent.
+ *
+ * **Note:** This method supports comparing arrays, array buffers, booleans,
+ * date objects, error objects, maps, numbers, `Object` objects, regexes,
+ * sets, strings, symbols, and typed arrays. `Object` objects are compared
+ * by their own, not inherited, enumerable properties. Functions and DOM
+ * nodes are compared by strict equality, i.e. `===`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.isEqual(object, other);
+ * // => true
+ *
+ * object === other;
+ * // => false
+ */
+
+
+ function isEqual(value, other) {
+ return baseIsEqual(value, other);
+ }
+ /**
+ * This method is like `_.isEqual` except that it accepts `customizer` which
+ * is invoked to compare values. If `customizer` returns `undefined`, comparisons
+ * are handled by the method instead. The `customizer` is invoked with up to
+ * six arguments: (objValue, othValue [, index|key, object, other, stack]).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * function isGreeting(value) {
+ * return /^h(?:i|ello)$/.test(value);
+ * }
+ *
+ * function customizer(objValue, othValue) {
+ * if (isGreeting(objValue) && isGreeting(othValue)) {
+ * return true;
+ * }
+ * }
+ *
+ * var array = ['hello', 'goodbye'];
+ * var other = ['hi', 'goodbye'];
+ *
+ * _.isEqualWith(array, other, customizer);
+ * // => true
+ */
+
+
+ function isEqualWith(value, other, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined$1;
+ var result = customizer ? customizer(value, other) : undefined$1;
+ return result === undefined$1 ? baseIsEqual(value, other, undefined$1, customizer) : !!result;
+ }
+ /**
+ * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
+ * `SyntaxError`, `TypeError`, or `URIError` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
+ * @example
+ *
+ * _.isError(new Error);
+ * // => true
+ *
+ * _.isError(Error);
+ * // => false
+ */
+
+
+ function isError(value) {
+ if (!isObjectLike(value)) {
+ return false;
+ }
+
+ var tag = baseGetTag(value);
+ return tag == errorTag || tag == domExcTag || typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value);
+ }
+ /**
+ * Checks if `value` is a finite primitive number.
+ *
+ * **Note:** This method is based on
+ * [`Number.isFinite`](https://mdn.io/Number/isFinite).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
+ * @example
+ *
+ * _.isFinite(3);
+ * // => true
+ *
+ * _.isFinite(Number.MIN_VALUE);
+ * // => true
+ *
+ * _.isFinite(Infinity);
+ * // => false
+ *
+ * _.isFinite('3');
+ * // => false
+ */
+
+
+ function isFinite(value) {
+ return typeof value == 'number' && nativeIsFinite(value);
+ }
+ /**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+
+
+ function isFunction(value) {
+ if (!isObject(value)) {
+ return false;
+ } // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 9 which returns 'object' for typed arrays and other constructors.
+
+
+ var tag = baseGetTag(value);
+ return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
+ }
+ /**
+ * Checks if `value` is an integer.
+ *
+ * **Note:** This method is based on
+ * [`Number.isInteger`](https://mdn.io/Number/isInteger).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
+ * @example
+ *
+ * _.isInteger(3);
+ * // => true
+ *
+ * _.isInteger(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isInteger(Infinity);
+ * // => false
+ *
+ * _.isInteger('3');
+ * // => false
+ */
+
+
+ function isInteger(value) {
+ return typeof value == 'number' && value == toInteger(value);
+ }
+ /**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+
+
+ function isLength(value) {
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+ }
+ /**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+
+
+ function isObject(value) {
+ var type = _typeof(value);
+
+ return value != null && (type == 'object' || type == 'function');
+ }
+ /**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+
+
+ function isObjectLike(value) {
+ return value != null && _typeof(value) == 'object';
+ }
+ /**
+ * Checks if `value` is classified as a `Map` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a map, else `false`.
+ * @example
+ *
+ * _.isMap(new Map);
+ * // => true
+ *
+ * _.isMap(new WeakMap);
+ * // => false
+ */
+
+
+ var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
+ /**
+ * Performs a partial deep comparison between `object` and `source` to
+ * determine if `object` contains equivalent property values.
+ *
+ * **Note:** This method is equivalent to `_.matches` when `source` is
+ * partially applied.
+ *
+ * Partial comparisons will match empty array and empty object `source`
+ * values against any array or object value, respectively. See `_.isEqual`
+ * for a list of supported value comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property values to match.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ *
+ * _.isMatch(object, { 'b': 2 });
+ * // => true
+ *
+ * _.isMatch(object, { 'b': 1 });
+ * // => false
+ */
+
+ function isMatch(object, source) {
+ return object === source || baseIsMatch(object, source, getMatchData(source));
+ }
+ /**
+ * This method is like `_.isMatch` except that it accepts `customizer` which
+ * is invoked to compare values. If `customizer` returns `undefined`, comparisons
+ * are handled by the method instead. The `customizer` is invoked with five
+ * arguments: (objValue, srcValue, index|key, object, source).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property values to match.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ * @example
+ *
+ * function isGreeting(value) {
+ * return /^h(?:i|ello)$/.test(value);
+ * }
+ *
+ * function customizer(objValue, srcValue) {
+ * if (isGreeting(objValue) && isGreeting(srcValue)) {
+ * return true;
+ * }
+ * }
+ *
+ * var object = { 'greeting': 'hello' };
+ * var source = { 'greeting': 'hi' };
+ *
+ * _.isMatchWith(object, source, customizer);
+ * // => true
+ */
+
+
+ function isMatchWith(object, source, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined$1;
+ return baseIsMatch(object, source, getMatchData(source), customizer);
+ }
+ /**
+ * Checks if `value` is `NaN`.
+ *
+ * **Note:** This method is based on
+ * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
+ * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
+ * `undefined` and other non-number values.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
+ * @example
+ *
+ * _.isNaN(NaN);
+ * // => true
+ *
+ * _.isNaN(new Number(NaN));
+ * // => true
+ *
+ * isNaN(undefined);
+ * // => true
+ *
+ * _.isNaN(undefined);
+ * // => false
+ */
+
+
+ function isNaN(value) {
+ // An `NaN` primitive is the only value that is not equal to itself.
+ // Perform the `toStringTag` check first to avoid errors with some
+ // ActiveX objects in IE.
+ return isNumber(value) && value != +value;
+ }
+ /**
+ * Checks if `value` is a pristine native function.
+ *
+ * **Note:** This method can't reliably detect native functions in the presence
+ * of the core-js package because core-js circumvents this kind of detection.
+ * Despite multiple requests, the core-js maintainer has made it clear: any
+ * attempt to fix the detection will be obstructed. As a result, we're left
+ * with little choice but to throw an error. Unfortunately, this also affects
+ * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
+ * which rely on core-js.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+
+
+ function isNative(value) {
+ if (isMaskable(value)) {
+ throw new Error(CORE_ERROR_TEXT);
+ }
+
+ return baseIsNative(value);
+ }
+ /**
+ * Checks if `value` is `null`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
+ * @example
+ *
+ * _.isNull(null);
+ * // => true
+ *
+ * _.isNull(void 0);
+ * // => false
+ */
+
+
+ function isNull(value) {
+ return value === null;
+ }
+ /**
+ * Checks if `value` is `null` or `undefined`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
+ * @example
+ *
+ * _.isNil(null);
+ * // => true
+ *
+ * _.isNil(void 0);
+ * // => true
+ *
+ * _.isNil(NaN);
+ * // => false
+ */
+
+
+ function isNil(value) {
+ return value == null;
+ }
+ /**
+ * Checks if `value` is classified as a `Number` primitive or object.
+ *
+ * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
+ * classified as numbers, use the `_.isFinite` method.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a number, else `false`.
+ * @example
+ *
+ * _.isNumber(3);
+ * // => true
+ *
+ * _.isNumber(Number.MIN_VALUE);
+ * // => true
+ *
+ * _.isNumber(Infinity);
+ * // => true
+ *
+ * _.isNumber('3');
+ * // => false
+ */
+
+
+ function isNumber(value) {
+ return typeof value == 'number' || isObjectLike(value) && baseGetTag(value) == numberTag;
+ }
+ /**
+ * Checks if `value` is a plain object, that is, an object created by the
+ * `Object` constructor or one with a `[[Prototype]]` of `null`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.8.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * }
+ *
+ * _.isPlainObject(new Foo);
+ * // => false
+ *
+ * _.isPlainObject([1, 2, 3]);
+ * // => false
+ *
+ * _.isPlainObject({ 'x': 0, 'y': 0 });
+ * // => true
+ *
+ * _.isPlainObject(Object.create(null));
+ * // => true
+ */
+
+
+ function isPlainObject(value) {
+ if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
+ return false;
+ }
+
+ var proto = getPrototype(value);
+
+ if (proto === null) {
+ return true;
+ }
+
+ var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
+ return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
+ }
+ /**
+ * Checks if `value` is classified as a `RegExp` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
+ * @example
+ *
+ * _.isRegExp(/abc/);
+ * // => true
+ *
+ * _.isRegExp('/abc/');
+ * // => false
+ */
+
+
+ var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
+ /**
+ * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
+ * double precision number which isn't the result of a rounded unsafe integer.
+ *
+ * **Note:** This method is based on
+ * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
+ * @example
+ *
+ * _.isSafeInteger(3);
+ * // => true
+ *
+ * _.isSafeInteger(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isSafeInteger(Infinity);
+ * // => false
+ *
+ * _.isSafeInteger('3');
+ * // => false
+ */
+
+ function isSafeInteger(value) {
+ return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
+ }
+ /**
+ * Checks if `value` is classified as a `Set` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a set, else `false`.
+ * @example
+ *
+ * _.isSet(new Set);
+ * // => true
+ *
+ * _.isSet(new WeakSet);
+ * // => false
+ */
+
+
+ var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
+ /**
+ * Checks if `value` is classified as a `String` primitive or object.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a string, else `false`.
+ * @example
+ *
+ * _.isString('abc');
+ * // => true
+ *
+ * _.isString(1);
+ * // => false
+ */
+
+ function isString(value) {
+ return typeof value == 'string' || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag;
+ }
+ /**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+
+
+ function isSymbol(value) {
+ return _typeof(value) == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag;
+ }
+ /**
+ * Checks if `value` is classified as a typed array.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+ * @example
+ *
+ * _.isTypedArray(new Uint8Array);
+ * // => true
+ *
+ * _.isTypedArray([]);
+ * // => false
+ */
+
+
+ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
+ /**
+ * Checks if `value` is `undefined`.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
+ * @example
+ *
+ * _.isUndefined(void 0);
+ * // => true
+ *
+ * _.isUndefined(null);
+ * // => false
+ */
+
+ function isUndefined(value) {
+ return value === undefined$1;
+ }
+ /**
+ * Checks if `value` is classified as a `WeakMap` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
+ * @example
+ *
+ * _.isWeakMap(new WeakMap);
+ * // => true
+ *
+ * _.isWeakMap(new Map);
+ * // => false
+ */
+
+
+ function isWeakMap(value) {
+ return isObjectLike(value) && getTag(value) == weakMapTag;
+ }
+ /**
+ * Checks if `value` is classified as a `WeakSet` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
+ * @example
+ *
+ * _.isWeakSet(new WeakSet);
+ * // => true
+ *
+ * _.isWeakSet(new Set);
+ * // => false
+ */
+
+
+ function isWeakSet(value) {
+ return isObjectLike(value) && baseGetTag(value) == weakSetTag;
+ }
+ /**
+ * Checks if `value` is less than `other`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.9.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is less than `other`,
+ * else `false`.
+ * @see _.gt
+ * @example
+ *
+ * _.lt(1, 3);
+ * // => true
+ *
+ * _.lt(3, 3);
+ * // => false
+ *
+ * _.lt(3, 1);
+ * // => false
+ */
+
+
+ var lt = createRelationalOperation(baseLt);
+ /**
+ * Checks if `value` is less than or equal to `other`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.9.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is less than or equal to
+ * `other`, else `false`.
+ * @see _.gte
+ * @example
+ *
+ * _.lte(1, 3);
+ * // => true
+ *
+ * _.lte(3, 3);
+ * // => true
+ *
+ * _.lte(3, 1);
+ * // => false
+ */
+
+ var lte = createRelationalOperation(function (value, other) {
+ return value <= other;
+ });
+ /**
+ * Converts `value` to an array.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {Array} Returns the converted array.
+ * @example
+ *
+ * _.toArray({ 'a': 1, 'b': 2 });
+ * // => [1, 2]
+ *
+ * _.toArray('abc');
+ * // => ['a', 'b', 'c']
+ *
+ * _.toArray(1);
+ * // => []
+ *
+ * _.toArray(null);
+ * // => []
+ */
+
+ function toArray(value) {
+ if (!value) {
+ return [];
+ }
+
+ if (isArrayLike(value)) {
+ return isString(value) ? stringToArray(value) : copyArray(value);
+ }
+
+ if (symIterator && value[symIterator]) {
+ return iteratorToArray(value[symIterator]());
+ }
+
+ var tag = getTag(value),
+ func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values;
+ return func(value);
+ }
+ /**
+ * Converts `value` to a finite number.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.12.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted number.
+ * @example
+ *
+ * _.toFinite(3.2);
+ * // => 3.2
+ *
+ * _.toFinite(Number.MIN_VALUE);
+ * // => 5e-324
+ *
+ * _.toFinite(Infinity);
+ * // => 1.7976931348623157e+308
+ *
+ * _.toFinite('3.2');
+ * // => 3.2
+ */
+
+
+ function toFinite(value) {
+ if (!value) {
+ return value === 0 ? value : 0;
+ }
+
+ value = toNumber(value);
+
+ if (value === INFINITY || value === -INFINITY) {
+ var sign = value < 0 ? -1 : 1;
+ return sign * MAX_INTEGER;
+ }
+
+ return value === value ? value : 0;
+ }
+ /**
+ * Converts `value` to an integer.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.toInteger(3.2);
+ * // => 3
+ *
+ * _.toInteger(Number.MIN_VALUE);
+ * // => 0
+ *
+ * _.toInteger(Infinity);
+ * // => 1.7976931348623157e+308
+ *
+ * _.toInteger('3.2');
+ * // => 3
+ */
+
+
+ function toInteger(value) {
+ var result = toFinite(value),
+ remainder = result % 1;
+ return result === result ? remainder ? result - remainder : result : 0;
+ }
+ /**
+ * Converts `value` to an integer suitable for use as the length of an
+ * array-like object.
+ *
+ * **Note:** This method is based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.toLength(3.2);
+ * // => 3
+ *
+ * _.toLength(Number.MIN_VALUE);
+ * // => 0
+ *
+ * _.toLength(Infinity);
+ * // => 4294967295
+ *
+ * _.toLength('3.2');
+ * // => 3
+ */
+
+
+ function toLength(value) {
+ return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
+ }
+ /**
+ * Converts `value` to a number.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {number} Returns the number.
+ * @example
+ *
+ * _.toNumber(3.2);
+ * // => 3.2
+ *
+ * _.toNumber(Number.MIN_VALUE);
+ * // => 5e-324
+ *
+ * _.toNumber(Infinity);
+ * // => Infinity
+ *
+ * _.toNumber('3.2');
+ * // => 3.2
+ */
+
+
+ function toNumber(value) {
+ if (typeof value == 'number') {
+ return value;
+ }
+
+ if (isSymbol(value)) {
+ return NAN;
+ }
+
+ if (isObject(value)) {
+ var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
+ value = isObject(other) ? other + '' : other;
+ }
+
+ if (typeof value != 'string') {
+ return value === 0 ? value : +value;
+ }
+
+ value = baseTrim(value);
+ var isBinary = reIsBinary.test(value);
+ return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
+ }
+ /**
+ * Converts `value` to a plain object flattening inherited enumerable string
+ * keyed properties of `value` to own properties of the plain object.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {Object} Returns the converted plain object.
+ * @example
+ *
+ * function Foo() {
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.assign({ 'a': 1 }, new Foo);
+ * // => { 'a': 1, 'b': 2 }
+ *
+ * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
+ * // => { 'a': 1, 'b': 2, 'c': 3 }
+ */
+
+
+ function toPlainObject(value) {
+ return copyObject(value, keysIn(value));
+ }
+ /**
+ * Converts `value` to a safe integer. A safe integer can be compared and
+ * represented correctly.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.toSafeInteger(3.2);
+ * // => 3
+ *
+ * _.toSafeInteger(Number.MIN_VALUE);
+ * // => 0
+ *
+ * _.toSafeInteger(Infinity);
+ * // => 9007199254740991
+ *
+ * _.toSafeInteger('3.2');
+ * // => 3
+ */
+
+
+ function toSafeInteger(value) {
+ return value ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : value === 0 ? value : 0;
+ }
+ /**
+ * Converts `value` to a string. An empty string is returned for `null`
+ * and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {string} Returns the converted string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+
+
+ function toString(value) {
+ return value == null ? '' : baseToString(value);
+ }
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Assigns own enumerable string keyed properties of source objects to the
+ * destination object. Source objects are applied from left to right.
+ * Subsequent sources overwrite property assignments of previous sources.
+ *
+ * **Note:** This method mutates `object` and is loosely based on
+ * [`Object.assign`](https://mdn.io/Object/assign).
+ *
+ * @static
+ * @memberOf _
+ * @since 0.10.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @see _.assignIn
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * }
+ *
+ * function Bar() {
+ * this.c = 3;
+ * }
+ *
+ * Foo.prototype.b = 2;
+ * Bar.prototype.d = 4;
+ *
+ * _.assign({ 'a': 0 }, new Foo, new Bar);
+ * // => { 'a': 1, 'c': 3 }
+ */
+
+
+ var assign = createAssigner(function (object, source) {
+ if (isPrototype(source) || isArrayLike(source)) {
+ copyObject(source, keys(source), object);
+ return;
+ }
+
+ for (var key in source) {
+ if (hasOwnProperty.call(source, key)) {
+ assignValue(object, key, source[key]);
+ }
+ }
+ });
+ /**
+ * This method is like `_.assign` except that it iterates over own and
+ * inherited source properties.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @alias extend
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @see _.assign
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * }
+ *
+ * function Bar() {
+ * this.c = 3;
+ * }
+ *
+ * Foo.prototype.b = 2;
+ * Bar.prototype.d = 4;
+ *
+ * _.assignIn({ 'a': 0 }, new Foo, new Bar);
+ * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
+ */
+
+ var assignIn = createAssigner(function (object, source) {
+ copyObject(source, keysIn(source), object);
+ });
+ /**
+ * This method is like `_.assignIn` except that it accepts `customizer`
+ * which is invoked to produce the assigned values. If `customizer` returns
+ * `undefined`, assignment is handled by the method instead. The `customizer`
+ * is invoked with five arguments: (objValue, srcValue, key, object, source).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @alias extendWith
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} sources The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ * @see _.assignWith
+ * @example
+ *
+ * function customizer(objValue, srcValue) {
+ * return _.isUndefined(objValue) ? srcValue : objValue;
+ * }
+ *
+ * var defaults = _.partialRight(_.assignInWith, customizer);
+ *
+ * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
+ * // => { 'a': 1, 'b': 2 }
+ */
+
+ var assignInWith = createAssigner(function (object, source, srcIndex, customizer) {
+ copyObject(source, keysIn(source), object, customizer);
+ });
+ /**
+ * This method is like `_.assign` except that it accepts `customizer`
+ * which is invoked to produce the assigned values. If `customizer` returns
+ * `undefined`, assignment is handled by the method instead. The `customizer`
+ * is invoked with five arguments: (objValue, srcValue, key, object, source).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} sources The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ * @see _.assignInWith
+ * @example
+ *
+ * function customizer(objValue, srcValue) {
+ * return _.isUndefined(objValue) ? srcValue : objValue;
+ * }
+ *
+ * var defaults = _.partialRight(_.assignWith, customizer);
+ *
+ * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
+ * // => { 'a': 1, 'b': 2 }
+ */
+
+ var assignWith = createAssigner(function (object, source, srcIndex, customizer) {
+ copyObject(source, keys(source), object, customizer);
+ });
+ /**
+ * Creates an array of values corresponding to `paths` of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.0.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {...(string|string[])} [paths] The property paths to pick.
+ * @returns {Array} Returns the picked values.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
+ *
+ * _.at(object, ['a[0].b.c', 'a[1]']);
+ * // => [3, 4]
+ */
+
+ var at = flatRest(baseAt);
+ /**
+ * Creates an object that inherits from the `prototype` object. If a
+ * `properties` object is given, its own enumerable string keyed properties
+ * are assigned to the created object.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.3.0
+ * @category Object
+ * @param {Object} prototype The object to inherit from.
+ * @param {Object} [properties] The properties to assign to the object.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * function Shape() {
+ * this.x = 0;
+ * this.y = 0;
+ * }
+ *
+ * function Circle() {
+ * Shape.call(this);
+ * }
+ *
+ * Circle.prototype = _.create(Shape.prototype, {
+ * 'constructor': Circle
+ * });
+ *
+ * var circle = new Circle;
+ * circle instanceof Circle;
+ * // => true
+ *
+ * circle instanceof Shape;
+ * // => true
+ */
+
+ function create(prototype, properties) {
+ var result = baseCreate(prototype);
+ return properties == null ? result : baseAssign(result, properties);
+ }
+ /**
+ * Assigns own and inherited enumerable string keyed properties of source
+ * objects to the destination object for all destination properties that
+ * resolve to `undefined`. Source objects are applied from left to right.
+ * Once a property is set, additional values of the same property are ignored.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @see _.defaultsDeep
+ * @example
+ *
+ * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
+ * // => { 'a': 1, 'b': 2 }
+ */
+
+
+ var defaults = baseRest(function (object, sources) {
+ object = Object(object);
+ var index = -1;
+ var length = sources.length;
+ var guard = length > 2 ? sources[2] : undefined$1;
+
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+ length = 1;
+ }
+
+ while (++index < length) {
+ var source = sources[index];
+ var props = keysIn(source);
+ var propsIndex = -1;
+ var propsLength = props.length;
+
+ while (++propsIndex < propsLength) {
+ var key = props[propsIndex];
+ var value = object[key];
+
+ if (value === undefined$1 || eq(value, objectProto[key]) && !hasOwnProperty.call(object, key)) {
+ object[key] = source[key];
+ }
+ }
+ }
+
+ return object;
+ });
+ /**
+ * This method is like `_.defaults` except that it recursively assigns
+ * default properties.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.10.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @see _.defaults
+ * @example
+ *
+ * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
+ * // => { 'a': { 'b': 2, 'c': 3 } }
+ */
+
+ var defaultsDeep = baseRest(function (args) {
+ args.push(undefined$1, customDefaultsMerge);
+ return apply(mergeWith, undefined$1, args);
+ });
+ /**
+ * This method is like `_.find` except that it returns the key of the first
+ * element `predicate` returns truthy for instead of the element itself.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.1.0
+ * @category Object
+ * @param {Object} object The object to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {string|undefined} Returns the key of the matched element,
+ * else `undefined`.
+ * @example
+ *
+ * var users = {
+ * 'barney': { 'age': 36, 'active': true },
+ * 'fred': { 'age': 40, 'active': false },
+ * 'pebbles': { 'age': 1, 'active': true }
+ * };
+ *
+ * _.findKey(users, function(o) { return o.age < 40; });
+ * // => 'barney' (iteration order is not guaranteed)
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.findKey(users, { 'age': 1, 'active': true });
+ * // => 'pebbles'
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.findKey(users, ['active', false]);
+ * // => 'fred'
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.findKey(users, 'active');
+ * // => 'barney'
+ */
+
+ function findKey(object, predicate) {
+ return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
+ }
+ /**
+ * This method is like `_.findKey` except that it iterates over elements of
+ * a collection in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Object
+ * @param {Object} object The object to inspect.
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
+ * @returns {string|undefined} Returns the key of the matched element,
+ * else `undefined`.
+ * @example
+ *
+ * var users = {
+ * 'barney': { 'age': 36, 'active': true },
+ * 'fred': { 'age': 40, 'active': false },
+ * 'pebbles': { 'age': 1, 'active': true }
+ * };
+ *
+ * _.findLastKey(users, function(o) { return o.age < 40; });
+ * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
+ *
+ * // The `_.matches` iteratee shorthand.
+ * _.findLastKey(users, { 'age': 36, 'active': true });
+ * // => 'barney'
+ *
+ * // The `_.matchesProperty` iteratee shorthand.
+ * _.findLastKey(users, ['active', false]);
+ * // => 'fred'
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.findLastKey(users, 'active');
+ * // => 'pebbles'
+ */
+
+
+ function findLastKey(object, predicate) {
+ return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
+ }
+ /**
+ * Iterates over own and inherited enumerable string keyed properties of an
+ * object and invokes `iteratee` for each property. The iteratee is invoked
+ * with three arguments: (value, key, object). Iteratee functions may exit
+ * iteration early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.3.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ * @see _.forInRight
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forIn(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
+ */
+
+
+ function forIn(object, iteratee) {
+ return object == null ? object : baseFor(object, getIteratee(iteratee, 3), keysIn);
+ }
+ /**
+ * This method is like `_.forIn` except that it iterates over properties of
+ * `object` in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ * @see _.forIn
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forInRight(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
+ */
+
+
+ function forInRight(object, iteratee) {
+ return object == null ? object : baseForRight(object, getIteratee(iteratee, 3), keysIn);
+ }
+ /**
+ * Iterates over own enumerable string keyed properties of an object and
+ * invokes `iteratee` for each property. The iteratee is invoked with three
+ * arguments: (value, key, object). Iteratee functions may exit iteration
+ * early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.3.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ * @see _.forOwnRight
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forOwn(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
+ */
+
+
+ function forOwn(object, iteratee) {
+ return object && baseForOwn(object, getIteratee(iteratee, 3));
+ }
+ /**
+ * This method is like `_.forOwn` except that it iterates over properties of
+ * `object` in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.0.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ * @see _.forOwn
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forOwnRight(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
+ */
+
+
+ function forOwnRight(object, iteratee) {
+ return object && baseForOwnRight(object, getIteratee(iteratee, 3));
+ }
+ /**
+ * Creates an array of function property names from own enumerable properties
+ * of `object`.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns the function names.
+ * @see _.functionsIn
+ * @example
+ *
+ * function Foo() {
+ * this.a = _.constant('a');
+ * this.b = _.constant('b');
+ * }
+ *
+ * Foo.prototype.c = _.constant('c');
+ *
+ * _.functions(new Foo);
+ * // => ['a', 'b']
+ */
+
+
+ function functions(object) {
+ return object == null ? [] : baseFunctions(object, keys(object));
+ }
+ /**
+ * Creates an array of function property names from own and inherited
+ * enumerable properties of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns the function names.
+ * @see _.functions
+ * @example
+ *
+ * function Foo() {
+ * this.a = _.constant('a');
+ * this.b = _.constant('b');
+ * }
+ *
+ * Foo.prototype.c = _.constant('c');
+ *
+ * _.functionsIn(new Foo);
+ * // => ['a', 'b', 'c']
+ */
+
+
+ function functionsIn(object) {
+ return object == null ? [] : baseFunctions(object, keysIn(object));
+ }
+ /**
+ * Gets the value at `path` of `object`. If the resolved value is
+ * `undefined`, the `defaultValue` is returned in its place.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.7.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} [defaultValue] The value returned for `undefined` resolved values.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.get(object, 'a[0].b.c');
+ * // => 3
+ *
+ * _.get(object, ['a', '0', 'b', 'c']);
+ * // => 3
+ *
+ * _.get(object, 'a.b.c', 'default');
+ * // => 'default'
+ */
+
+
+ function get(object, path, defaultValue) {
+ var result = object == null ? undefined$1 : baseGet(object, path);
+ return result === undefined$1 ? defaultValue : result;
+ }
+ /**
+ * Checks if `path` is a direct property of `object`.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ * @example
+ *
+ * var object = { 'a': { 'b': 2 } };
+ * var other = _.create({ 'a': _.create({ 'b': 2 }) });
+ *
+ * _.has(object, 'a');
+ * // => true
+ *
+ * _.has(object, 'a.b');
+ * // => true
+ *
+ * _.has(object, ['a', 'b']);
+ * // => true
+ *
+ * _.has(other, 'a');
+ * // => false
+ */
+
+
+ function has(object, path) {
+ return object != null && hasPath(object, path, baseHas);
+ }
+ /**
+ * Checks if `path` is a direct or inherited property of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ * @example
+ *
+ * var object = _.create({ 'a': _.create({ 'b': 2 }) });
+ *
+ * _.hasIn(object, 'a');
+ * // => true
+ *
+ * _.hasIn(object, 'a.b');
+ * // => true
+ *
+ * _.hasIn(object, ['a', 'b']);
+ * // => true
+ *
+ * _.hasIn(object, 'b');
+ * // => false
+ */
+
+
+ function hasIn(object, path) {
+ return object != null && hasPath(object, path, baseHasIn);
+ }
+ /**
+ * Creates an object composed of the inverted keys and values of `object`.
+ * If `object` contains duplicate values, subsequent values overwrite
+ * property assignments of previous values.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.7.0
+ * @category Object
+ * @param {Object} object The object to invert.
+ * @returns {Object} Returns the new inverted object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2, 'c': 1 };
+ *
+ * _.invert(object);
+ * // => { '1': 'c', '2': 'b' }
+ */
+
+
+ var invert = createInverter(function (result, value, key) {
+ if (value != null && typeof value.toString != 'function') {
+ value = nativeObjectToString.call(value);
+ }
+
+ result[value] = key;
+ }, constant(identity));
+ /**
+ * This method is like `_.invert` except that the inverted object is generated
+ * from the results of running each element of `object` thru `iteratee`. The
+ * corresponding inverted value of each inverted key is an array of keys
+ * responsible for generating the inverted value. The iteratee is invoked
+ * with one argument: (value).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.1.0
+ * @category Object
+ * @param {Object} object The object to invert.
+ * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
+ * @returns {Object} Returns the new inverted object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2, 'c': 1 };
+ *
+ * _.invertBy(object);
+ * // => { '1': ['a', 'c'], '2': ['b'] }
+ *
+ * _.invertBy(object, function(value) {
+ * return 'group' + value;
+ * });
+ * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
+ */
+
+ var invertBy = createInverter(function (result, value, key) {
+ if (value != null && typeof value.toString != 'function') {
+ value = nativeObjectToString.call(value);
+ }
+
+ if (hasOwnProperty.call(result, value)) {
+ result[value].push(key);
+ } else {
+ result[value] = [key];
+ }
+ }, getIteratee);
+ /**
+ * Invokes the method at `path` of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the method to invoke.
+ * @param {...*} [args] The arguments to invoke the method with.
+ * @returns {*} Returns the result of the invoked method.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
+ *
+ * _.invoke(object, 'a[0].b.c.slice', 1, 3);
+ * // => [2, 3]
+ */
+
+ var invoke = baseRest(baseInvoke);
+ /**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+
+ function keys(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
+ }
+ /**
+ * Creates an array of the own and inherited enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keysIn(new Foo);
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ */
+
+
+ function keysIn(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
+ }
+ /**
+ * The opposite of `_.mapValues`; this method creates an object with the
+ * same values as `object` and keys generated by running each own enumerable
+ * string keyed property of `object` thru `iteratee`. The iteratee is invoked
+ * with three arguments: (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.8.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns the new mapped object.
+ * @see _.mapValues
+ * @example
+ *
+ * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
+ * return key + value;
+ * });
+ * // => { 'a1': 1, 'b2': 2 }
+ */
+
+
+ function mapKeys(object, iteratee) {
+ var result = {};
+ iteratee = getIteratee(iteratee, 3);
+ baseForOwn(object, function (value, key, object) {
+ baseAssignValue(result, iteratee(value, key, object), value);
+ });
+ return result;
+ }
+ /**
+ * Creates an object with the same keys as `object` and values generated
+ * by running each own enumerable string keyed property of `object` thru
+ * `iteratee`. The iteratee is invoked with three arguments:
+ * (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns the new mapped object.
+ * @see _.mapKeys
+ * @example
+ *
+ * var users = {
+ * 'fred': { 'user': 'fred', 'age': 40 },
+ * 'pebbles': { 'user': 'pebbles', 'age': 1 }
+ * };
+ *
+ * _.mapValues(users, function(o) { return o.age; });
+ * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.mapValues(users, 'age');
+ * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+ */
+
+
+ function mapValues(object, iteratee) {
+ var result = {};
+ iteratee = getIteratee(iteratee, 3);
+ baseForOwn(object, function (value, key, object) {
+ baseAssignValue(result, key, iteratee(value, key, object));
+ });
+ return result;
+ }
+ /**
+ * This method is like `_.assign` except that it recursively merges own and
+ * inherited enumerable string keyed properties of source objects into the
+ * destination object. Source properties that resolve to `undefined` are
+ * skipped if a destination value exists. Array and plain object properties
+ * are merged recursively. Other objects and value types are overridden by
+ * assignment. Source objects are applied from left to right. Subsequent
+ * sources overwrite property assignments of previous sources.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.5.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = {
+ * 'a': [{ 'b': 2 }, { 'd': 4 }]
+ * };
+ *
+ * var other = {
+ * 'a': [{ 'c': 3 }, { 'e': 5 }]
+ * };
+ *
+ * _.merge(object, other);
+ * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
+ */
+
+
+ var merge = createAssigner(function (object, source, srcIndex) {
+ baseMerge(object, source, srcIndex);
+ });
+ /**
+ * This method is like `_.merge` except that it accepts `customizer` which
+ * is invoked to produce the merged values of the destination and source
+ * properties. If `customizer` returns `undefined`, merging is handled by the
+ * method instead. The `customizer` is invoked with six arguments:
+ * (objValue, srcValue, key, object, source, stack).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} sources The source objects.
+ * @param {Function} customizer The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function customizer(objValue, srcValue) {
+ * if (_.isArray(objValue)) {
+ * return objValue.concat(srcValue);
+ * }
+ * }
+ *
+ * var object = { 'a': [1], 'b': [2] };
+ * var other = { 'a': [3], 'b': [4] };
+ *
+ * _.mergeWith(object, other, customizer);
+ * // => { 'a': [1, 3], 'b': [2, 4] }
+ */
+
+ var mergeWith = createAssigner(function (object, source, srcIndex, customizer) {
+ baseMerge(object, source, srcIndex, customizer);
+ });
+ /**
+ * The opposite of `_.pick`; this method creates an object composed of the
+ * own and inherited enumerable property paths of `object` that are not omitted.
+ *
+ * **Note:** This method is considerably slower than `_.pick`.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {...(string|string[])} [paths] The property paths to omit.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': '2', 'c': 3 };
+ *
+ * _.omit(object, ['a', 'c']);
+ * // => { 'b': '2' }
+ */
+
+ var omit = flatRest(function (object, paths) {
+ var result = {};
+
+ if (object == null) {
+ return result;
+ }
+
+ var isDeep = false;
+ paths = arrayMap(paths, function (path) {
+ path = castPath(path, object);
+ isDeep || (isDeep = path.length > 1);
+ return path;
+ });
+ copyObject(object, getAllKeysIn(object), result);
+
+ if (isDeep) {
+ result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
+ }
+
+ var length = paths.length;
+
+ while (length--) {
+ baseUnset(result, paths[length]);
+ }
+
+ return result;
+ });
+ /**
+ * The opposite of `_.pickBy`; this method creates an object composed of
+ * the own and inherited enumerable string keyed properties of `object` that
+ * `predicate` doesn't return truthy for. The predicate is invoked with two
+ * arguments: (value, key).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {Function} [predicate=_.identity] The function invoked per property.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': '2', 'c': 3 };
+ *
+ * _.omitBy(object, _.isNumber);
+ * // => { 'b': '2' }
+ */
+
+ function omitBy(object, predicate) {
+ return pickBy(object, negate(getIteratee(predicate)));
+ }
+ /**
+ * Creates an object composed of the picked `object` properties.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {...(string|string[])} [paths] The property paths to pick.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': '2', 'c': 3 };
+ *
+ * _.pick(object, ['a', 'c']);
+ * // => { 'a': 1, 'c': 3 }
+ */
+
+
+ var pick = flatRest(function (object, paths) {
+ return object == null ? {} : basePick(object, paths);
+ });
+ /**
+ * Creates an object composed of the `object` properties `predicate` returns
+ * truthy for. The predicate is invoked with two arguments: (value, key).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {Function} [predicate=_.identity] The function invoked per property.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': '2', 'c': 3 };
+ *
+ * _.pickBy(object, _.isNumber);
+ * // => { 'a': 1, 'c': 3 }
+ */
+
+ function pickBy(object, predicate) {
+ if (object == null) {
+ return {};
+ }
+
+ var props = arrayMap(getAllKeysIn(object), function (prop) {
+ return [prop];
+ });
+ predicate = getIteratee(predicate);
+ return basePickBy(object, props, function (value, path) {
+ return predicate(value, path[0]);
+ });
+ }
+ /**
+ * This method is like `_.get` except that if the resolved value is a
+ * function it's invoked with the `this` binding of its parent object and
+ * its result is returned.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to resolve.
+ * @param {*} [defaultValue] The value returned for `undefined` resolved values.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
+ *
+ * _.result(object, 'a[0].b.c1');
+ * // => 3
+ *
+ * _.result(object, 'a[0].b.c2');
+ * // => 4
+ *
+ * _.result(object, 'a[0].b.c3', 'default');
+ * // => 'default'
+ *
+ * _.result(object, 'a[0].b.c3', _.constant('default'));
+ * // => 'default'
+ */
+
+
+ function result(object, path, defaultValue) {
+ path = castPath(path, object);
+ var index = -1,
+ length = path.length; // Ensure the loop is entered when path is empty.
+
+ if (!length) {
+ length = 1;
+ object = undefined$1;
+ }
+
+ while (++index < length) {
+ var value = object == null ? undefined$1 : object[toKey(path[index])];
+
+ if (value === undefined$1) {
+ index = length;
+ value = defaultValue;
+ }
+
+ object = isFunction(value) ? value.call(object) : value;
+ }
+
+ return object;
+ }
+ /**
+ * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
+ * it's created. Arrays are created for missing index properties while objects
+ * are created for all other missing properties. Use `_.setWith` to customize
+ * `path` creation.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.7.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.set(object, 'a[0].b.c', 4);
+ * console.log(object.a[0].b.c);
+ * // => 4
+ *
+ * _.set(object, ['x', '0', 'y', 'z'], 5);
+ * console.log(object.x[0].y.z);
+ * // => 5
+ */
+
+
+ function set(object, path, value) {
+ return object == null ? object : baseSet(object, path, value);
+ }
+ /**
+ * This method is like `_.set` except that it accepts `customizer` which is
+ * invoked to produce the objects of `path`. If `customizer` returns `undefined`
+ * path creation is handled by the method instead. The `customizer` is invoked
+ * with three arguments: (nsValue, key, nsObject).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {*} value The value to set.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = {};
+ *
+ * _.setWith(object, '[0][1]', 'a', Object);
+ * // => { '0': { '1': 'a' } }
+ */
+
+
+ function setWith(object, path, value, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined$1;
+ return object == null ? object : baseSet(object, path, value, customizer);
+ }
+ /**
+ * Creates an array of own enumerable string keyed-value pairs for `object`
+ * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
+ * entries are returned.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @alias entries
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the key-value pairs.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.toPairs(new Foo);
+ * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
+ */
+
+
+ var toPairs = createToPairs(keys);
+ /**
+ * Creates an array of own and inherited enumerable string keyed-value pairs
+ * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
+ * or set, its entries are returned.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @alias entriesIn
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the key-value pairs.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.toPairsIn(new Foo);
+ * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
+ */
+
+ var toPairsIn = createToPairs(keysIn);
+ /**
+ * An alternative to `_.reduce`; this method transforms `object` to a new
+ * `accumulator` object which is the result of running each of its own
+ * enumerable string keyed properties thru `iteratee`, with each invocation
+ * potentially mutating the `accumulator` object. If `accumulator` is not
+ * provided, a new object with the same `[[Prototype]]` will be used. The
+ * iteratee is invoked with four arguments: (accumulator, value, key, object).
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.3.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The custom accumulator value.
+ * @returns {*} Returns the accumulated value.
+ * @example
+ *
+ * _.transform([2, 3, 4], function(result, n) {
+ * result.push(n *= n);
+ * return n % 2 == 0;
+ * }, []);
+ * // => [4, 9]
+ *
+ * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
+ * (result[value] || (result[value] = [])).push(key);
+ * }, {});
+ * // => { '1': ['a', 'c'], '2': ['b'] }
+ */
+
+ function transform(object, iteratee, accumulator) {
+ var isArr = isArray(object),
+ isArrLike = isArr || isBuffer(object) || isTypedArray(object);
+ iteratee = getIteratee(iteratee, 4);
+
+ if (accumulator == null) {
+ var Ctor = object && object.constructor;
+
+ if (isArrLike) {
+ accumulator = isArr ? new Ctor() : [];
+ } else if (isObject(object)) {
+ accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
+ } else {
+ accumulator = {};
+ }
+ }
+
+ (isArrLike ? arrayEach : baseForOwn)(object, function (value, index, object) {
+ return iteratee(accumulator, value, index, object);
+ });
+ return accumulator;
+ }
+ /**
+ * Removes the property at `path` of `object`.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to unset.
+ * @returns {boolean} Returns `true` if the property is deleted, else `false`.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 7 } }] };
+ * _.unset(object, 'a[0].b.c');
+ * // => true
+ *
+ * console.log(object);
+ * // => { 'a': [{ 'b': {} }] };
+ *
+ * _.unset(object, ['a', '0', 'b', 'c']);
+ * // => true
+ *
+ * console.log(object);
+ * // => { 'a': [{ 'b': {} }] };
+ */
+
+
+ function unset(object, path) {
+ return object == null ? true : baseUnset(object, path);
+ }
+ /**
+ * This method is like `_.set` except that accepts `updater` to produce the
+ * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
+ * is invoked with one argument: (value).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.6.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {Function} updater The function to produce the updated value.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.update(object, 'a[0].b.c', function(n) { return n * n; });
+ * console.log(object.a[0].b.c);
+ * // => 9
+ *
+ * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
+ * console.log(object.x[0].y.z);
+ * // => 0
+ */
+
+
+ function update(object, path, updater) {
+ return object == null ? object : baseUpdate(object, path, castFunction(updater));
+ }
+ /**
+ * This method is like `_.update` except that it accepts `customizer` which is
+ * invoked to produce the objects of `path`. If `customizer` returns `undefined`
+ * path creation is handled by the method instead. The `customizer` is invoked
+ * with three arguments: (nsValue, key, nsObject).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.6.0
+ * @category Object
+ * @param {Object} object The object to modify.
+ * @param {Array|string} path The path of the property to set.
+ * @param {Function} updater The function to produce the updated value.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = {};
+ *
+ * _.updateWith(object, '[0][1]', _.constant('a'), Object);
+ * // => { '0': { '1': 'a' } }
+ */
+
+
+ function updateWith(object, path, updater, customizer) {
+ customizer = typeof customizer == 'function' ? customizer : undefined$1;
+ return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
+ }
+ /**
+ * Creates an array of the own enumerable string keyed property values of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property values.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.values(new Foo);
+ * // => [1, 2] (iteration order is not guaranteed)
+ *
+ * _.values('hi');
+ * // => ['h', 'i']
+ */
+
+
+ function values(object) {
+ return object == null ? [] : baseValues(object, keys(object));
+ }
+ /**
+ * Creates an array of the own and inherited enumerable string keyed property
+ * values of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property values.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.valuesIn(new Foo);
+ * // => [1, 2, 3] (iteration order is not guaranteed)
+ */
+
+
+ function valuesIn(object) {
+ return object == null ? [] : baseValues(object, keysIn(object));
+ }
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Clamps `number` within the inclusive `lower` and `upper` bounds.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Number
+ * @param {number} number The number to clamp.
+ * @param {number} [lower] The lower bound.
+ * @param {number} upper The upper bound.
+ * @returns {number} Returns the clamped number.
+ * @example
+ *
+ * _.clamp(-10, -5, 5);
+ * // => -5
+ *
+ * _.clamp(10, -5, 5);
+ * // => 5
+ */
+
+
+ function clamp(number, lower, upper) {
+ if (upper === undefined$1) {
+ upper = lower;
+ lower = undefined$1;
+ }
+
+ if (upper !== undefined$1) {
+ upper = toNumber(upper);
+ upper = upper === upper ? upper : 0;
+ }
+
+ if (lower !== undefined$1) {
+ lower = toNumber(lower);
+ lower = lower === lower ? lower : 0;
+ }
+
+ return baseClamp(toNumber(number), lower, upper);
+ }
+ /**
+ * Checks if `n` is between `start` and up to, but not including, `end`. If
+ * `end` is not specified, it's set to `start` with `start` then set to `0`.
+ * If `start` is greater than `end` the params are swapped to support
+ * negative ranges.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.3.0
+ * @category Number
+ * @param {number} number The number to check.
+ * @param {number} [start=0] The start of the range.
+ * @param {number} end The end of the range.
+ * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
+ * @see _.range, _.rangeRight
+ * @example
+ *
+ * _.inRange(3, 2, 4);
+ * // => true
+ *
+ * _.inRange(4, 8);
+ * // => true
+ *
+ * _.inRange(4, 2);
+ * // => false
+ *
+ * _.inRange(2, 2);
+ * // => false
+ *
+ * _.inRange(1.2, 2);
+ * // => true
+ *
+ * _.inRange(5.2, 4);
+ * // => false
+ *
+ * _.inRange(-3, -2, -6);
+ * // => true
+ */
+
+
+ function inRange(number, start, end) {
+ start = toFinite(start);
+
+ if (end === undefined$1) {
+ end = start;
+ start = 0;
+ } else {
+ end = toFinite(end);
+ }
+
+ number = toNumber(number);
+ return baseInRange(number, start, end);
+ }
+ /**
+ * Produces a random number between the inclusive `lower` and `upper` bounds.
+ * If only one argument is provided a number between `0` and the given number
+ * is returned. If `floating` is `true`, or either `lower` or `upper` are
+ * floats, a floating-point number is returned instead of an integer.
+ *
+ * **Note:** JavaScript follows the IEEE-754 standard for resolving
+ * floating-point values which can produce unexpected results.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.7.0
+ * @category Number
+ * @param {number} [lower=0] The lower bound.
+ * @param {number} [upper=1] The upper bound.
+ * @param {boolean} [floating] Specify returning a floating-point number.
+ * @returns {number} Returns the random number.
+ * @example
+ *
+ * _.random(0, 5);
+ * // => an integer between 0 and 5
+ *
+ * _.random(5);
+ * // => also an integer between 0 and 5
+ *
+ * _.random(5, true);
+ * // => a floating-point number between 0 and 5
+ *
+ * _.random(1.2, 5.2);
+ * // => a floating-point number between 1.2 and 5.2
+ */
+
+
+ function random(lower, upper, floating) {
+ if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
+ upper = floating = undefined$1;
+ }
+
+ if (floating === undefined$1) {
+ if (typeof upper == 'boolean') {
+ floating = upper;
+ upper = undefined$1;
+ } else if (typeof lower == 'boolean') {
+ floating = lower;
+ lower = undefined$1;
+ }
+ }
+
+ if (lower === undefined$1 && upper === undefined$1) {
+ lower = 0;
+ upper = 1;
+ } else {
+ lower = toFinite(lower);
+
+ if (upper === undefined$1) {
+ upper = lower;
+ lower = 0;
+ } else {
+ upper = toFinite(upper);
+ }
+ }
+
+ if (lower > upper) {
+ var temp = lower;
+ lower = upper;
+ upper = temp;
+ }
+
+ if (floating || lower % 1 || upper % 1) {
+ var rand = nativeRandom();
+ return nativeMin(lower + rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1))), upper);
+ }
+
+ return baseRandom(lower, upper);
+ }
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the camel cased string.
+ * @example
+ *
+ * _.camelCase('Foo Bar');
+ * // => 'fooBar'
+ *
+ * _.camelCase('--foo-bar--');
+ * // => 'fooBar'
+ *
+ * _.camelCase('__FOO_BAR__');
+ * // => 'fooBar'
+ */
+
+
+ var camelCase = createCompounder(function (result, word, index) {
+ word = word.toLowerCase();
+ return result + (index ? capitalize(word) : word);
+ });
+ /**
+ * Converts the first character of `string` to upper case and the remaining
+ * to lower case.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to capitalize.
+ * @returns {string} Returns the capitalized string.
+ * @example
+ *
+ * _.capitalize('FRED');
+ * // => 'Fred'
+ */
+
+ function capitalize(string) {
+ return upperFirst(toString(string).toLowerCase());
+ }
+ /**
+ * Deburrs `string` by converting
+ * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
+ * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
+ * letters to basic Latin letters and removing
+ * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to deburr.
+ * @returns {string} Returns the deburred string.
+ * @example
+ *
+ * _.deburr('déjà vu');
+ * // => 'deja vu'
+ */
+
+
+ function deburr(string) {
+ string = toString(string);
+ return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
+ }
+ /**
+ * Checks if `string` ends with the given target string.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to inspect.
+ * @param {string} [target] The string to search for.
+ * @param {number} [position=string.length] The position to search up to.
+ * @returns {boolean} Returns `true` if `string` ends with `target`,
+ * else `false`.
+ * @example
+ *
+ * _.endsWith('abc', 'c');
+ * // => true
+ *
+ * _.endsWith('abc', 'b');
+ * // => false
+ *
+ * _.endsWith('abc', 'b', 2);
+ * // => true
+ */
+
+
+ function endsWith(string, target, position) {
+ string = toString(string);
+ target = baseToString(target);
+ var length = string.length;
+ position = position === undefined$1 ? length : baseClamp(toInteger(position), 0, length);
+ var end = position;
+ position -= target.length;
+ return position >= 0 && string.slice(position, end) == target;
+ }
+ /**
+ * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
+ * corresponding HTML entities.
+ *
+ * **Note:** No other characters are escaped. To escape additional
+ * characters use a third-party library like [_he_](https://mths.be/he).
+ *
+ * Though the ">" character is escaped for symmetry, characters like
+ * ">" and "/" don't need escaping in HTML and have no special meaning
+ * unless they're part of a tag or unquoted attribute value. See
+ * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
+ * (under "semi-related fun fact") for more details.
+ *
+ * When working with HTML you should always
+ * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
+ * XSS vectors.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to escape.
+ * @returns {string} Returns the escaped string.
+ * @example
+ *
+ * _.escape('fred, barney, & pebbles');
+ * // => 'fred, barney, & pebbles'
+ */
+
+
+ function escape(string) {
+ string = toString(string);
+ return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;
+ }
+ /**
+ * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
+ * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to escape.
+ * @returns {string} Returns the escaped string.
+ * @example
+ *
+ * _.escapeRegExp('[lodash](https://lodash.com/)');
+ * // => '\[lodash\]\(https://lodash\.com/\)'
+ */
+
+
+ function escapeRegExp(string) {
+ string = toString(string);
+ return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, '\\$&') : string;
+ }
+ /**
+ * Converts `string` to
+ * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the kebab cased string.
+ * @example
+ *
+ * _.kebabCase('Foo Bar');
+ * // => 'foo-bar'
+ *
+ * _.kebabCase('fooBar');
+ * // => 'foo-bar'
+ *
+ * _.kebabCase('__FOO_BAR__');
+ * // => 'foo-bar'
+ */
+
+
+ var kebabCase = createCompounder(function (result, word, index) {
+ return result + (index ? '-' : '') + word.toLowerCase();
+ });
+ /**
+ * Converts `string`, as space separated words, to lower case.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the lower cased string.
+ * @example
+ *
+ * _.lowerCase('--Foo-Bar--');
+ * // => 'foo bar'
+ *
+ * _.lowerCase('fooBar');
+ * // => 'foo bar'
+ *
+ * _.lowerCase('__FOO_BAR__');
+ * // => 'foo bar'
+ */
+
+ var lowerCase = createCompounder(function (result, word, index) {
+ return result + (index ? ' ' : '') + word.toLowerCase();
+ });
+ /**
+ * Converts the first character of `string` to lower case.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the converted string.
+ * @example
+ *
+ * _.lowerFirst('Fred');
+ * // => 'fred'
+ *
+ * _.lowerFirst('FRED');
+ * // => 'fRED'
+ */
+
+ var lowerFirst = createCaseFirst('toLowerCase');
+ /**
+ * Pads `string` on the left and right sides if it's shorter than `length`.
+ * Padding characters are truncated if they can't be evenly divided by `length`.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.pad('abc', 8);
+ * // => ' abc '
+ *
+ * _.pad('abc', 8, '_-');
+ * // => '_-abc_-_'
+ *
+ * _.pad('abc', 3);
+ * // => 'abc'
+ */
+
+ function pad(string, length, chars) {
+ string = toString(string);
+ length = toInteger(length);
+ var strLength = length ? stringSize(string) : 0;
+
+ if (!length || strLength >= length) {
+ return string;
+ }
+
+ var mid = (length - strLength) / 2;
+ return createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars);
+ }
+ /**
+ * Pads `string` on the right side if it's shorter than `length`. Padding
+ * characters are truncated if they exceed `length`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.padEnd('abc', 6);
+ * // => 'abc '
+ *
+ * _.padEnd('abc', 6, '_-');
+ * // => 'abc_-_'
+ *
+ * _.padEnd('abc', 3);
+ * // => 'abc'
+ */
+
+
+ function padEnd(string, length, chars) {
+ string = toString(string);
+ length = toInteger(length);
+ var strLength = length ? stringSize(string) : 0;
+ return length && strLength < length ? string + createPadding(length - strLength, chars) : string;
+ }
+ /**
+ * Pads `string` on the left side if it's shorter than `length`. Padding
+ * characters are truncated if they exceed `length`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.padStart('abc', 6);
+ * // => ' abc'
+ *
+ * _.padStart('abc', 6, '_-');
+ * // => '_-_abc'
+ *
+ * _.padStart('abc', 3);
+ * // => 'abc'
+ */
+
+
+ function padStart(string, length, chars) {
+ string = toString(string);
+ length = toInteger(length);
+ var strLength = length ? stringSize(string) : 0;
+ return length && strLength < length ? createPadding(length - strLength, chars) + string : string;
+ }
+ /**
+ * Converts `string` to an integer of the specified radix. If `radix` is
+ * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
+ * hexadecimal, in which case a `radix` of `16` is used.
+ *
+ * **Note:** This method aligns with the
+ * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.1.0
+ * @category String
+ * @param {string} string The string to convert.
+ * @param {number} [radix=10] The radix to interpret `value` by.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.parseInt('08');
+ * // => 8
+ *
+ * _.map(['6', '08', '10'], _.parseInt);
+ * // => [6, 8, 10]
+ */
+
+
+ function parseInt(string, radix, guard) {
+ if (guard || radix == null) {
+ radix = 0;
+ } else if (radix) {
+ radix = +radix;
+ }
+
+ return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
+ }
+ /**
+ * Repeats the given string `n` times.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to repeat.
+ * @param {number} [n=1] The number of times to repeat the string.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {string} Returns the repeated string.
+ * @example
+ *
+ * _.repeat('*', 3);
+ * // => '***'
+ *
+ * _.repeat('abc', 2);
+ * // => 'abcabc'
+ *
+ * _.repeat('abc', 0);
+ * // => ''
+ */
+
+
+ function repeat(string, n, guard) {
+ if (guard ? isIterateeCall(string, n, guard) : n === undefined$1) {
+ n = 1;
+ } else {
+ n = toInteger(n);
+ }
+
+ return baseRepeat(toString(string), n);
+ }
+ /**
+ * Replaces matches for `pattern` in `string` with `replacement`.
+ *
+ * **Note:** This method is based on
+ * [`String#replace`](https://mdn.io/String/replace).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to modify.
+ * @param {RegExp|string} pattern The pattern to replace.
+ * @param {Function|string} replacement The match replacement.
+ * @returns {string} Returns the modified string.
+ * @example
+ *
+ * _.replace('Hi Fred', 'Fred', 'Barney');
+ * // => 'Hi Barney'
+ */
+
+
+ function replace() {
+ var args = arguments,
+ string = toString(args[0]);
+ return args.length < 3 ? string : string.replace(args[1], args[2]);
+ }
+ /**
+ * Converts `string` to
+ * [snake case](https://en.wikipedia.org/wiki/Snake_case).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the snake cased string.
+ * @example
+ *
+ * _.snakeCase('Foo Bar');
+ * // => 'foo_bar'
+ *
+ * _.snakeCase('fooBar');
+ * // => 'foo_bar'
+ *
+ * _.snakeCase('--FOO-BAR--');
+ * // => 'foo_bar'
+ */
+
+
+ var snakeCase = createCompounder(function (result, word, index) {
+ return result + (index ? '_' : '') + word.toLowerCase();
+ });
+ /**
+ * Splits `string` by `separator`.
+ *
+ * **Note:** This method is based on
+ * [`String#split`](https://mdn.io/String/split).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category String
+ * @param {string} [string=''] The string to split.
+ * @param {RegExp|string} separator The separator pattern to split by.
+ * @param {number} [limit] The length to truncate results to.
+ * @returns {Array} Returns the string segments.
+ * @example
+ *
+ * _.split('a-b-c', '-', 2);
+ * // => ['a', 'b']
+ */
+
+ function split(string, separator, limit) {
+ if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
+ separator = limit = undefined$1;
+ }
+
+ limit = limit === undefined$1 ? MAX_ARRAY_LENGTH : limit >>> 0;
+
+ if (!limit) {
+ return [];
+ }
+
+ string = toString(string);
+
+ if (string && (typeof separator == 'string' || separator != null && !isRegExp(separator))) {
+ separator = baseToString(separator);
+
+ if (!separator && hasUnicode(string)) {
+ return castSlice(stringToArray(string), 0, limit);
+ }
+ }
+
+ return string.split(separator, limit);
+ }
+ /**
+ * Converts `string` to
+ * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
+ *
+ * @static
+ * @memberOf _
+ * @since 3.1.0
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the start cased string.
+ * @example
+ *
+ * _.startCase('--foo-bar--');
+ * // => 'Foo Bar'
+ *
+ * _.startCase('fooBar');
+ * // => 'Foo Bar'
+ *
+ * _.startCase('__FOO_BAR__');
+ * // => 'FOO BAR'
+ */
+
+
+ var startCase = createCompounder(function (result, word, index) {
+ return result + (index ? ' ' : '') + upperFirst(word);
+ });
+ /**
+ * Checks if `string` starts with the given target string.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category String
+ * @param {string} [string=''] The string to inspect.
+ * @param {string} [target] The string to search for.
+ * @param {number} [position=0] The position to search from.
+ * @returns {boolean} Returns `true` if `string` starts with `target`,
+ * else `false`.
+ * @example
+ *
+ * _.startsWith('abc', 'a');
+ * // => true
+ *
+ * _.startsWith('abc', 'b');
+ * // => false
+ *
+ * _.startsWith('abc', 'b', 1);
+ * // => true
+ */
+
+ function startsWith(string, target, position) {
+ string = toString(string);
+ position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length);
+ target = baseToString(target);
+ return string.slice(position, position + target.length) == target;
+ }
+ /**
+ * Creates a compiled template function that can interpolate data properties
+ * in "interpolate" delimiters, HTML-escape interpolated data properties in
+ * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
+ * properties may be accessed as free variables in the template. If a setting
+ * object is given, it takes precedence over `_.templateSettings` values.
+ *
+ * **Note:** In the development build `_.template` utilizes
+ * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
+ * for easier debugging.
+ *
+ * For more information on precompiling templates see
+ * [lodash's custom builds documentation](https://lodash.com/custom-builds).
+ *
+ * For more information on Chrome extension sandboxes see
+ * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The template string.
+ * @param {Object} [options={}] The options object.
+ * @param {RegExp} [options.escape=_.templateSettings.escape]
+ * The HTML "escape" delimiter.
+ * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
+ * The "evaluate" delimiter.
+ * @param {Object} [options.imports=_.templateSettings.imports]
+ * An object to import into the template as free variables.
+ * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
+ * The "interpolate" delimiter.
+ * @param {string} [options.sourceURL='lodash.templateSources[n]']
+ * The sourceURL of the compiled template.
+ * @param {string} [options.variable='obj']
+ * The data object variable name.
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
+ * @returns {Function} Returns the compiled template function.
+ * @example
+ *
+ * // Use the "interpolate" delimiter to create a compiled template.
+ * var compiled = _.template('hello <%= user %>!');
+ * compiled({ 'user': 'fred' });
+ * // => 'hello fred!'
+ *
+ * // Use the HTML "escape" delimiter to escape data property values.
+ * var compiled = _.template('<%- value %>');
+ * compiled({ 'value': '