gbc-kyc-kit 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13724,7 +13724,7 @@ function useWatch(props) {
13724
13724
  _name.current = name;
13725
13725
  useSubscribe({
13726
13726
  disabled,
13727
- subject: control._subjects.watch,
13727
+ subject: control._subjects.values,
13728
13728
  next: (formState) => {
13729
13729
  if (shouldSubscribeByName(_name.current, formState.name, exact)) {
13730
13730
  updateValue(cloneObject(generateWatchOutput(_name.current, control._names, formState.values || control._formValues, false, defaultValue)));
@@ -13887,7 +13887,7 @@ var isHTMLElement = (value) => {
13887
13887
  const owner = value ? value.ownerDocument : 0;
13888
13888
  return value instanceof (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement);
13889
13889
  };
13890
- var isMessage = (value) => isString(value) || React$1.isValidElement(value);
13890
+ var isMessage = (value) => isString(value);
13891
13891
  var isRadioInput = (element) => element.type === "radio";
13892
13892
  var isRegex = (value) => value instanceof RegExp;
13893
13893
  const defaultResult = {
@@ -14108,8 +14108,11 @@ function unset(object2, path) {
14108
14108
  function createSubject() {
14109
14109
  let _observers = [];
14110
14110
  const next = (value) => {
14111
- for (const observer of _observers) {
14112
- observer.next(value);
14111
+ let x = 0;
14112
+ const l2 = _observers.length;
14113
+ while (x < l2) {
14114
+ _observers[x].next(value);
14115
+ ++x;
14113
14116
  }
14114
14117
  };
14115
14118
  const subscribe2 = (observer) => {
@@ -14195,7 +14198,7 @@ function getDirtyFieldsFromDefaultValues(data2, formValues, dirtyFieldsFromValue
14195
14198
  getDirtyFieldsFromDefaultValues(data2[key], isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);
14196
14199
  }
14197
14200
  } else {
14198
- deepEqual(data2[key], formValues[key]) ? delete dirtyFieldsFromValues[key] : dirtyFieldsFromValues[key] = true;
14201
+ dirtyFieldsFromValues[key] = !deepEqual(data2[key], formValues[key]);
14199
14202
  }
14200
14203
  }
14201
14204
  }
@@ -14288,7 +14291,6 @@ function createFormControl(props = {}, flushRootRender) {
14288
14291
  ...defaultOptions,
14289
14292
  ...props
14290
14293
  };
14291
- const shouldCaptureDirtyFields = props.resetOptions && props.resetOptions.keepDirtyValues;
14292
14294
  let _formState = {
14293
14295
  submitCount: 0,
14294
14296
  isDirty: false,
@@ -14303,7 +14305,7 @@ function createFormControl(props = {}, flushRootRender) {
14303
14305
  errors: {}
14304
14306
  };
14305
14307
  let _fields = {};
14306
- let _defaultValues = isObject$5(_options.defaultValues) ? cloneObject(_options.defaultValues) || {} : {};
14308
+ let _defaultValues = isObject$5(_options.defaultValues) || isObject$5(_options.values) ? cloneObject(_options.defaultValues || _options.values) || {} : {};
14307
14309
  let _formValues = _options.shouldUnregister ? {} : cloneObject(_defaultValues);
14308
14310
  let _stateFlags = {
14309
14311
  action: false,
@@ -14318,6 +14320,7 @@ function createFormControl(props = {}, flushRootRender) {
14318
14320
  };
14319
14321
  let delayErrorCallback;
14320
14322
  let timer = 0;
14323
+ const shouldCaptureDirtyFields = props.resetOptions && props.resetOptions.keepDirtyValues;
14321
14324
  const _proxyFormState = {
14322
14325
  isDirty: false,
14323
14326
  dirtyFields: false,
@@ -14327,7 +14330,7 @@ function createFormControl(props = {}, flushRootRender) {
14327
14330
  errors: false
14328
14331
  };
14329
14332
  const _subjects = {
14330
- watch: createSubject(),
14333
+ values: createSubject(),
14331
14334
  array: createSubject(),
14332
14335
  state: createSubject()
14333
14336
  };
@@ -14336,13 +14339,12 @@ function createFormControl(props = {}, flushRootRender) {
14336
14339
  const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;
14337
14340
  const debounce = (callback) => (wait) => {
14338
14341
  clearTimeout(timer);
14339
- timer = window.setTimeout(callback, wait);
14342
+ timer = setTimeout(callback, wait);
14340
14343
  };
14341
14344
  const _updateValid = async (shouldUpdateValid) => {
14342
14345
  if (_proxyFormState.isValid || shouldUpdateValid) {
14343
14346
  const isValid = _options.resolver ? isEmptyObject((await _executeSchema()).errors) : await executeBuiltInValidation(_fields, true);
14344
14347
  if (isValid !== _formState.isValid) {
14345
- _formState.isValid = isValid;
14346
14348
  _subjects.state.next({
14347
14349
  isValid
14348
14350
  });
@@ -14520,8 +14522,9 @@ function createFormControl(props = {}, flushRootRender) {
14520
14522
  } else {
14521
14523
  fieldReference.ref.value = fieldValue;
14522
14524
  if (!fieldReference.ref.type) {
14523
- _subjects.watch.next({
14524
- name
14525
+ _subjects.values.next({
14526
+ name,
14527
+ values: { ..._formValues }
14525
14528
  });
14526
14529
  }
14527
14530
  }
@@ -14546,22 +14549,22 @@ function createFormControl(props = {}, flushRootRender) {
14546
14549
  if (isFieldArray) {
14547
14550
  _subjects.array.next({
14548
14551
  name,
14549
- values: _formValues
14552
+ values: { ..._formValues }
14550
14553
  });
14551
14554
  if ((_proxyFormState.isDirty || _proxyFormState.dirtyFields) && options.shouldDirty) {
14552
- _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);
14553
14555
  _subjects.state.next({
14554
14556
  name,
14555
- dirtyFields: _formState.dirtyFields,
14557
+ dirtyFields: getDirtyFields(_defaultValues, _formValues),
14556
14558
  isDirty: _getDirty(name, cloneValue)
14557
14559
  });
14558
14560
  }
14559
14561
  } else {
14560
14562
  field && !field._f && !isNullOrUndefined(cloneValue) ? setValues(name, cloneValue, options) : setFieldValue(name, cloneValue, options);
14561
14563
  }
14562
- isWatched(name, _names) && _subjects.state.next({});
14563
- _subjects.watch.next({
14564
- name
14564
+ isWatched(name, _names) && _subjects.state.next({ ..._formState });
14565
+ _subjects.values.next({
14566
+ name,
14567
+ values: { ..._formValues }
14565
14568
  });
14566
14569
  !_stateFlags.mount && flushRootRender();
14567
14570
  };
@@ -14586,15 +14589,16 @@ function createFormControl(props = {}, flushRootRender) {
14586
14589
  }
14587
14590
  const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent, false);
14588
14591
  const shouldRender = !isEmptyObject(fieldState) || watched;
14589
- !isBlurEvent && _subjects.watch.next({
14592
+ !isBlurEvent && _subjects.values.next({
14590
14593
  name,
14591
- type: event.type
14594
+ type: event.type,
14595
+ values: { ..._formValues }
14592
14596
  });
14593
14597
  if (shouldSkipValidation) {
14594
14598
  _proxyFormState.isValid && _updateValid();
14595
14599
  return shouldRender && _subjects.state.next({ name, ...watched ? {} : fieldState });
14596
14600
  }
14597
- !isBlurEvent && watched && _subjects.state.next({});
14601
+ !isBlurEvent && watched && _subjects.state.next({ ..._formState });
14598
14602
  _updateIsValidating(true);
14599
14603
  if (_options.resolver) {
14600
14604
  const { errors } = await _executeSchema([name]);
@@ -14656,9 +14660,9 @@ function createFormControl(props = {}, flushRootRender) {
14656
14660
  error: get$2((formState || _formState).errors, name)
14657
14661
  });
14658
14662
  const clearErrors = (name) => {
14659
- name ? convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName)) : _formState.errors = {};
14663
+ name && convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName));
14660
14664
  _subjects.state.next({
14661
- errors: _formState.errors
14665
+ errors: name ? _formState.errors : {}
14662
14666
  });
14663
14667
  };
14664
14668
  const setError = (name, error, options) => {
@@ -14674,7 +14678,7 @@ function createFormControl(props = {}, flushRootRender) {
14674
14678
  });
14675
14679
  options && options.shouldFocus && ref && ref.focus && ref.focus();
14676
14680
  };
14677
- const watch = (name, defaultValue) => isFunction$3(name) ? _subjects.watch.subscribe({
14681
+ const watch = (name, defaultValue) => isFunction$3(name) ? _subjects.values.subscribe({
14678
14682
  next: (payload) => name(_getWatch(void 0, defaultValue), payload)
14679
14683
  }) : _getWatch(name, defaultValue, true);
14680
14684
  const unregister = (name, options = {}) => {
@@ -14692,7 +14696,9 @@ function createFormControl(props = {}, flushRootRender) {
14692
14696
  !_options.shouldUnregister && !options.keepDefaultValue && unset(_defaultValues, fieldName);
14693
14697
  }
14694
14698
  }
14695
- _subjects.watch.next({});
14699
+ _subjects.values.next({
14700
+ values: { ..._formValues }
14701
+ });
14696
14702
  _subjects.state.next({
14697
14703
  ..._formState,
14698
14704
  ...!options.keepDirty ? {} : { isDirty: _getDirty() }
@@ -14777,6 +14783,7 @@ function createFormControl(props = {}, flushRootRender) {
14777
14783
  } else {
14778
14784
  await executeBuiltInValidation(_fields);
14779
14785
  }
14786
+ unset(_formState.errors, "root");
14780
14787
  if (isEmptyObject(_formState.errors)) {
14781
14788
  _subjects.state.next({
14782
14789
  errors: {}
@@ -14787,6 +14794,7 @@ function createFormControl(props = {}, flushRootRender) {
14787
14794
  await onInvalid({ ..._formState.errors }, e2);
14788
14795
  }
14789
14796
  _focusError();
14797
+ setTimeout(_focusError);
14790
14798
  }
14791
14799
  _subjects.state.next({
14792
14800
  isSubmitted: true,
@@ -14852,7 +14860,7 @@ function createFormControl(props = {}, flushRootRender) {
14852
14860
  _subjects.array.next({
14853
14861
  values
14854
14862
  });
14855
- _subjects.watch.next({
14863
+ _subjects.values.next({
14856
14864
  values
14857
14865
  });
14858
14866
  }
@@ -14869,9 +14877,9 @@ function createFormControl(props = {}, flushRootRender) {
14869
14877
  _stateFlags.watch = !!props.shouldUnregister;
14870
14878
  _subjects.state.next({
14871
14879
  submitCount: keepStateOptions.keepSubmitCount ? _formState.submitCount : 0,
14872
- isDirty: keepStateOptions.keepDirty || keepStateOptions.keepDirtyValues ? _formState.isDirty : !!(keepStateOptions.keepDefaultValues && !deepEqual(formValues, _defaultValues)),
14880
+ isDirty: keepStateOptions.keepDirty ? _formState.isDirty : !!(keepStateOptions.keepDefaultValues && !deepEqual(formValues, _defaultValues)),
14873
14881
  isSubmitted: keepStateOptions.keepIsSubmitted ? _formState.isSubmitted : false,
14874
- dirtyFields: keepStateOptions.keepDirty || keepStateOptions.keepDirtyValues ? _formState.dirtyFields : keepStateOptions.keepDefaultValues && formValues ? getDirtyFields(_defaultValues, formValues) : {},
14882
+ dirtyFields: keepStateOptions.keepDirtyValues ? _formState.dirtyFields : keepStateOptions.keepDefaultValues && formValues ? getDirtyFields(_defaultValues, formValues) : {},
14875
14883
  touchedFields: keepStateOptions.keepTouched ? _formState.touchedFields : {},
14876
14884
  errors: keepStateOptions.keepErrors ? _formState.errors : {},
14877
14885
  isSubmitting: false,
@@ -14910,7 +14918,6 @@ function createFormControl(props = {}, flushRootRender) {
14910
14918
  unregister,
14911
14919
  getFieldState,
14912
14920
  _executeSchema,
14913
- _focusError,
14914
14921
  _getWatch,
14915
14922
  _getDirty,
14916
14923
  _updateValid,
@@ -15005,6 +15012,11 @@ function useForm(props = {}) {
15005
15012
  }
15006
15013
  }
15007
15014
  });
15015
+ React$1.useEffect(() => {
15016
+ if (props.values && !deepEqual(props.values, control._defaultValues)) {
15017
+ control._reset(props.values, control._options.resetOptions);
15018
+ }
15019
+ }, [props.values, control]);
15008
15020
  React$1.useEffect(() => {
15009
15021
  if (!control._stateFlags.mount) {
15010
15022
  control._updateValid();
@@ -15012,18 +15024,10 @@ function useForm(props = {}) {
15012
15024
  }
15013
15025
  if (control._stateFlags.watch) {
15014
15026
  control._stateFlags.watch = false;
15015
- control._subjects.state.next({});
15027
+ control._subjects.state.next({ ...control._formState });
15016
15028
  }
15017
15029
  control._removeUnmounted();
15018
15030
  });
15019
- React$1.useEffect(() => {
15020
- if (props.values && !deepEqual(props.values, control._defaultValues)) {
15021
- control._reset(props.values, control._options.resetOptions);
15022
- }
15023
- }, [props.values, control]);
15024
- React$1.useEffect(() => {
15025
- formState.submitCount && control._focusError();
15026
- }, [control, formState.submitCount]);
15027
15031
  _formControl.current.formState = getProxyFormState(formState, control);
15028
15032
  return _formControl.current;
15029
15033
  }
@@ -20453,6 +20457,188 @@ DocumentReader.propTypes = {
20453
20457
  dataDocument: propTypes.exports.PropTypes.func.isRequired,
20454
20458
  inProduction: propTypes.exports.PropTypes.string
20455
20459
  };
20460
+ const FaceMatchController = (dataDocument, clientId, authorize, inProduction) => {
20461
+ const [docImage, setDocImage] = useState({});
20462
+ const [image, setImage] = useState("");
20463
+ const [message, setMessage] = useState("");
20464
+ const [isLoading, setIsLoading] = useState(false);
20465
+ const [status, setStatus] = useState(clientId === void 0 ? "CLIENTID" : authorize === void 0 ? "TOKEN" : "");
20466
+ const clearState = () => {
20467
+ setDocImage({});
20468
+ setImage("");
20469
+ setStatus("");
20470
+ };
20471
+ const {
20472
+ handleSubmit: simpleHandleSubmit
20473
+ } = useForm();
20474
+ const handleChangeDocument = (e2) => {
20475
+ const file = e2.target.files[0];
20476
+ const reader = new FileReader();
20477
+ reader.addEventListener("load", () => {
20478
+ const {
20479
+ result
20480
+ } = reader;
20481
+ if (result != null) {
20482
+ setImage(result);
20483
+ setDocImage(file.name);
20484
+ }
20485
+ });
20486
+ reader.readAsDataURL(file);
20487
+ };
20488
+ const onSendSubmitSelfie = async () => {
20489
+ var _a;
20490
+ setIsLoading(true);
20491
+ try {
20492
+ const res = await authorize();
20493
+ const customHeaders = {
20494
+ client_id: clientId,
20495
+ access_token: res
20496
+ };
20497
+ const parseReq = {
20498
+ method: "POST",
20499
+ path: "api/v1/kyc-kit/document/recognition",
20500
+ inProduction,
20501
+ customHeaders,
20502
+ bodyParams: {
20503
+ image
20504
+ }
20505
+ };
20506
+ try {
20507
+ const res2 = await request2(parseReq);
20508
+ res2.data && await dataDocument(res2.data);
20509
+ const {
20510
+ message: message2
20511
+ } = res2.data;
20512
+ message2 && setStatus(message2);
20513
+ setMessage("Documento verificado con \xE9xito");
20514
+ } catch (error) {
20515
+ let message2 = "";
20516
+ const {
20517
+ status: status2
20518
+ } = error.response;
20519
+ if ((_a = error.response.data) == null ? void 0 : _a.message) {
20520
+ message2 = error.response.data.message;
20521
+ } else if (status2 === 500) {
20522
+ message2 = "Limite de consultas - Verificar con el proveedor";
20523
+ }
20524
+ setIsLoading(null);
20525
+ setMessage(message2);
20526
+ setStatus(status2);
20527
+ ErrorHandler(error);
20528
+ }
20529
+ } catch (error) {
20530
+ Q.error("Error - Verificar host con el proveedor");
20531
+ } finally {
20532
+ setIsLoading(false);
20533
+ }
20534
+ };
20535
+ return {
20536
+ handleChangeDocument,
20537
+ onSendSubmitSelfie,
20538
+ simpleHandleSubmit,
20539
+ isLoading,
20540
+ docImage,
20541
+ status,
20542
+ message,
20543
+ clearState
20544
+ };
20545
+ };
20546
+ function FaceMatch({
20547
+ mode,
20548
+ dataDocument,
20549
+ clientId,
20550
+ authorize,
20551
+ inProduction
20552
+ }) {
20553
+ const {
20554
+ onSendSubmitSelfie,
20555
+ handleChangeDocument,
20556
+ simpleHandleSubmit,
20557
+ isLoading,
20558
+ docImage,
20559
+ status,
20560
+ message,
20561
+ clearState
20562
+ } = FaceMatchController(dataDocument, clientId, authorize, inProduction);
20563
+ return /* @__PURE__ */ jsxs("div", {
20564
+ className: `kit-gbc ${mode}`,
20565
+ children: [/* @__PURE__ */ jsx(k$1, {
20566
+ position: "top-center",
20567
+ autoClose: 5e3,
20568
+ hideProgressBar: false,
20569
+ newestOnTop: false,
20570
+ closeOnClick: true,
20571
+ rtl: false,
20572
+ pauseOnFocusLoss: true,
20573
+ draggable: true,
20574
+ pauseOnHover: true
20575
+ }), isLoading && /* @__PURE__ */ jsx(BackDropLoader, {}), /* @__PURE__ */ jsx("form", {
20576
+ onSubmit: simpleHandleSubmit(onSendSubmitSelfie),
20577
+ children: /* @__PURE__ */ jsxs("div", {
20578
+ className: "sub",
20579
+ children: [/* @__PURE__ */ jsx("h4", {
20580
+ children: "Comparaci\xF3n de rostro"
20581
+ }), !lib$1(status) ? /* @__PURE__ */ jsx(StatusComponent, {
20582
+ status,
20583
+ message,
20584
+ clearState
20585
+ }) : /* @__PURE__ */ jsxs(Fragment, {
20586
+ children: [/* @__PURE__ */ jsx("p", {
20587
+ children: "Utilice la c\xE1mara de su dispositivo para capturar una selfie."
20588
+ }), /* @__PURE__ */ jsxs("div", {
20589
+ className: "pics-container",
20590
+ children: [/* @__PURE__ */ jsxs("label", {
20591
+ className: "upload-document",
20592
+ children: [/* @__PURE__ */ jsx(UploadIcon, {}), /* @__PURE__ */ jsx("p", {
20593
+ children: lib$1(docImage) ? "Cargar documento" : docImage
20594
+ }), /* @__PURE__ */ jsx("input", {
20595
+ type: "file",
20596
+ hidden: true,
20597
+ accept: "image/*",
20598
+ capture: "camera",
20599
+ id: "docImage",
20600
+ onChange: (e2) => {
20601
+ handleChangeDocument(e2);
20602
+ }
20603
+ })]
20604
+ }), /* @__PURE__ */ jsxs("label", {
20605
+ className: "upload-document",
20606
+ children: [/* @__PURE__ */ jsx(UploadIcon, {}), /* @__PURE__ */ jsx("p", {
20607
+ children: lib$1(docImage) ? "Cargar documento" : docImage
20608
+ }), /* @__PURE__ */ jsx("input", {
20609
+ type: "file",
20610
+ hidden: true,
20611
+ accept: "image/*",
20612
+ capture: "camera",
20613
+ id: "docImage",
20614
+ onChange: (e2) => {
20615
+ handleChangeDocument(e2);
20616
+ }
20617
+ })]
20618
+ })]
20619
+ }), /* @__PURE__ */ jsx(CustomButton, {
20620
+ type: "submit",
20621
+ children: "Procesar"
20622
+ })]
20623
+ })]
20624
+ })
20625
+ })]
20626
+ });
20627
+ }
20628
+ FaceMatch.defaultProps = {
20629
+ mode: "light",
20630
+ loader: false,
20631
+ inProduction: "prd"
20632
+ };
20633
+ FaceMatch.propTypes = {
20634
+ mode: propTypes.exports.PropTypes.string,
20635
+ loader: propTypes.exports.PropTypes.bool,
20636
+ data: propTypes.exports.PropTypes.func,
20637
+ clientId: propTypes.exports.PropTypes.string.isRequired,
20638
+ authorize: propTypes.exports.PropTypes.func.isRequired,
20639
+ dataDocument: propTypes.exports.PropTypes.func.isRequired,
20640
+ inProduction: propTypes.exports.PropTypes.string
20641
+ };
20456
20642
  const LivenessCheckController = (clientId, authorize, inProduction) => {
20457
20643
  const [isLoading, setIsLoading] = useState(false);
20458
20644
  const [status, setStatus] = useState(clientId === void 0 ? "CLIENTID" : authorize === void 0 ? "TOKEN" : "");
@@ -20528,7 +20714,7 @@ var lib = {};
20528
20714
  var uaParser_min = { exports: {} };
20529
20715
  (function(module, exports) {
20530
20716
  (function(window2, undefined$1) {
20531
- var LIBVERSION = "1.0.32", EMPTY = "", UNKNOWN = "?", FUNC_TYPE = "function", UNDEF_TYPE = "undefined", OBJ_TYPE = "object", STR_TYPE = "string", MAJOR = "major", MODEL = "model", NAME = "name", TYPE = "type", VENDOR = "vendor", VERSION2 = "version", ARCHITECTURE = "architecture", CONSOLE = "console", MOBILE = "mobile", TABLET = "tablet", SMARTTV = "smarttv", WEARABLE = "wearable", EMBEDDED = "embedded", UA_MAX_LENGTH = 350;
20717
+ var LIBVERSION = "0.7.33", EMPTY = "", UNKNOWN = "?", FUNC_TYPE = "function", UNDEF_TYPE = "undefined", OBJ_TYPE = "object", STR_TYPE = "string", MAJOR = "major", MODEL = "model", NAME = "name", TYPE = "type", VENDOR = "vendor", VERSION2 = "version", ARCHITECTURE = "architecture", CONSOLE = "console", MOBILE = "mobile", TABLET = "tablet", SMARTTV = "smarttv", WEARABLE = "wearable", EMBEDDED = "embedded", UA_MAX_LENGTH = 350;
20532
20718
  var AMAZON = "Amazon", APPLE = "Apple", ASUS = "ASUS", BLACKBERRY = "BlackBerry", BROWSER = "Browser", CHROME = "Chrome", EDGE = "Edge", FIREFOX = "Firefox", GOOGLE = "Google", HUAWEI = "Huawei", LG = "LG", MICROSOFT = "Microsoft", MOTOROLA = "Motorola", OPERA = "Opera", SAMSUNG = "Samsung", SHARP = "Sharp", SONY = "Sony", XIAOMI = "Xiaomi", ZEBRA = "Zebra", FACEBOOK = "Facebook";
20533
20719
  var extend2 = function(regexes2, extensions) {
20534
20720
  var mergedRegexes = {};
@@ -20554,7 +20740,7 @@ var uaParser_min = { exports: {} };
20554
20740
  return typeof version === STR_TYPE ? version.replace(/[^\d\.]/g, EMPTY).split(".")[0] : undefined$1;
20555
20741
  }, trim2 = function(str, len) {
20556
20742
  if (typeof str === STR_TYPE) {
20557
- str = str.replace(/^\s\s*/, EMPTY).replace(/\s\s*$/, EMPTY);
20743
+ str = str.replace(/^\s\s*/, EMPTY);
20558
20744
  return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
20559
20745
  }
20560
20746
  };
@@ -20608,7 +20794,7 @@ var uaParser_min = { exports: {} };
20608
20794
  return str;
20609
20795
  };
20610
20796
  var oldSafariMap = { "1.0": "/8", 1.2: "/1", 1.3: "/3", "2.0": "/412", "2.0.2": "/416", "2.0.3": "/417", "2.0.4": "/419", "?": "/" }, windowsVersionMap = { ME: "4.90", "NT 3.11": "NT3.51", "NT 4.0": "NT4.0", 2e3: "NT 5.0", XP: ["NT 5.1", "NT 5.2"], Vista: "NT 6.0", 7: "NT 6.1", 8: "NT 6.2", 8.1: "NT 6.3", 10: ["NT 6.4", "NT 10.0"], RT: "ARM" };
20611
- var regexes = { browser: [[/\b(?:crmo|crios)\/([\w\.]+)/i], [VERSION2, [NAME, "Chrome"]], [/edg(?:e|ios|a)?\/([\w\.]+)/i], [VERSION2, [NAME, "Edge"]], [/(opera mini)\/([-\w\.]+)/i, /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i, /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i], [NAME, VERSION2], [/opios[\/ ]+([\w\.]+)/i], [VERSION2, [NAME, OPERA + " Mini"]], [/\bopr\/([\w\.]+)/i], [VERSION2, [NAME, OPERA]], [/(kindle)\/([\w\.]+)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, /(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i, /(ba?idubrowser)[\/ ]?([\w\.]+)/i, /(?:ms|\()(ie) ([\w\.]+)/i, /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i, /(weibo)__([\d\.]+)/i], [NAME, VERSION2], [/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i], [VERSION2, [NAME, "UC" + BROWSER]], [/microm.+\bqbcore\/([\w\.]+)/i, /\bqbcore\/([\w\.]+).+microm/i], [VERSION2, [NAME, "WeChat(Win) Desktop"]], [/micromessenger\/([\w\.]+)/i], [VERSION2, [NAME, "WeChat"]], [/konqueror\/([\w\.]+)/i], [VERSION2, [NAME, "Konqueror"]], [/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i], [VERSION2, [NAME, "IE"]], [/yabrowser\/([\w\.]+)/i], [VERSION2, [NAME, "Yandex"]], [/(avast|avg)\/([\w\.]+)/i], [[NAME, /(.+)/, "$1 Secure " + BROWSER], VERSION2], [/\bfocus\/([\w\.]+)/i], [VERSION2, [NAME, FIREFOX + " Focus"]], [/\bopt\/([\w\.]+)/i], [VERSION2, [NAME, OPERA + " Touch"]], [/coc_coc\w+\/([\w\.]+)/i], [VERSION2, [NAME, "Coc Coc"]], [/dolfin\/([\w\.]+)/i], [VERSION2, [NAME, "Dolphin"]], [/coast\/([\w\.]+)/i], [VERSION2, [NAME, OPERA + " Coast"]], [/miuibrowser\/([\w\.]+)/i], [VERSION2, [NAME, "MIUI " + BROWSER]], [/fxios\/([-\w\.]+)/i], [VERSION2, [NAME, FIREFOX]], [/\bqihu|(qi?ho?o?|360)browser/i], [[NAME, "360 " + BROWSER]], [/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i], [[NAME, /(.+)/, "$1 " + BROWSER], VERSION2], [/(comodo_dragon)\/([\w\.]+)/i], [[NAME, /_/g, " "], VERSION2], [/(electron)\/([\w\.]+) safari/i, /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, /m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i], [NAME, VERSION2], [/(metasr)[\/ ]?([\w\.]+)/i, /(lbbrowser)/i, /\[(linkedin)app\]/i], [NAME], [/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i], [[NAME, FACEBOOK], VERSION2], [/safari (line)\/([\w\.]+)/i, /\b(line)\/([\w\.]+)\/iab/i, /(chromium|instagram)[\/ ]([-\w\.]+)/i], [NAME, VERSION2], [/\bgsa\/([\w\.]+) .*safari\//i], [VERSION2, [NAME, "GSA"]], [/headlesschrome(?:\/([\w\.]+)| )/i], [VERSION2, [NAME, CHROME + " Headless"]], [/ wv\).+(chrome)\/([\w\.]+)/i], [[NAME, CHROME + " WebView"], VERSION2], [/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i], [VERSION2, [NAME, "Android " + BROWSER]], [/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i], [NAME, VERSION2], [/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i], [VERSION2, [NAME, "Mobile Safari"]], [/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i], [VERSION2, NAME], [/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i], [NAME, [VERSION2, strMapper, oldSafariMap]], [/(webkit|khtml)\/([\w\.]+)/i], [NAME, VERSION2], [/(navigator|netscape\d?)\/([-\w\.]+)/i], [[NAME, "Netscape"], VERSION2], [/mobile vr; rv:([\w\.]+)\).+firefox/i], [VERSION2, [NAME, FIREFOX + " Reality"]], [/ekiohf.+(flow)\/([\w\.]+)/i, /(swiftfox)/i, /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i, /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i, /(firefox)\/([\w\.]+)/i, /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i, /(links) \(([\w\.]+)/i], [NAME, VERSION2]], cpu: [[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i], [[ARCHITECTURE, "amd64"]], [/(ia32(?=;))/i], [[ARCHITECTURE, lowerize]], [/((?:i[346]|x)86)[;\)]/i], [[ARCHITECTURE, "ia32"]], [/\b(aarch64|arm(v?8e?l?|_?64))\b/i], [[ARCHITECTURE, "arm64"]], [/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i], [[ARCHITECTURE, "armhf"]], [/windows (ce|mobile); ppc;/i], [[ARCHITECTURE, "arm"]], [/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [/(sun4\w)[;\)]/i], [[ARCHITECTURE, "sparc"]], [/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i], [[ARCHITECTURE, lowerize]]], device: [[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i, /samsung[- ]([-\w]+)/i, /sec-(sgh\w+)/i], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [/\((ip(?:hone|od)[\w ]*);/i], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [/\((ipad);[-\w\),; ]+apple/i, /applecoremedia\/[\w\.]+ \((ipad)/i, /\b(ipad)\d\d?,\d\d?[;\]].+ios/i], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [/(?:huawei|honor)([-\w ]+)[;\)]/i, /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [/\b(poco[\w ]+)(?: bui|\))/i, /\b; (\w+) build\/hm\1/i, /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i], [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, MOBILE]], [/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i], [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, TABLET]], [/; (\w+) bui.+ oppo/i, /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i], [MODEL, [VENDOR, "OPPO"], [TYPE, MOBILE]], [/vivo (\w+)(?: bui|\))/i, /\b(v[12]\d{3}\w?[at])(?: bui|;)/i], [MODEL, [VENDOR, "Vivo"], [TYPE, MOBILE]], [/\b(rmx[12]\d{3})(?: bui|;|\))/i], [MODEL, [VENDOR, "Realme"], [TYPE, MOBILE]], [/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i, /\bmot(?:orola)?[- ](\w*)/i, /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [/\b(mz60\d|xoom[2 ]{0,2}) build\//i], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i, /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i, /\blg-?([\d\w]+) bui/i], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [/(ideatab[-\w ]+)/i, /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i], [MODEL, [VENDOR, "Lenovo"], [TYPE, TABLET]], [/(?:maemo|nokia).*(n900|lumia \d+)/i, /nokia[-_ ]?([-\w\.]*)/i], [[MODEL, /_/g, " "], [VENDOR, "Nokia"], [TYPE, MOBILE]], [/(pixel c)\b/i], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [/sony tablet [ps]/i, /\b(?:sony)?sgp\w+(?: bui|\))/i], [[MODEL, "Xperia Tablet"], [VENDOR, SONY], [TYPE, TABLET]], [/ (kb2005|in20[12]5|be20[12][59])\b/i, /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i], [MODEL, [VENDOR, "OnePlus"], [TYPE, MOBILE]], [/(alexa)webm/i, /(kf[a-z]{2}wi)( bui|\))/i, /(kf[a-z]+)( bui|\)).+silk\//i], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i], [[MODEL, /(.+)/g, "Fire Phone $1"], [VENDOR, AMAZON], [TYPE, MOBILE]], [/(playbook);[-\w\),; ]+(rim)/i], [MODEL, VENDOR, [TYPE, TABLET]], [/\b((?:bb[a-f]|st[hv])100-\d)/i, /\(bb10; (\w+)/i], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [/(nexus 9)/i], [MODEL, [VENDOR, "HTC"], [TYPE, TABLET]], [/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i, /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i, /(alcatel|geeksphone|nexian|panasonic|sony(?!-bra))[-_ ]?([-\w]*)/i], [VENDOR, [MODEL, /_/g, " "], [TYPE, MOBILE]], [/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i], [MODEL, [VENDOR, "Acer"], [TYPE, TABLET]], [/droid.+; (m[1-5] note) bui/i, /\bmz-([-\w]{2,})/i], [MODEL, [VENDOR, "Meizu"], [TYPE, MOBILE]], [/\b(sh-?[altvz]?\d\d[a-ekm]?)/i], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i, /(hp) ([\w ]+\w)/i, /(asus)-?(\w+)/i, /(microsoft); (lumia[\w ]+)/i, /(lenovo)[-_ ]?([-\w]+)/i, /(jolla)/i, /(oppo) ?([\w ]+) bui/i], [VENDOR, MODEL, [TYPE, MOBILE]], [/(archos) (gamepad2?)/i, /(hp).+(touchpad(?!.+tablet)|tablet)/i, /(kindle)\/([\w\.]+)/i, /(nook)[\w ]+build\/(\w+)/i, /(dell) (strea[kpr\d ]*[\dko])/i, /(le[- ]+pan)[- ]+(\w{1,9}) bui/i, /(trinity)[- ]*(t\d{3}) bui/i, /(gigaset)[- ]+(q\w{1,9}) bui/i, /(vodafone) ([\w ]+)(?:\)| bui)/i], [VENDOR, MODEL, [TYPE, TABLET]], [/(surface duo)/i], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [/droid [\d\.]+; (fp\du?)(?: b|\))/i], [MODEL, [VENDOR, "Fairphone"], [TYPE, MOBILE]], [/(u304aa)/i], [MODEL, [VENDOR, "AT&T"], [TYPE, MOBILE]], [/\bsie-(\w*)/i], [MODEL, [VENDOR, "Siemens"], [TYPE, MOBILE]], [/\b(rct\w+) b/i], [MODEL, [VENDOR, "RCA"], [TYPE, TABLET]], [/\b(venue[\d ]{2,7}) b/i], [MODEL, [VENDOR, "Dell"], [TYPE, TABLET]], [/\b(q(?:mv|ta)\w+) b/i], [MODEL, [VENDOR, "Verizon"], [TYPE, TABLET]], [/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i], [MODEL, [VENDOR, "Barnes & Noble"], [TYPE, TABLET]], [/\b(tm\d{3}\w+) b/i], [MODEL, [VENDOR, "NuVision"], [TYPE, TABLET]], [/\b(k88) b/i], [MODEL, [VENDOR, "ZTE"], [TYPE, TABLET]], [/\b(nx\d{3}j) b/i], [MODEL, [VENDOR, "ZTE"], [TYPE, MOBILE]], [/\b(gen\d{3}) b.+49h/i], [MODEL, [VENDOR, "Swiss"], [TYPE, MOBILE]], [/\b(zur\d{3}) b/i], [MODEL, [VENDOR, "Swiss"], [TYPE, TABLET]], [/\b((zeki)?tb.*\b) b/i], [MODEL, [VENDOR, "Zeki"], [TYPE, TABLET]], [/\b([yr]\d{2}) b/i, /\b(dragon[- ]+touch |dt)(\w{5}) b/i], [[VENDOR, "Dragon Touch"], MODEL, [TYPE, TABLET]], [/\b(ns-?\w{0,9}) b/i], [MODEL, [VENDOR, "Insignia"], [TYPE, TABLET]], [/\b((nxa|next)-?\w{0,9}) b/i], [MODEL, [VENDOR, "NextBook"], [TYPE, TABLET]], [/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i], [[VENDOR, "Voice"], MODEL, [TYPE, MOBILE]], [/\b(lvtel\-)?(v1[12]) b/i], [[VENDOR, "LvTel"], MODEL, [TYPE, MOBILE]], [/\b(ph-1) /i], [MODEL, [VENDOR, "Essential"], [TYPE, MOBILE]], [/\b(v(100md|700na|7011|917g).*\b) b/i], [MODEL, [VENDOR, "Envizen"], [TYPE, TABLET]], [/\b(trio[-\w\. ]+) b/i], [MODEL, [VENDOR, "MachSpeed"], [TYPE, TABLET]], [/\btu_(1491) b/i], [MODEL, [VENDOR, "Rotor"], [TYPE, TABLET]], [/(shield[\w ]+) b/i], [MODEL, [VENDOR, "Nvidia"], [TYPE, TABLET]], [/(sprint) (\w+)/i], [VENDOR, MODEL, [TYPE, MOBILE]], [/(kin\.[onetw]{3})/i], [[MODEL, /\./g, " "], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [/(ouya)/i, /(nintendo) ([wids3utch]+)/i], [VENDOR, MODEL, [TYPE, CONSOLE]], [/droid.+; (shield) bui/i], [MODEL, [VENDOR, "Nvidia"], [TYPE, CONSOLE]], [/(playstation [345portablevi]+)/i], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [/\b(xbox(?: one)?(?!; xbox))[\); ]/i], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [/smart-tv.+(samsung)/i], [VENDOR, [TYPE, SMARTTV]], [/hbbtv.+maple;(\d+)/i], [[MODEL, /^/, "SmartTV"], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i], [[VENDOR, LG], [TYPE, SMARTTV]], [/(apple) ?tv/i], [VENDOR, [MODEL, APPLE + " TV"], [TYPE, SMARTTV]], [/crkey/i], [[MODEL, CHROME + "cast"], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [/droid.+aft(\w)( bui|\))/i], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [/\(dtv[\);].+(aquos)/i, /(aquos-tv[\w ]+)\)/i], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]], [/(bravia[\w ]+)( bui|\))/i], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [/(mitv-\w{5}) bui/i], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, /hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i], [[VENDOR, trim2], [MODEL, trim2], [TYPE, SMARTTV]], [/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i], [[TYPE, SMARTTV]], [/((pebble))app/i], [VENDOR, MODEL, [TYPE, WEARABLE]], [/droid.+; (glass) \d/i], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [/droid.+; (wt63?0{2,3})\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [/(quest( 2)?)/i], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i], [VENDOR, [TYPE, EMBEDDED]], [/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i], [MODEL, [TYPE, MOBILE]], [/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i], [MODEL, [TYPE, TABLET]], [/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i], [[TYPE, TABLET]], [/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i], [[TYPE, MOBILE]], [/(android[-\w\. ]{0,9});.+buil/i], [MODEL, [VENDOR, "Generic"]]], engine: [[/windows.+ edge\/([\w\.]+)/i], [VERSION2, [NAME, EDGE + "HTML"]], [/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i], [VERSION2, [NAME, "Blink"]], [/(presto)\/([\w\.]+)/i, /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, /ekioh(flow)\/([\w\.]+)/i, /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, /(icab)[\/ ]([23]\.[\d\.]+)/i], [NAME, VERSION2], [/rv\:([\w\.]{1,9})\b.+(gecko)/i], [VERSION2, NAME]], os: [[/microsoft (windows) (vista|xp)/i], [NAME, VERSION2], [/(windows) nt 6\.2; (arm)/i, /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i, /(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i], [NAME, [VERSION2, strMapper, windowsVersionMap]], [/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i], [[NAME, "Windows"], [VERSION2, strMapper, windowsVersionMap]], [/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, /cfnetwork\/.+darwin/i], [[VERSION2, /_/g, "."], [NAME, "iOS"]], [/(mac os x) ?([\w\. ]*)/i, /(macintosh|mac_powerpc\b)(?!.+haiku)/i], [[NAME, "Mac OS"], [VERSION2, /_/g, "."]], [/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i], [VERSION2, NAME], [/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i, /(blackberry)\w*\/([\w\.]*)/i, /(tizen|kaios)[\/ ]([\w\.]+)/i, /\((series40);/i], [NAME, VERSION2], [/\(bb(10);/i], [VERSION2, [NAME, BLACKBERRY]], [/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i], [VERSION2, [NAME, "Symbian"]], [/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i], [VERSION2, [NAME, FIREFOX + " OS"]], [/web0s;.+rt(tv)/i, /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i], [VERSION2, [NAME, "webOS"]], [/crkey\/([\d\.]+)/i], [VERSION2, [NAME, CHROME + "cast"]], [/(cros) [\w]+ ([\w\.]+\w)/i], [[NAME, "Chromium OS"], VERSION2], [/(nintendo|playstation) ([wids345portablevuch]+)/i, /(xbox); +xbox ([^\);]+)/i, /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i, /(mint)[\/\(\) ]?(\w*)/i, /(mageia|vectorlinux)[; ]/i, /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i, /(hurd|linux) ?([\w\.]*)/i, /(gnu) ?([\w\.]*)/i, /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, /(haiku) (\w+)/i], [NAME, VERSION2], [/(sunos) ?([\w\.\d]*)/i], [[NAME, "Solaris"], VERSION2], [/((?:open)?solaris)[-\/ ]?([\w\.]*)/i, /(aix) ((\d)(?=\.|\)| )[\w\.])*/i, /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, /(unix) ?([\w\.]*)/i], [NAME, VERSION2]] };
20797
+ var regexes = { browser: [[/\b(?:crmo|crios)\/([\w\.]+)/i], [VERSION2, [NAME, "Chrome"]], [/edg(?:e|ios|a)?\/([\w\.]+)/i], [VERSION2, [NAME, "Edge"]], [/(opera mini)\/([-\w\.]+)/i, /(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i, /(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i], [NAME, VERSION2], [/opios[\/ ]+([\w\.]+)/i], [VERSION2, [NAME, OPERA + " Mini"]], [/\bopr\/([\w\.]+)/i], [VERSION2, [NAME, OPERA]], [/(kindle)\/([\w\.]+)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i, /(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i, /(ba?idubrowser)[\/ ]?([\w\.]+)/i, /(?:ms|\()(ie) ([\w\.]+)/i, /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i, /(weibo)__([\d\.]+)/i], [NAME, VERSION2], [/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i], [VERSION2, [NAME, "UC" + BROWSER]], [/microm.+\bqbcore\/([\w\.]+)/i, /\bqbcore\/([\w\.]+).+microm/i], [VERSION2, [NAME, "WeChat(Win) Desktop"]], [/micromessenger\/([\w\.]+)/i], [VERSION2, [NAME, "WeChat"]], [/konqueror\/([\w\.]+)/i], [VERSION2, [NAME, "Konqueror"]], [/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i], [VERSION2, [NAME, "IE"]], [/yabrowser\/([\w\.]+)/i], [VERSION2, [NAME, "Yandex"]], [/(avast|avg)\/([\w\.]+)/i], [[NAME, /(.+)/, "$1 Secure " + BROWSER], VERSION2], [/\bfocus\/([\w\.]+)/i], [VERSION2, [NAME, FIREFOX + " Focus"]], [/\bopt\/([\w\.]+)/i], [VERSION2, [NAME, OPERA + " Touch"]], [/coc_coc\w+\/([\w\.]+)/i], [VERSION2, [NAME, "Coc Coc"]], [/dolfin\/([\w\.]+)/i], [VERSION2, [NAME, "Dolphin"]], [/coast\/([\w\.]+)/i], [VERSION2, [NAME, OPERA + " Coast"]], [/miuibrowser\/([\w\.]+)/i], [VERSION2, [NAME, "MIUI " + BROWSER]], [/fxios\/([-\w\.]+)/i], [VERSION2, [NAME, FIREFOX]], [/\bqihu|(qi?ho?o?|360)browser/i], [[NAME, "360 " + BROWSER]], [/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i], [[NAME, /(.+)/, "$1 " + BROWSER], VERSION2], [/(comodo_dragon)\/([\w\.]+)/i], [[NAME, /_/g, " "], VERSION2], [/(electron)\/([\w\.]+) safari/i, /(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i, /m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i], [NAME, VERSION2], [/(metasr)[\/ ]?([\w\.]+)/i, /(lbbrowser)/i, /\[(linkedin)app\]/i], [NAME], [/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i], [[NAME, FACEBOOK], VERSION2], [/safari (line)\/([\w\.]+)/i, /\b(line)\/([\w\.]+)\/iab/i, /(chromium|instagram)[\/ ]([-\w\.]+)/i], [NAME, VERSION2], [/\bgsa\/([\w\.]+) .*safari\//i], [VERSION2, [NAME, "GSA"]], [/headlesschrome(?:\/([\w\.]+)| )/i], [VERSION2, [NAME, CHROME + " Headless"]], [/ wv\).+(chrome)\/([\w\.]+)/i], [[NAME, CHROME + " WebView"], VERSION2], [/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i], [VERSION2, [NAME, "Android " + BROWSER]], [/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i], [NAME, VERSION2], [/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i], [VERSION2, [NAME, "Mobile Safari"]], [/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i], [VERSION2, NAME], [/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i], [NAME, [VERSION2, strMapper, oldSafariMap]], [/(webkit|khtml)\/([\w\.]+)/i], [NAME, VERSION2], [/(navigator|netscape\d?)\/([-\w\.]+)/i], [[NAME, "Netscape"], VERSION2], [/mobile vr; rv:([\w\.]+)\).+firefox/i], [VERSION2, [NAME, FIREFOX + " Reality"]], [/ekiohf.+(flow)\/([\w\.]+)/i, /(swiftfox)/i, /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i, /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i, /(firefox)\/([\w\.]+)/i, /(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i, /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i, /(links) \(([\w\.]+)/i], [NAME, VERSION2], [/(cobalt)\/([\w\.]+)/i], [NAME, [VERSION2, /master.|lts./, ""]]], cpu: [[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i], [[ARCHITECTURE, "amd64"]], [/(ia32(?=;))/i], [[ARCHITECTURE, lowerize]], [/((?:i[346]|x)86)[;\)]/i], [[ARCHITECTURE, "ia32"]], [/\b(aarch64|arm(v?8e?l?|_?64))\b/i], [[ARCHITECTURE, "arm64"]], [/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i], [[ARCHITECTURE, "armhf"]], [/windows (ce|mobile); ppc;/i], [[ARCHITECTURE, "arm"]], [/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [/(sun4\w)[;\)]/i], [[ARCHITECTURE, "sparc"]], [/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i], [[ARCHITECTURE, lowerize]]], device: [[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [/\b((?:s[cgp]h|gt|sm)-\w+|galaxy nexus)/i, /samsung[- ]([-\w]+)/i, /sec-(sgh\w+)/i], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [/\((ip(?:hone|od)[\w ]*);/i], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [/\((ipad);[-\w\),; ]+apple/i, /applecoremedia\/[\w\.]+ \((ipad)/i, /\b(ipad)\d\d?,\d\d?[;\]].+ios/i], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [/(macintosh);/i], [MODEL, [VENDOR, APPLE]], [/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [/(?:huawei|honor)([-\w ]+)[;\)]/i, /\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [/\b(poco[\w ]+)(?: bui|\))/i, /\b; (\w+) build\/hm\1/i, /\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i, /\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i, /\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i], [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, MOBILE]], [/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i], [[MODEL, /_/g, " "], [VENDOR, XIAOMI], [TYPE, TABLET]], [/; (\w+) bui.+ oppo/i, /\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i], [MODEL, [VENDOR, "OPPO"], [TYPE, MOBILE]], [/vivo (\w+)(?: bui|\))/i, /\b(v[12]\d{3}\w?[at])(?: bui|;)/i], [MODEL, [VENDOR, "Vivo"], [TYPE, MOBILE]], [/\b(rmx[12]\d{3})(?: bui|;|\))/i], [MODEL, [VENDOR, "Realme"], [TYPE, MOBILE]], [/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i, /\bmot(?:orola)?[- ](\w*)/i, /((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [/\b(mz60\d|xoom[2 ]{0,2}) build\//i], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i, /\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i, /\blg-?([\d\w]+) bui/i], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [/(ideatab[-\w ]+)/i, /lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i], [MODEL, [VENDOR, "Lenovo"], [TYPE, TABLET]], [/(?:maemo|nokia).*(n900|lumia \d+)/i, /nokia[-_ ]?([-\w\.]*)/i], [[MODEL, /_/g, " "], [VENDOR, "Nokia"], [TYPE, MOBILE]], [/(pixel c)\b/i], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [/sony tablet [ps]/i, /\b(?:sony)?sgp\w+(?: bui|\))/i], [[MODEL, "Xperia Tablet"], [VENDOR, SONY], [TYPE, TABLET]], [/ (kb2005|in20[12]5|be20[12][59])\b/i, /(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i], [MODEL, [VENDOR, "OnePlus"], [TYPE, MOBILE]], [/(alexa)webm/i, /(kf[a-z]{2}wi)( bui|\))/i, /(kf[a-z]+)( bui|\)).+silk\//i], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i], [[MODEL, /(.+)/g, "Fire Phone $1"], [VENDOR, AMAZON], [TYPE, MOBILE]], [/(playbook);[-\w\),; ]+(rim)/i], [MODEL, VENDOR, [TYPE, TABLET]], [/\b((?:bb[a-f]|st[hv])100-\d)/i, /\(bb10; (\w+)/i], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [/(nexus 9)/i], [MODEL, [VENDOR, "HTC"], [TYPE, TABLET]], [/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i, /(zte)[- ]([\w ]+?)(?: bui|\/|\))/i, /(alcatel|geeksphone|nexian|panasonic|sony(?!-bra))[-_ ]?([-\w]*)/i], [VENDOR, [MODEL, /_/g, " "], [TYPE, MOBILE]], [/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i], [MODEL, [VENDOR, "Acer"], [TYPE, TABLET]], [/droid.+; (m[1-5] note) bui/i, /\bmz-([-\w]{2,})/i], [MODEL, [VENDOR, "Meizu"], [TYPE, MOBILE]], [/\b(sh-?[altvz]?\d\d[a-ekm]?)/i], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i, /(hp) ([\w ]+\w)/i, /(asus)-?(\w+)/i, /(microsoft); (lumia[\w ]+)/i, /(lenovo)[-_ ]?([-\w]+)/i, /(jolla)/i, /(oppo) ?([\w ]+) bui/i], [VENDOR, MODEL, [TYPE, MOBILE]], [/(archos) (gamepad2?)/i, /(hp).+(touchpad(?!.+tablet)|tablet)/i, /(kindle)\/([\w\.]+)/i, /(nook)[\w ]+build\/(\w+)/i, /(dell) (strea[kpr\d ]*[\dko])/i, /(le[- ]+pan)[- ]+(\w{1,9}) bui/i, /(trinity)[- ]*(t\d{3}) bui/i, /(gigaset)[- ]+(q\w{1,9}) bui/i, /(vodafone) ([\w ]+)(?:\)| bui)/i], [VENDOR, MODEL, [TYPE, TABLET]], [/(surface duo)/i], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [/droid [\d\.]+; (fp\du?)(?: b|\))/i], [MODEL, [VENDOR, "Fairphone"], [TYPE, MOBILE]], [/(u304aa)/i], [MODEL, [VENDOR, "AT&T"], [TYPE, MOBILE]], [/\bsie-(\w*)/i], [MODEL, [VENDOR, "Siemens"], [TYPE, MOBILE]], [/\b(rct\w+) b/i], [MODEL, [VENDOR, "RCA"], [TYPE, TABLET]], [/\b(venue[\d ]{2,7}) b/i], [MODEL, [VENDOR, "Dell"], [TYPE, TABLET]], [/\b(q(?:mv|ta)\w+) b/i], [MODEL, [VENDOR, "Verizon"], [TYPE, TABLET]], [/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i], [MODEL, [VENDOR, "Barnes & Noble"], [TYPE, TABLET]], [/\b(tm\d{3}\w+) b/i], [MODEL, [VENDOR, "NuVision"], [TYPE, TABLET]], [/\b(k88) b/i], [MODEL, [VENDOR, "ZTE"], [TYPE, TABLET]], [/\b(nx\d{3}j) b/i], [MODEL, [VENDOR, "ZTE"], [TYPE, MOBILE]], [/\b(gen\d{3}) b.+49h/i], [MODEL, [VENDOR, "Swiss"], [TYPE, MOBILE]], [/\b(zur\d{3}) b/i], [MODEL, [VENDOR, "Swiss"], [TYPE, TABLET]], [/\b((zeki)?tb.*\b) b/i], [MODEL, [VENDOR, "Zeki"], [TYPE, TABLET]], [/\b([yr]\d{2}) b/i, /\b(dragon[- ]+touch |dt)(\w{5}) b/i], [[VENDOR, "Dragon Touch"], MODEL, [TYPE, TABLET]], [/\b(ns-?\w{0,9}) b/i], [MODEL, [VENDOR, "Insignia"], [TYPE, TABLET]], [/\b((nxa|next)-?\w{0,9}) b/i], [MODEL, [VENDOR, "NextBook"], [TYPE, TABLET]], [/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i], [[VENDOR, "Voice"], MODEL, [TYPE, MOBILE]], [/\b(lvtel\-)?(v1[12]) b/i], [[VENDOR, "LvTel"], MODEL, [TYPE, MOBILE]], [/\b(ph-1) /i], [MODEL, [VENDOR, "Essential"], [TYPE, MOBILE]], [/\b(v(100md|700na|7011|917g).*\b) b/i], [MODEL, [VENDOR, "Envizen"], [TYPE, TABLET]], [/\b(trio[-\w\. ]+) b/i], [MODEL, [VENDOR, "MachSpeed"], [TYPE, TABLET]], [/\btu_(1491) b/i], [MODEL, [VENDOR, "Rotor"], [TYPE, TABLET]], [/(shield[\w ]+) b/i], [MODEL, [VENDOR, "Nvidia"], [TYPE, TABLET]], [/(sprint) (\w+)/i], [VENDOR, MODEL, [TYPE, MOBILE]], [/(kin\.[onetw]{3})/i], [[MODEL, /\./g, " "], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [/(ouya)/i, /(nintendo) ([wids3utch]+)/i], [VENDOR, MODEL, [TYPE, CONSOLE]], [/droid.+; (shield) bui/i], [MODEL, [VENDOR, "Nvidia"], [TYPE, CONSOLE]], [/(playstation [345portablevi]+)/i], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [/\b(xbox(?: one)?(?!; xbox))[\); ]/i], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [/smart-tv.+(samsung)/i], [VENDOR, [TYPE, SMARTTV]], [/hbbtv.+maple;(\d+)/i], [[MODEL, /^/, "SmartTV"], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i], [[VENDOR, LG], [TYPE, SMARTTV]], [/(apple) ?tv/i], [VENDOR, [MODEL, APPLE + " TV"], [TYPE, SMARTTV]], [/crkey/i], [[MODEL, CHROME + "cast"], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [/droid.+aft(\w)( bui|\))/i], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [/\(dtv[\);].+(aquos)/i, /(aquos-tv[\w ]+)\)/i], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]], [/(bravia[\w ]+)( bui|\))/i], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [/(mitv-\w{5}) bui/i], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i, /hbbtv\/\d+\.\d+\.\d+ +\([\w ]*; *(\w[^;]*);([^;]*)/i], [[VENDOR, trim2], [MODEL, trim2], [TYPE, SMARTTV]], [/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i], [[TYPE, SMARTTV]], [/((pebble))app/i], [VENDOR, MODEL, [TYPE, WEARABLE]], [/droid.+; (glass) \d/i], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [/droid.+; (wt63?0{2,3})\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [/(quest( 2)?)/i], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i], [VENDOR, [TYPE, EMBEDDED]], [/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i], [MODEL, [TYPE, MOBILE]], [/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i], [MODEL, [TYPE, TABLET]], [/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i], [[TYPE, TABLET]], [/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i], [[TYPE, MOBILE]], [/(android[-\w\. ]{0,9});.+buil/i], [MODEL, [VENDOR, "Generic"]]], engine: [[/windows.+ edge\/([\w\.]+)/i], [VERSION2, [NAME, EDGE + "HTML"]], [/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i], [VERSION2, [NAME, "Blink"]], [/(presto)\/([\w\.]+)/i, /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, /ekioh(flow)\/([\w\.]+)/i, /(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i, /(icab)[\/ ]([23]\.[\d\.]+)/i], [NAME, VERSION2], [/rv\:([\w\.]{1,9})\b.+(gecko)/i], [VERSION2, NAME]], os: [[/microsoft (windows) (vista|xp)/i], [NAME, VERSION2], [/(windows) nt 6\.2; (arm)/i, /(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i, /(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i], [NAME, [VERSION2, strMapper, windowsVersionMap]], [/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i], [[NAME, "Windows"], [VERSION2, strMapper, windowsVersionMap]], [/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, /cfnetwork\/.+darwin/i], [[VERSION2, /_/g, "."], [NAME, "iOS"]], [/(mac os x) ?([\w\. ]*)/i, /(macintosh|mac_powerpc\b)(?!.+haiku)/i], [[NAME, "Mac OS"], [VERSION2, /_/g, "."]], [/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i], [VERSION2, NAME], [/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i, /(blackberry)\w*\/([\w\.]*)/i, /(tizen|kaios)[\/ ]([\w\.]+)/i, /\((series40);/i], [NAME, VERSION2], [/\(bb(10);/i], [VERSION2, [NAME, BLACKBERRY]], [/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i], [VERSION2, [NAME, "Symbian"]], [/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i], [VERSION2, [NAME, FIREFOX + " OS"]], [/web0s;.+rt(tv)/i, /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i], [VERSION2, [NAME, "webOS"]], [/crkey\/([\d\.]+)/i], [VERSION2, [NAME, CHROME + "cast"]], [/(cros) [\w]+ ([\w\.]+\w)/i], [[NAME, "Chromium OS"], VERSION2], [/(nintendo|playstation) ([wids345portablevuch]+)/i, /(xbox); +xbox ([^\);]+)/i, /\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i, /(mint)[\/\(\) ]?(\w*)/i, /(mageia|vectorlinux)[; ]/i, /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i, /(hurd|linux) ?([\w\.]*)/i, /(gnu) ?([\w\.]*)/i, /\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i, /(haiku) (\w+)/i], [NAME, VERSION2], [/(sunos) ?([\w\.\d]*)/i], [[NAME, "Solaris"], VERSION2], [/((?:open)?solaris)[-\/ ]?([\w\.]*)/i, /(aix) ((\d)(?=\.|\)| )[\w\.])*/i, /\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, /(unix) ?([\w\.]*)/i], [NAME, VERSION2]] };
20612
20798
  var UAParser2 = function(ua2, extensions) {
20613
20799
  if (typeof ua2 === OBJ_TYPE) {
20614
20800
  extensions = ua2;
@@ -23858,4 +24044,4 @@ var bootstrap_bundle_min = { exports: {} };
23858
24044
  return R2(In), g2(In), { Alert: q2, Button: K, Carousel: at, Collapse: pt, Dropdown: li, Modal: Si, Offcanvas: Bi, Popover: hn, ScrollSpy: mn, Tab: On, Toast: In, Tooltip: an };
23859
24045
  });
23860
24046
  })(bootstrap_bundle_min);
23861
- export { BlackList, DocumentReader, LivenessCheck };
24047
+ export { BlackList, DocumentReader, FaceMatch, LivenessCheck };